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

程序或函數中如何傳遞TObject

答題得分者是:ccchen
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-21 19:19:26 IP:61.218.xxx.xxx 未訂閱
一般事件如OnPaint等都有 Sender:TObject, 請問 如何在函數中傳遞物件,謝謝. 如 function test(var ok:TObject):Boolean; begin end; 如何使用呢? test(button1);....????
ccchen
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-21 20:03:27 IP:203.217.xxx.xxx 未訂閱
function test(var ok:TObject):Boolean; 不需要用var了, Delphi之object都是call by reference, 不用var, 在函數中更改其值會反應至呼叫者
function test(ok:TObject):Boolean;
begin
  if ok is TButton then
    showmessage(TButton(ok).name);
end;    使用時
test(button1);
test(Lable1);
由於function test之參數宣告為TObject, 因此所有物件均能傳入, 但也由於ok是TObject, 只可以直接存取Tobject之property, 例如name就不是TObjcet之property, 故你需要轉型, 如上,轉型成TButton後就可access TButton之所有property. 如果你的函數不需要接受所有類別, 永遠只接受TButton, 你可以改成
function test(ok:TButton):Boolean;
begin
  showmessage(TButton(ok).name);
end;
此時就不須轉型了 再舉個例 function (xx:TCustomedit):Boolean; 此時, 此函數可接受TEdit,TDBEdit,TMemo,TRichEdit,TDBMemo...,連DBGrid中之InplaceEditor也可以,因為他們均繼承至TCustomEdit. 所有TCustomEdit之propery在此函數中均可用. 因此了解元件樹是很重要的 發表人 - ccchen 於 2002/12/21 20:04:12
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

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