TStringAlignGrid當回傳值 |
答題得分者是:carstyc
|
mnsf
初階會員 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
假設畫面上有一個TStringAlignGrid叫做StringAlignGrid1
想透過一個function去改變畫面上StringAlignGrid1的cell begin StringAlignGrid1:=test; //但畫面上的StringAlignGrid1.cells[2,2]並沒有變成'test' //問題:請問要如果回傳值為TStringAlignGrid,應該要如何做呢? end; function test: TStringAlignGrid; var tmp:TStringAlignGrid; begin tmp:=TStringAlignGrid.Create(application); tmp.Cells[2,2]:='test'; result:=tmp; end; |
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
您好,您寫的文字好像不太容易看得懂....
看你的程式碼,好像是實際生成一個 TStringAlignGrid 的 Instance 。然後這個實際的Instance 指到 test 去。 但你又把 Test 指到 Form 上面的 StringAlignGrid1。 有點不知道你再幹啥? 但如果你想 test 的回傳直是 StringAlignGrid1,應該如底下的code就可以了,但我實在搞不懂,這樣有啥意義? 能不能說明一下你的想法... [code cpp] function test: TStringAlignGrid; begin StringAlignGrid1.Cells[2,2]:='test'; result:=StringAlignGrid1; end; [/code] ===================引 用 mnsf 文 章=================== 假設畫面上有一個TStringAlignGrid叫做StringAlignGrid1 想透過一個function去改變畫面上StringAlignGrid1的cell begin StringAlignGrid1:=test; //但畫面上的StringAlignGrid1.cells[2,2]並沒有變成'test' //問題:請問要如果回傳值為TStringAlignGrid,應該要如何做呢? end; function test: TStringAlignGrid; var tmp:TStringAlignGrid; begin tmp:=TStringAlignGrid.Create(application); tmp.Cells[2,2]:='test'; result:=tmp; end; |
mnsf
初階會員 發表:104 回覆:90 積分:48 註冊:2003-11-25 發送簡訊給我 |
不好意思,我沒有把問題表達清楚
我想寫一個function,它的回傳值是TStringAlignGrid 而這一個function處理的內容是去讀取一個資料庫table 然後做一些很複雜的運算,運算後的結果會放在TStringAlignGrid上 然後有很多支程式都必須要去做相同的事,所以才會想要寫一個function 假設A畫面上有一個TStringAlignGrid叫做StringAlignGrid1 begin StringAlignGrid1.cells[1,0]:='A'; StringAlignGrid1.cells[2,0]:='B'; StringAlignGrid1.cells[3,0]:='C=A B'; StringAlignGrid1:=test;//希望透過呼叫function test以後,A畫面上的StringAlignGrid1內容會根function test中的tmp一模一樣 end; 假設B畫面上有一個TStringAlignGrid叫做StringAlignGrid1 begin StringAlignGrid1.cells[1,0]:='A'; StringAlignGrid1.cells[2,0]:='B'; StringAlignGrid1.cells[3,0]:='C=A B'; StringAlignGrid1:=test;//希望透過呼叫function test以後,A畫面上的StringAlignGrid1內容會根function test中的tmp一模一樣 end; function test: TStringAlignGrid; var tmp:TStringAlignGrid; Qry1:TQuery; i:integer; begin Qry1:=TQuery.Create(application); Qry1.DatabaseName:='XXX'; tmp:=TStringAlignGrid.Create(application); Qry1.close; Qry1.sql.clear; Qry1.sql.add('select a,b from table1 '); Qry1.open; i:=1; while not Qry1.eof do begin tmp.Cells[1,i]:=Qry1.fieldbyname('a').asstring; tmp.Cells[2,i]:=Qry1.fieldbyname('b').asstring; tmp.Cells[3,i]:=strtoint(tmp.Cells[1,i]) strtoint(tmp.Cells[2,i]);//假設這一行是那個很複雜的運算 i:=i 1; Qry1.next; end; tmp.Rowcount:=i; result:=tmp;// Qry1.Close; FreeAndNil(Qry1); end; |
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
了解,原來是有不同 Form 上面都有 TStringAlignGrid ,但你這樣應該是不可行的。
你不能直接用一個 function 的Instance 傳回值 ,就去把Form 上面的 Instance 更改掉。 你應該要把 Form 上面的 Instance 傳進去 function 內,讓它直接用這個 Instance 運算,算完的結果,就會直接呈現在 Form 上面了。 [code cpp] procedure test(tmp:TStringAlignGrid); var Qry1:TQuery; i:integer; begin Qry1:=TQuery.Create(application); Qry1.DatabaseName:='XXX'; Qry1.close; Qry1.sql.clear; Qry1.sql.add('select a,b from table1 '); Qry1.open; i:=1; while not Qry1.eof do begin tmp.Cells[1,i]:=Qry1.fieldbyname('a').asstring; tmp.Cells[2,i]:=Qry1.fieldbyname('b').asstring; tmp.Cells[3,i]:=strtoint(tmp.Cells[1,i]) strtoint(tmp.Cells[2,i]);//假設這一行是那個很複雜的運算 i:=i 1; Qry1.next; end; tmp.Rowcount:=i; Qry1.Close; FreeAndNil(Qry1); end; [/code] ===================引 用 mnsf 文 章=================== 不好意思,我沒有把問題表達清楚 我想寫一個function,它的回傳值是TStringAlignGrid 而這一個function處理的內容是去讀取一個資料庫table 然後做一些很複雜的運算,運算後的結果會放在TStringAlignGrid上 然後有很多支程式都必須要去做相同的事,所以才會想要寫一個function 假設A畫面上有一個TStringAlignGrid叫做StringAlignGrid1 begin StringAlignGrid1.cells[1,0]:='A'; StringAlignGrid1.cells[2,0]:='B'; StringAlignGrid1.cells[3,0]:='C=A B'; StringAlignGrid1:=test;//希望透過呼叫function test以後,A畫面上的StringAlignGrid1內容會根function test中的tmp一模一樣 end; 假設B畫面上有一個TStringAlignGrid叫做StringAlignGrid1 begin StringAlignGrid1.cells[1,0]:='A'; StringAlignGrid1.cells[2,0]:='B'; StringAlignGrid1.cells[3,0]:='C=A B'; StringAlignGrid1:=test;//希望透過呼叫function test以後,A畫面上的StringAlignGrid1內容會根function test中的tmp一模一樣 end; function test: TStringAlignGrid; var tmp:TStringAlignGrid; Qry1:TQuery; i:integer; begin Qry1:=TQuery.Create(application); Qry1.DatabaseName:='XXX'; tmp:=TStringAlignGrid.Create(application); Qry1.close; Qry1.sql.clear; Qry1.sql.add('select a,b from table1 '); Qry1.open; i:=1; while not Qry1.eof do begin tmp.Cells[1,i]:=Qry1.fieldbyname('a').asstring; tmp.Cells[2,i]:=Qry1.fieldbyname('b').asstring; tmp.Cells[3,i]:=strtoint(tmp.Cells[1,i]) strtoint(tmp.Cells[2,i]);//假設這一行是那個很複雜的運算 i:=i 1; Qry1.next; end; tmp.Rowcount:=i; result:=tmp;// Qry1.Close; FreeAndNil(Qry1); end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |