全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2596
推到 Plurk!
推到 Facebook!

請問我要如何使用動態元件的事件?

答題得分者是:ha0009
ponyqq31
一般會員


發表:1
回覆:4
積分:1
註冊:2003-02-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-17 10:48:15 IP:203.67.xxx.xxx 未訂閱
以下是我寫的一段程式,但是我如果想在 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-17 10:55:11 IP:61.30.xxx.xxx 未訂閱
你好: Sender 代表事件的擁有者,你可以使用下列方式判別。
procedure TEventOBJ.doMyChang(Sender:TObject);
begin
   if Sender = Edit1 then begin
      .....
   end;
end
ponyqq31
一般會員


發表:1
回覆:4
積分:1
註冊:2003-02-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-17 11:28:31 IP:203.67.xxx.xxx 未訂閱
對不起,但是我的事件為下列 //建立動態元件的事件 TEventOBJ=Object procedure doMyClick(Sender:TObject); procedure doMyChang(Sender:TObject); end; //建立動態元件的事件 所以 裡面沒有USER到EDIT,所以我不知道如何使用? 謝謝
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-17 11:36:33 IP:61.30.xxx.xxx 未訂閱
你好:
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-17 11:56:57 IP:203.67.xxx.xxx 未訂閱
謝謝~~~已經可以使用 但是還有一個問題請教 我如果要在事件種改變別的元件屬性,如下,我試否要傳入元件給事件還是........? 謝謝 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-17 12:35:04 IP:61.30.xxx.xxx 未訂閱
你好: 無法理解你所想要的,請詳述 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
ponyqq31
一般會員


發表:1
回覆:4
積分:1
註冊:2003-02-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-17 13:21:17 IP:203.67.xxx.xxx 未訂閱
你好~~你剛剛提供給的這段程式沒有問題,但是在這程式裡只能使用傳進去本身元件的東西,比如這裡所傳進去 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-17 14:02:54 IP:61.222.xxx.xxx 未訂閱
一樣的方式做點變通  
 
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-17 14:10:05 IP:203.67.xxx.xxx 未訂閱
變通是沒錯~~~但是我一次只能對一個動態的元件做事件促發, 喀我如果要在 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-17 14:28:06 IP:61.222.xxx.xxx 未訂閱
哪你應該要有一個確認的東西就是你要變動的元件的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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-17 19:50:21 IP:61.30.xxx.xxx 未訂閱
你好: 當使用者做了 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">
系統時間:2024-05-18 17:57:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!