請問有關Form focus的問題... |
答題得分者是:P.D.
|
ginochen
一般會員 發表:9 回覆:14 積分:4 註冊:2005-02-17 發送簡訊給我 |
各位好:
1.若FormA 開啟另一個FormB(ShowModal 的方式),此時FormB關掉之後,回到FormA時會觸發什麼事件?似乎不是OnShow或OnActivate,因為我想在這個事件做一些動作,例如關掉輸入法顯示等。 2.若FormA不在焦點上,會觸發什麼事件,似乎不是OnDeactivate,因為我想在FormA離焦時,FormA上的Label元件顯示一些訊息,Ex:Label1.Caption:='Form 不在焦點'。 我暫時用應急的方式,加個Timer,在裡面寫法如下: if Self.Focused then label1.Caption := 'Form 在焦點' else label1.Caption := 'Form 不在焦點'; 希望各位前輩指教一下,除了Timer的做法外,還有什麼更好的方法,謝謝囉~ |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
在我看來, 你似乎把問題想複雜了. 以下的程式
TForm1.Button1OnClick(send: TObject); begin try Form2:= TForm2.Create(self); Form2.ShowModal; finally Form2.Free; end; end; 由 Form1 呼叫採取 showmodal方式, 當Form2.Close 時, 程式會回到 Form1的控制, 這時不管Form1 是否在onShow, onActive 都好, 一定會執行 Form2.Free, 那你把要執行的動作寫在 Form2.Free 下方不就得了 ============引 用 ginochen 文 章=================== 各位好: 1.若FormA 開啟另一個FormB(ShowModal 的方式),此時FormB關掉之後,回到FormA時會觸發什麼事件?似乎不是OnShow或OnActivate,因為我想在這個事件做一些動作,例如關掉輸入法顯示等。 2.若FormA不在焦點上,會觸發什麼事件,似乎不是OnDeactivate,因為我想在FormA離焦時,FormA上的Label元件顯示一些訊息,Ex:Label1.Caption:='Form 不在焦點'。 我暫時用應急的方式,加個Timer,在裡面寫法如下: if Self.Focused then ???label1.Caption := 'Form 在焦點' else ???label1.Caption := 'Form 不在焦點'; 希望各位前輩指教一下,除了Timer的做法外,還有什麼更好的方法,謝謝囉~ |
ginochen
一般會員 發表:9 回覆:14 積分:4 註冊:2005-02-17 發送簡訊給我 |
^^謝謝你,的確是這樣沒錯,但另外一個問題,當Form1離焦時會觸發什麼事件,
想在離焦時對Form1上的元件做一些動作,謝謝囉~ ===================引 用 P.D. 文 章=================== 在我看來, 你似乎把問題想複雜了. 以下的程式 TForm1.Button1OnClick(send: TObject); begin ?? try ? Form2:= TForm2.Create(self); ? Form2.ShowModal; ?? finally Form2.Free; ?? end; end; 由 Form1 呼叫採取 showmodal方式, 當Form2.Close 時, 程式會回到 Form1的控制, 這時不管Form1 是否在onShow, onActive 都好, 一定會執行 Form2.Free, 那你把要執行的動作寫在 Form2.Free 下方不就得了 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
嗯, 不知道我是不是明白你的意思,
因為你使用了 SHOWMODAL 的語法, 使用這個語法, 控制權就已移轉到 FORM2 上 此時你要如何對FORM1做啥事呢? 這會造成 FORM1 , FORM2 互搶控制權 如果進入FORM2 後, 想對FORM1 做一些事, 其實你只要在FORM2 上寫有關 FORM1 的CODE就好了 如果你採用 SHOW 方式來做, FORM1, FORM2 都是擁有ACTIVE 的行為, 似乎 才能比較符合你的需求 ===================引 用 ginochen 文 章=================== ^^謝謝你,的確是這樣沒錯,但另外一個問題,當Form1離焦時會觸發什麼事件, 想在離焦時對Form1上的元件做一些動作,謝謝囉~ ===================引 用 P.D. 文 章=================== 在我看來, 你似乎把問題想複雜了. 以下的程式 TForm1.Button1OnClick(send: TObject); begin ?? try ? Form2:= TForm2.Create(self); ? Form2.ShowModal; ?? finally Form2.Free; ?? end; end; 由 Form1 呼叫採取 showmodal方式, 當Form2.Close 時, 程式會回到 Form1的控制, 這時不管Form1 是否在onShow, onActive 都好, 一定會執行 Form2.Free, 那你把要執行的動作寫在 Form2.Free 下方不就得了 |
ginochen
一般會員 發表:9 回覆:14 積分:4 註冊:2005-02-17 發送簡訊給我 |
謝謝您抽空一直來關心這個問題,其實我應該把問題簡單化一點描述,假設現在就只有一個Form1(沒有Form2),在Form1上面只有一個Label1元件,執行時當離焦時(Ex:滑鼠點到Windows桌面),此時Form1的標頭列(是叫Border嗎?)會由藍變灰,這時我希望做下面
動作: Label1.Caption := 'Form1離開焦點!'; 當滑鼠又點回Form1時再做下面動作: Label1.Caption := 'Form1已在焦點!'; 以上是小弟主要的問題,Form1開啟Form2的問題,就當做我沒問就好了,哈! 謝謝你啦~ |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
早說清楚就不用花那麼多口水了!
以下參考 [code delphi] unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } procedure WMFocus(var Msg:Tmessage); Message WM_SETFOCUS; procedure WMunFocus(var Msg:Tmessage); Message WM_KILLFOCUS; end; var Form1: TForm1; implementation {$R *.DFM} Procedure TForm1.WMFocus(var Msg:Tmessage); begin Form1.Caption:= 'focus'; end; Procedure TForm1.WMunFocus(var Msg:Tmessage); begin Form1.Caption:= 'not focus'; end; end. [/code] |
ginochen
一般會員 發表:9 回覆:14 積分:4 註冊:2005-02-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |