請問我要如何使用動態元件的事件? |
答題得分者是:ha0009
|
ponyqq31
一般會員 發表:1 回覆:4 積分:1 註冊:2003-02-10 發送簡訊給我 |
以下是我寫的一段程式,但是我如果想在 doMyChang 裡做一些程式,如:我想在我動態產生的EDIT裡的ONCHANG事件裡做LABLE 的Caption改變,我要如何撰寫,那我如果一次產生多個物件,我在事件要如何片倒是那個物件說發生的事件?? 麻煩一下 ~~~~THANKS unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; //建立動態元件的事件
TEventOBJ=Object
procedure doMyClick(Sender:TObject);
procedure doMyChang(Sender:TObject);
end;
//建立動態元件的事件 var
Form1: TForm1;
//宣告動態元件事件
MyEvent:TEventOBJ;
//宣告動態元件事件 implementation {$R *.DFM} //動態元件事件程式撰寫
procedure TEventOBJ.doMyClick(Sender:TObject);
begin
ShowMessage('事件測試成功');
end; //動態元件事件程式撰寫
procedure TEventOBJ.doMyChang(Sender:TObject);
begin
???????????????????????????????????????????
end; //產生動態元件
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
aedt: tedit;
alabel : TLabel ;
begin
for i:= 1 to 5 do begin
//動態元件是CREATE在SELF上,SELF也就是指向這個FORM,所以這個FORM關掉後,就繪製動FREE掉 (EDIT 元件)
aedt:= tedit.create(self);
aedt.parent:= self;
aedt.visible:= true;
aedt.tag:= 9000 i;
aedt.top:= i * 20;
aedt.Name := 'xEdit' IntToStr(i) ; //動態元件是CREATE在SELF上,SELF也就是指向這個FORM,所以這個FORM關掉後,就繪製動FREE掉 (TLabel 元件)
alabel:= TLabel.create(self);
alabel.parent:= self;
alabel.visible:= true;
alabel.tag:= 5000 i;
alabel.top:= i * 100;
alabel.Name := 'xLabel' IntToStr(i) ;
end; //動態元件事件的使用及呼叫
aedt.OnClick := MyEvent.doMyClick;
aedt.OnChange :=MyEvent.doMyChang;
//動態元件事件的使用及呼叫
end; end.
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ponyqq31
一般會員 發表:1 回覆:4 積分:1 註冊:2003-02-10 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
procedure TEventOBJ.doMyChang(Sender:TObject); begin if not (Sender Is TEdit) then system.exit; // 第一個 TEdit if (Sender As TEdit).Name = 'xEdit1' then begin ..... end; // 第二個 TEdit if (Sender As TEdit).Name = 'xEdit2' then begin ..... end; end |
ponyqq31
一般會員 發表:1 回覆:4 積分:1 註冊:2003-02-10 發送簡訊給我 |
謝謝~~~已經可以使用 但是還有一個問題請教 我如果要在事件種改變別的元件屬性,如下,我試否要傳入元件給事件還是........? 謝謝 procedure TEventOBJ.doMyClick(Sender:TObject);
begin
if not (Sender Is TEdit) then system.exit;
// 第一個 TEdit
if (Sender As TEdit).Name = 'xEdit1' then begin
Label1.Caption := '1' ;
end;
end;
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ponyqq31
一般會員 發表:1 回覆:4 積分:1 註冊:2003-02-10 發送簡訊給我 |
你好~~你剛剛提供給的這段程式沒有問題,但是在這程式裡只能使用傳進去本身元件的東西,比如這裡所傳進去 SENDER 為 TEdit ,所以只能對 TEdit 做修改,如果我想修改別的動態產生的元件,如我上面提到的另一個動態產生的Label,做屬性修改,我要如何做程式修改 procedure TEventOBJ.doMyChang(Sender:TObject);
begin
if not (Sender Is TEdit) then system.exit;
// 第一個 TEdit
if (Sender As TEdit).Name = 'xEdit1' then begin
.....
end; // 第二個 TEdit
if (Sender As TEdit).Name = 'xEdit2' then begin
.....
end;
end
|
liorex
初階會員 發表:19 回覆:60 積分:32 註冊:2002-08-20 發送簡訊給我 |
一樣的方式做點變通
procedure TEventOBJ.doMyChang(Sender:TObject); begin if sender is TEdit then if (Sender As TEdit).Name = 'xEdit1' then ...... if sender is TButton then if Tbutton(sender).name = 'btnXX' then ...Do some thing... end---------------------- 一切有為法 如夢幻泡影 如露亦如電 應做如是觀 ---------------------- |
ponyqq31
一般會員 發表:1 回覆:4 積分:1 註冊:2003-02-10 發送簡訊給我 |
變通是沒錯~~~但是我一次只能對一個動態的元件做事件促發, 喀我如果要在 EDIT 的動態元件做促發事件裡要對另一個動態的Label做屬性修改, 我要如何撰寫??? procedure TEventOBJ.doMyClick(Sender:TObject);
begin
if not (Sender Is TEdit) then system.exit;
// 第一個 TEdit
if (Sender As TEdit).Name = 'xEdit1' then begin
Label1.Caption := '1' ;
end;
end;
|
liorex
初階會員 發表:19 回覆:60 積分:32 註冊:2002-08-20 發送簡訊給我 |
哪你應該要有一個確認的東西就是你要變動的元件的name
假如可以知道那個元件的class就好啦
就用 FindComponent 寄上範例囉
FindComponent example The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box. procedure TForm1.Button1Click(Sender: TObject); var i: Integer; const NamePrefix = 'MyEdit'; begin for i := 1 to 20 do begin TEdit.Create(Self).Name := NamePrefix IntToStr(i); with TEdit(FindComponent(NamePrefix IntToStr(i))) do begin Left := 10; Top := i * 20; Parent := self; end; end; end;---------------------- 一切有為法 如夢幻泡影 如露亦如電 應做如是觀 ---------------------- |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
當使用者做了 A 的動作,則系統該發生什麼反應,這你應該是最清楚的呀< >多想比多問好,想出來是自己的,問到的祇是別人的< > 1. 既然有規則,那你就想辦法將規則與你的物件結合。
2. 或許對應的物件其名稱都以同樣的名稱加上序號則你可以如下應用。
edit.name := 'edt' IntToStr (i);
lab.name := 'lab' IntToStr (i); i := Copy ((Sender As TEdit).Name, 4, length ((Sender As TEdit).Name));
lab := FindComponent ('lab' IntToStr (i)); 如同吃飯一般,有了答案要好好琢磨,慢慢消化。如此你提的問題才會引起大家的興趣 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |