動態產生的元件的觸發事件如何撰寫? |
答題得分者是:領航天使
|
atwood
一般會員 發表:14 回覆:17 積分:6 註冊:2002-03-27 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
atwood
一般會員 發表:14 回覆:17 積分:6 註冊:2002-03-27 發送簡訊給我 |
|
00156
高階會員 發表:45 回覆:195 積分:112 註冊:2002-06-01 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 我也找到並且試驗了。 不過,指定的事件處理程序必須宣告在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 發送簡訊給我 |
引言: 所有的Event均必須是某一object 之Method, 一般的procedure不行. 但此Object不一定要是該Form 故你可以將所有須要的procedre,寫在MainForm上或有DataModule也可寫在DataModule中(此Datamodule必須先create)例如:謝謝版主的回覆與說明。Help裡也提到了您所說的Method與Procedure指標的不同。 不過,我的Form是動態由程式產生的,Method如果寫到其他的Class裡,就沒辦法使用新的Form裡的元件了。不知道有沒有解決的辦法?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 |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
G01
高階會員 發表:249 回覆:379 積分:215 註冊:2002-05-21 發送簡訊給我 |
以下為一個參考用的範例 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |