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

請問如何傳遞物件?

 
maker
一般會員


發表:3
回覆:6
積分:1
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-05 00:23:43 IP:61.230.xxx.xxx 未訂閱
各位大大,請問如何傳遞不同的物件到同一個函數? 例如: procedure SetListItem(var ABox: TObject,ASQL: String); begin ....... adset.active:=false; adset.commandtext:=ASQL; if not adset.eof then while not adset.eof do begin if ABox is TComboBox then (ABox as TComboBox).Items.Add(adset.fields[1].asstring); if ABox is TListBox then (ABox as TListBox).Items.Add(adset.fields[1].asstring); ....... adset.next; end; ...... end; 然後從其他地方call這個procedure setlistitem(combo1,'select * from emp'); setlistitem(list1,'select * from dept'); combo1是TComboBox物件, list1是TListBox物件 我顯示的錯誤訊息是 type of actual and formal var parameters must be identical
------
~~~~沁涼如水 清韻隨吟~~~~
Skyer
高階會員


發表:43
回覆:111
積分:120
註冊:2002-04-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-05 02:38:12 IP:211.23.xxx.xxx 未訂閱
各位大大,請問如何傳遞不同的物件到同一個函數?     [Deleted] 然後從其他地方call這個procedure setlistitem(combo1,'select * from emp'); 試試看改成這樣 setlistitem(TObject(combo1), 'select * from emp'); 下面也是這樣改 setlistitem(list1,'select * from dept');
------
--
Regards,
Skyer
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-05 10:49:31 IP:210.200.xxx.xxx 未訂閱
引言: 各位大大,請問如何傳遞不同的物件到同一個函數? 例如: procedure SetListItem(var ABox: TObject,ASQL: String); begin ....... end; 然後從其他地方call這個procedure setlistitem(combo1,'select * from emp'); setlistitem(list1,'select * from dept'); combo1是TComboBox物件, list1是TListBox物件 我顯示的錯誤訊息是 type of actual and formal var parameters must be identical
我想您的問題應該是 procedure SetListItem(ABox: TObject; ASQL: String); Object 本身就是 call by reference, 就是指標操作了, 不用加 var; 不同參數型態應該是用 ";" 分別不是用 "," compile 不過才對
------
將問題盡快結案也是一種禮貌!
maker
一般會員


發表:3
回覆:6
積分:1
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-05 12:31:34 IP:61.59.xxx.xxx 未訂閱
引言: 我想您的問題應該是 procedure SetListItem(ABox: TObject; ASQL: String); Object 本身就是 call by reference, 就是指標操作了, 不用加 var; 不同參數型態應該是用 ";" 分別不是用 "," compile 不過才對
","是我post時key錯的,在delphi中我是用";"的,謝謝您
------
~~~~沁涼如水 清韻隨吟~~~~
maker
一般會員


發表:3
回覆:6
積分:1
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-05 12:42:02 IP:61.59.xxx.xxx 未訂閱
引言: 各位大大,請問如何傳遞不同的物件到同一個函數? [Deleted] 然後從其他地方call這個procedure setlistitem(combo1,'select * from emp'); 試試看改成這樣 setlistitem(TObject(combo1), 'select * from emp'); 下面也是這樣改 setlistitem(list1,'select * from dept');
謝謝您,若使用delphi的物件類別可以pass了,另外請教您一個問題,若是要傳入自訂的class呢?例如 type myclass=record abc: string; def: string; end; 我宣告了變數A,B皆為myclass的動態陣列 a: array of myclass; b: array of myclass; 在程式中call他 setlistitem(myclass(a),'select * from emp'); procedure setlistitem(aa: myclass;asql: string); var i: integer; begin setlength(aa,adset.recordsetcount); i:=0; while not adset.eof do begin aa[i].abc:=adset.fields[0].asstring; ..... adset.next; end; .... end; 並無法使用類似TObject(combo1)...之類的 我用setlistitem(a,sqlstring)以及setlistitem(myclass(a),sqlstring) 都有錯誤發生,請問大大如何解決傳入自己設定的動態陣列類別?
------
~~~~沁涼如水 清韻隨吟~~~~
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-05 13:12:36 IP:210.200.xxx.xxx 未訂閱
引言: 謝謝您,若使用delphi的物件類別可以pass了,另外請教您一個問題,若是要傳入自訂的class呢?例如 type myclass=record abc: string; def: string; end; 我宣告了變數A,B皆為myclass的動態陣列 a: array of myclass; b: array of myclass; 在程式中call他 setlistitem(myclass(a),'select * from emp'); procedure setlistitem(aa: myclass;asql: string); var i: integer; begin setlength(aa,adset.recordsetcount); i:=0; while not adset.eof do begin aa[i].abc:=adset.fields[0].asstring; ..... adset.next; end; .... end; 並無法使用類似TObject(combo1)...之類的 我用setlistitem(a,sqlstring)以及setlistitem(myclass(a),sqlstring) 都有錯誤發生,請問大大如何解決傳入自己設定的動態陣列類別?
您這要宣告一個類別的類別就可以用了. TaryMyClass: array of myclass; 使用方法: procedure setlistitem(aa: TaryMyClass; asql: string); 如果是要讓其他 unit 也能用, 最好宣告在一個共用的 unit 中; 要用的 unit 再引用它.
------
將問題盡快結案也是一種禮貌!
maker
一般會員


發表:3
回覆:6
積分:1
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-06 13:18:10 IP:61.59.xxx.xxx 未訂閱
謝謝danny,可以了 ^^
------
~~~~沁涼如水 清韻隨吟~~~~
系統時間:2024-04-17 2:12:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!