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

請問form的onactivate事件?

答題得分者是:ccchen
jck1
一般會員


發表:53
回覆:67
積分:24
註冊:2002-05-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-15 10:33:35 IP:211.22.xxx.xxx 未訂閱
請問form的 onactivate 事件 除了一個始show或showmodal時會觸發以外 還有哪些情況會觸發呢?? 我看了help上寫著 Occurs when the form becomes active. 但我試了一下 當我用alt-tab將focus轉到其他應用程式,再轉回來 好像沒有觸發onactivate 又將form最小化後最大化 好像也沒觸發onactivate 不知什麼情況下會再觸發呢?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-15 10:48:05 IP:61.219.xxx.xxx 未訂閱
1.當我用alt-tab將focus轉到其他應用程式,再轉回來 此時觸發Application之onActive, 而不是form的 2. Form的onActive: 當在同一AP之不同form切換時 3. Form之onShow: 由hide變為show時 4. 最小化,最大化: 可寫Windowproc攔截WM_SYSCOMMAND之SC_MAXIMIZE,SC_MINIMIZE
jck1
一般會員


發表:53
回覆:67
積分:24
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-15 11:14:04 IP:211.22.xxx.xxx 未訂閱
引言: 2. Form的onActive: 當在同一AP之不同form切換時
謝謝ccchen大大的解答 我做了個實驗 當我在form1的button1以onclick叫用form2時 form2.show 這樣寫會觸發form1的onactivate 但如果是form2.showmodal這樣寫 則form1的onactivate是不會觸發的 這不知又是什麼原因呢?? 謝謝!!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-15 11:54:35 IP:61.219.xxx.xxx 未訂閱
當我在form1的button1以onclick叫用form2時 form2.show 這樣寫會觸發form1的onactivate 這是不可能的, 你再仔細觀查看看. 是否原focus不在form1上, click FOrm1之button時造成form1之active form2.show後若馬上close, Active也會回到form1
jck1
一般會員


發表:53
回覆:67
積分:24
註冊:2002-05-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-15 13:23:42 IP:211.22.xxx.xxx 未訂閱
我post一下我的測試碼    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  i: integer;    implementation    uses Unit2;    {$R *.DFM}    procedure TForm1.FormActivate(Sender: TObject);
begin
  inc(i);
  showmessage(inttostr(i));
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  //form2.show;
  form2.showmodal;
end;    end.    unit Unit2;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;    type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form2: TForm2;    implementation    {$R *.DFM}    procedure TForm2.Button1Click(Sender: TObject);
begin
  close;
end;    end.    
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-15 14:58:52 IP:61.219.xxx.xxx 未訂閱
完全照你的程式碼執行, FOrm1.Button1 Click並不會觸發Form1.active
jck1
一般會員


發表:53
回覆:67
積分:24
註冊:2002-05-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-15 15:15:03 IP:211.22.xxx.xxx 未訂閱
引言: 完全照你的程式碼執行, FOrm1.Button1 Click並不會觸發Form1.active
但如果改這樣就會,form1的onactivate就會觸發
procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.show;
  //form2.showmodal;
end;
只是搞不懂show 和 showmodal對onactivate的影響。
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-15 16:07:44 IP:61.219.xxx.xxx 未訂閱
form2.show; 就是不會,也不應該會 除非你把form1設為MDIForm, Form3為MDIChild
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-15 21:19:35 IP:203.217.xxx.xxx 未訂閱
我收到你的程式, 測試了一下還是沒問題.你回頭看看你寫的 當我在form1的button1以onclick叫用form2時form2.show這樣寫會觸發form1的onactivate 並不會 實際的情況是 1. 在form1按Button1->create form2時均不會觸發Form1之onActive 2. 在form2 按Button1->close Form2時 若FOrm2是showmodal則不會觸發 若FOrm2是show則會觸發 差異是在close而不是在Create對嗎? 這是合理的. Form2 show,由於兩個Form均可操作, 因此系統必須將Form1先Deactive, 故Form2 close時會觸發Form1之onActive Form2 Showmodal時,由於完全無機會操作form1故不須Deactive Form1, 因此回來時也不會觸發Form1之onActive 發表人 - ccchen 於 2002/11/15 21:20:33
系統時間:2024-05-01 3:05:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!