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

動態產生的元件的觸發事件如何撰寫?

答題得分者是:領航天使
atwood
一般會員


發表:14
回覆:17
積分:6
註冊:2002-03-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-13 21:59:25 IP:61.218.xxx.xxx 未訂閱
請問諸位: 動態產生的元件如何對它撰寫事件EX:on1Click(),以便控制元件的動作?
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-13 22:02:35 IP:211.23.xxx.xxx 未訂閱
多利用一下搜尋文章的功能吧 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-13 22:10:56 IP:61.219.xxx.xxx 未訂閱
引言: 請問諸位: 動態產生的元件如何對它撰寫事件EX:on1Click(),以便控制元件的動作?
用"搜尋文章"的功能,尋找"動態 事件", 就可找到您要的答案! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
atwood
一般會員


發表:14
回覆:17
積分:6
註冊:2002-03-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-13 23:33:51 IP:61.218.xxx.xxx 未訂閱
我找到了!謝謝!
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-14 15:05:12 IP:61.56.xxx.xxx 未訂閱
我也找到並且試驗了。 不過,指定的事件處理程序必須宣告在FORM裡面才能指定。如果是一般的procedure就沒辦法了。要怎麼解決呀?
ccchen
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-15 08:16:24 IP:203.217.xxx.xxx 未訂閱
引言: 我也找到並且試驗了。 不過,指定的事件處理程序必須宣告在FORM裡面才能指定。如果是一般的procedure就沒辦法了。要怎麼解決呀?
所有的Event均必須是某一object 之Method, 一般的procedure不行. 但此Object不一定要是該Form 故你可以將所有須要的procedre,寫在MainForm上或有DataModule也可寫在DataModule中(此Datamodule必須先create)例如:
  TMainDM_f = class(TDataModule)

//以下均是要提供其他元件RunTime使用之Method
    procedure AppIdle(Sender: TObject; var Done: Boolean);  //for application
    procedure OnMessage(var Msg: Tmsg; var Handled: Boolean);//for application
    procedure UnTrapedError(Sender: TObject; E: Exception);//for application
    procedure NumberFieldSetText(Sender: TField; const Text: String);//for TField
    procedure DateFieldSetText(Sender: TField; const Text: String);//for TField      private
    { Private declarations }
  public
    { Public declarations }
  end;
也可以宣告一個空的Class, 將這些procedure寫在此class中, 只要先Create此class, 就可將此class之method assign給其他object
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-15 13:48:22 IP:61.56.xxx.xxx 未訂閱
引言: 所有的Event均必須是某一object 之Method, 一般的procedure不行. 但此Object不一定要是該Form 故你可以將所有須要的procedre,寫在MainForm上或有DataModule也可寫在DataModule中(此Datamodule必須先create)例如:
  TMainDM_f = class(TDataModule)

//以下均是要提供其他元件RunTime使用之Method
    procedure AppIdle(Sender: TObject; var Done: Boolean);  //for application
    procedure OnMessage(var Msg: Tmsg; var Handled: Boolean);//for application
    procedure UnTrapedError(Sender: TObject; E: Exception);//for application
    procedure NumberFieldSetText(Sender: TField; const Text: String);//for TField
    procedure DateFieldSetText(Sender: TField; const Text: String);//for TField      private
    { Private declarations }
  public
    { Public declarations }
  end;
也可以宣告一個空的Class, 將這些procedure寫在此class中, 只要先Create此class, 就可將此class之method assign給其他object
謝謝版主的回覆與說明。Help裡也提到了您所說的Method與Procedure指標的不同。 不過,我的Form是動態由程式產生的,Method如果寫到其他的Class裡,就沒辦法使用新的Form裡的元件了。不知道有沒有解決的辦法?
ccchen
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-15 15:53:57 IP:203.217.xxx.xxx 未訂閱
Event均會傳入Sender之參數 由此Sender找Owner可以找到Form 在由此Form之Components或Controls元件找到你要的元件
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-17 12:16:38 IP:210.61.xxx.xxx 未訂閱
以下為一個參考用的範例 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; TEventOBJ=Object procedure doMyClick(Sender:TObject); end; var Form1: TForm1; btn:TButton; MyEvent:TEventOBJ; implementation {$R *.dfm} //TEventOBJ procedure TEventOBJ.doMyClick(Sender:TObject); begin ShowMessage('MyOnClick() is Running !!'); end; procedure TForm1.Button1Click(Sender: TObject); begin btn := TButton.Create(nil); btn.Left := 318; btn.Top := 50; btn.Parent := self; btn.OnClick := MyEvent.doMyClick; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin btn.Free; end; end.
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-17 20:41:03 IP:61.56.xxx.xxx 未訂閱
謝謝ccchen版主的回答~
系統時間:2024-04-27 4:33:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!