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

如何使用共同的click

尚未結案
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-29 10:19:17 IP:211.22.xxx.xxx 未訂閱
各位前輩好,我想要作一個幾種不同的物件使用共同的click事件,程式如下 procedure TForm1.Bclick(Sender: TObject); begin if sender is tbutton then begin showmessage('sender is button');// end; if sender is tlabel then begin showmessage('sender is tlabel');// end; end; 因為可能是好多個不同元件組成,如果每一個sender都要判斷元件類型會較麻煩,我想把bclick簡化 但都不能run,程式如下 procedure TForm1.Bclick(Sender: TObject); var s:tpersistentclass; begin s:=tbutton; s(sender).caption:='tbutton'; 想請教前輩指點 謝謝 sam
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-29 10:40:34 IP:210.65.xxx.xxx 未訂閱
Hi:
procedure TForm1.Button3Click(Sender: TObject);
begin
    IF Sender.ClassNameIs('TButton') THEN
        (Sender AS TButton).Caption := Sender.ClassName
    ELSE IF Sender.ClassNameIs('TLabel') THEN
        (Sender AS TLabel).Caption := Sender.ClassName
    ELSE IF Sender.ClassNameIs('TEdit') THEN
        (Sender AS TEdit).Text := Sender.ClassName;
    ShowMessage('Sender is '   Sender.ClassName);
end;
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-29 10:44:48 IP:61.222.xxx.xxx 未訂閱
check this http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28622
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-29 18:13:43 IP:211.22.xxx.xxx 未訂閱
試了前輩的做法很好用,可是如果一開始不知道觸發事件的物件是何種元件就無法用,例如我又動態產生一個maskedit物件,我需要在程式碼加上 ELSE IF Sender.ClassNameIs('Tmaskedit') THEN (Sender AS Tmaskedit).Text := Sender.ClassName; 才能run; 書上有說到可用Tbutton(sender).caption:='myobject'; 如果將Tbutton設為s s:=tbutton; s(sender).caption:='myobject'; 只要改變s就可做出許多不同的變化 不知是否可行 請前輩幫忙 謝謝 sam
ccchen
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-30 08:59:48 IP:218.163.xxx.xxx 未訂閱
不同的元件有不同的property, 因此須看你在此共用之procedure須用到什麼. 例如只用到Caption和ClassName 由onlinehelp你可以看到, Caption在TControl定義, classname則在TObject定義, 故如FishMan所寫之Sample可簡單寫成
if Sender is TControl then  //只要是TControl就有Caption property
  TControl(Sender).Caption:=Sender.className;
NOTE: 將Sender轉型成TControl即可存取其 Caption之property 如果更廣泛的使用, 可uses Typinfo後用GetPropValue等function來達到 同上例, 可改為
if GetPropInfo(Sender, 'Caption') <> nil then//表示Sender有Caption這個property
  SetStrProp(Sender,'Caption',Sender.classname);
充分利用typinfo.pas中這些function, 可使你的程式彈性大很多 [NOTE]Tbutton(sender).caption:='myobject'; 如此比較字串, 千萬小心大小寫問題, 最好用CompareText
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-31 07:56:42 IP:211.22.xxx.xxx 未訂閱
很好用,又多學了一些, 謝謝ccchen版主及幾位前輩 謝謝 sam
系統時間:2024-05-20 21:14:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!