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

Set Focus到特定的視窗

尚未結案
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-26 18:01:44 IP:61.66.xxx.xxx 未訂閱
請問各位前輩: 我目前有一個A程式,執行到一半會產生一個MessageBox等待輸入 但是如果我在執行A程式一次時,焦點可能就不會落在MessageBox上(跑到其他視窗) 因此我就不能用鍵盤直接選Enter到觸發Yes按鈕或Tab轉移焦點到No按鈕 請問有什麼方式可以讓我確保按Enter時,會按下Yes按鈕 按Tab時,會轉移到No按鈕 爬過站上的一些文章,我在Timer事件中(Interval = 1000) 用PostMessage(hWnd,WM_SETFOCUS,NULL,0) or SetActiveWindow(hWnd)加SetFocus()都無法達成我的需求 請各位前輩有好的方法,可以不吝指教
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-26 19:52:00 IP:203.204.xxx.xxx 未訂閱
您好: 但是如果我在執行A程式一次時,焦點可能就不會落在MessageBox上(跑到其他視窗) 這句看不大懂. 您是有兩個程式,一個程式有MessageBox視窗出現,要用另一個程式去得到那視窗的焦點嗎? 如果是的話參考以下方式: HWND hw; hw=FindWindow(NULL,'Project1'); SetForegroundWindow(hw); //設定焦點
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-27 14:14:35 IP:61.66.xxx.xxx 未訂閱
我在敘述一次我的問題好了 我有一個A程式,但是我可能會不定時的最多打開4次 也就是說,最多畫面上有4個A程式在跑 A程式執行到某一個步驟後,會出現一個MessageBox問你是否正確 (如果其他同時還有3個A程式執行,將會暫時不進入此步驟, 因此最多只有1個MessageBox會出現) 問題來了,我本來應該是直接按下Enter鍵,Yes的按鈕就會被按下 但卻因為此時另外一個A程式被執行,因此Focus被設定到新的A程式視窗上 因此我按下Enter鍵,並不會執行Yes按鈕 我也試過SetForegroundWindow(hw); //設定焦點 但是這只是把我原本的視窗放到Top來,但我按下Enter時, Yes按鈕不一定被執行(Focus可能又跑到其他視窗上) 因此我想應該是要從兩個方向來做 1.讓MessageBox的視窗永遠得到Focus 2.攔截Enter及Tab,讓它可以對MessageBox做相對應的步驟 不過步驟二會比較複雜,因此希望各位前輩可以提供方法 讓我的MessageBox可以一直被Set Focus
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-27 16:57:45 IP:61.229.xxx.xxx 未訂閱
那個 MessageBox 是自己做的嗎? 如果是的話,可以在 OnDeactivate 中,把自己再設為 active,讓 focus 跑不掉
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-29 08:37:39 IP:61.66.xxx.xxx 未訂閱
引言: 那個 MessageBox 是自己做的嗎? 如果是的話,可以在 OnDeactivate 中,把自己再設為 active,讓 focus 跑不掉
windblown你好 MessageBox是我用Application->MessageBox(....)做的 而我在OnDeactive中也加入了幾行程式碼,但是我在執行時, 故意去點其他的視窗,並沒有發現進入OnDeactive的事件中(我有設中斷點) 不知道此事件該如何使用,並如何讓自己的Form變Active
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-29 10:06:14 IP:218.15.xxx.xxx 未訂閱
blk5743您好: 参考如下 http://delphi.ktop.com.tw/topic.php?topic_id=24741 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24003 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25572 应该有您要的,试试看 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-29 10:07:26 IP:61.229.xxx.xxx 未訂閱
我的建議如下    1 自己寫一個 MessageBox 2 因為 TApplication::MessageBox 是使用 Win32 API MessageBox, 所以試試看加一個 flag: MB_TOPMOST;ex: MB_OK|MB_TOPMOST, 這樣 MessageBox 永遠在最上面
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-29 13:48:21 IP:61.66.xxx.xxx 未訂閱
我之前也試過偷吃步 先設SetForegroundWindow(); 然後再用mouse_even(MOUSEEVENTF_LEFTDOWN,P.x,P.y,0,GetMessageExtraInfo()); 來使Form被Focus,這方法有用 不過我想應該會有更好的辦法才對 感謝各位提供許多方向,不過我想deity提供的方法較好 分數就給deity了
系統時間:2024-11-25 2:35:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!