請問如何傳遞物件? |
|
maker
一般會員 發表:3 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
各位大大,請問如何傳遞不同的物件到同一個函數?
例如:
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 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 各位大大,請問如何傳遞不同的物件到同一個函數? 例如: 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 發送簡訊給我 |
|
maker
一般會員 發表:3 回覆:6 積分:1 註冊:2002-04-15 發送簡訊給我 |
引言: 各位大大,請問如何傳遞不同的物件到同一個函數? [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 發送簡訊給我 |
引言: 謝謝您,若使用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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |