全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1216
推到 Plurk!
推到 Facebook!

如何在MessageBox訊息顯示後,讓游標出現在下一個MaskEdit中?

答題得分者是:RedSnow
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-23 16:34:40 IP:211.22.xxx.xxx 未訂閱
我設計的畫面如下: 我在製造商後面的空格寫下下面的程式.. procedure TPutDlg_mdataFrm.PDJMASKComEdit1Exit(Sender: TObject); begin ...... ...... if stbscQu.RecordCount = 0 then begin BTBeeper1.PlayDefaultSound; if MessageBox(Handle,'此為新規格,是否確定?','詢問訊息',MB_YESNO) = IDNO then begin PDJMASKComEdit1.SetFocus; Abort; end else MaskEdit6.SetFocus; end; end (當我在訊息出現後按下NO 則滑鼠指標在製造商的位置, 如果按下YES的話 則滑鼠指標是在張數後面) 不過 問題當我按下YES後 式顯示下面的畫面(下面的畫面並沒有滑鼠指標) 要如何才能讓我按下YES後 指標是指到張數後面的位置??
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-23 17:30:22 IP:210.64.xxx.xxx 未訂閱
你好 試試看先
if MessageBox(Handle,'此為新規格,是否確定?','詢問訊息',MB_YESNO) = IDNO then
begin
  PDJMASKComEdit1.SetFocus;
  Abort;
end
else
begin
  PDJMASKComEdit1.SetFocus; //先將焦點移到別的地方之後再移回來!!
  MaskEdit6.SetFocus;
end;
Pillar Wang
------
Pillar Wang
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-23 17:48:33 IP:202.47.xxx.xxx 未訂閱
您好﹗    您的程式碼并沒有錯誤﹐檢查對應[張數]的MaskEdit元件是否有其它的事件程式碼進行控制﹐比如說OnKeyPress等事件中存在對其的控管﹒ 或者把這個MaskEdit移除﹐重新加入一個新的MaskEdit﹐只更改其Name和Text屬性值﹐其它不用更改﹐使用其預設屬性值再Run一次﹐看看是否可解決問題﹐如果可以的話﹐就是屬性部分設定的錯誤了﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 18:15:41 IP:218.19.xxx.xxx 未訂閱
depblue 您好:    您這個問題幾乎和下列這一篇的問題一模一樣: 是須閃避的 BCB TQuery OnExit BUG 嗎? http://delphi.ktop.com.tw/topic.php?topic_id=70995 您無需去管該篇的標題是怎麼寫的?請仔細的瀏覽一下內文。 其實游標應該有 Focus 到 MaskEdit6 欄位裡去,當您直接按下字母鍵時會插入該字母,按下刪除鍵也能刪掉字元,只是看不到游標而已,我針對那種狀況做過測試,然後才做的回覆,因此我提出的方法是有效的,但是該篇討論中使用的範例是 BCB 所撰寫的,不知道您是否能自己轉成 Delphi 的來用?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-23 18:47:06 IP:218.19.xxx.xxx 未訂閱
depblue 您好:    我剛才搜尋了站上的文章,試著將我原先以 BCB 寫的敘述轉換成 Delphi 的,並配合您原先的敘述來改寫成下列的範例,您試試看:
... 以上略...    if stbscQu.RecordCount = 0 then
begin
    BTBeeper1.PlayDefaultSound;
    PostMessage(MaskEdit6.Handle, WM_KILLFOCUS, 0, 0);
    if MessageBox(Handle,'此為新規格,是否確定?','詢問訊息',MB_YESNO) = IDNO then
    begin
        PDJMASKComEdit1.SetFocus;
        Abort;
    end
    else
        PostMessage(MaskEdit6.Handle, WM_SETFOCUS, 0, 0);
end;    ... 以下略...
如果 Focus 離開 PDJMASKComEdit1 之後,不一定是到 MaskEdit6 欄位去的話,那麼您可以將那兩行紅字標示處的 MaskEdit6 改成 ActiveControl,這樣子就會在操作者回覆為 YES 時,將 Focus 返回原先指到的物件去了。 附註:我前一篇所列出的那篇討論中,原發問者提到可能是編譯環境版本上的差異,因此他必須在處理 WM_SETFOCUS 的敘述之前,加上一個移轉焦點至欲返回焦點物件以外物件的動作,如果您使用上述方式未能完全達到正常運作的話,請您也試著加上移轉焦點到其它物件上的敘述,例如:PDJMASKComEdit1.SetFocus;
系統時間:2024-06-24 21:10:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!