線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2413
推到 Plurk!
推到 Facebook!

請問有關Form focus的問題...

答題得分者是:P.D.
ginochen
一般會員


發表:9
回覆:14
積分:4
註冊:2005-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-20 14:36:58 IP:203.79.xxx.xxx 訂閱
各位好:

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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-06-20 21:02:14 IP:220.136.xxx.xxx 未訂閱
在我看來, 你似乎把問題想複雜了. 以下的程式

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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-06-21 08:59:16 IP:220.130.xxx.xxx 訂閱
^^謝謝你,的確是這樣沒錯,但另外一個問題,當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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-22 16:17:04 IP:118.160.xxx.xxx 未訂閱
嗯, 不知道我是不是明白你的意思,
因為你使用了 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-06-22 17:07:17 IP:220.130.xxx.xxx 訂閱
謝謝您抽空一直來關心這個問題,其實我應該把問題簡單化一點描述,假設現在就只有一個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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-06-23 01:44:50 IP:118.160.xxx.xxx 未訂閱
早說清楚就不用花那麼多口水了!
以下參考


[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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-06-23 09:36:11 IP:220.130.xxx.xxx 訂閱
哈!歹勢歹勢,真是太強了,不愧是版主,謝謝您囉!

基本上已經解決我的問題了,但我實驗一下,若Form1上加了一個Edit元件,就沒效耶,不曉得哪邊要做調整?
編輯記錄
ginochen 重新編輯於 2010-06-23 15:47:09, 註解 無‧
系統時間:2024-05-01 21:59:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!