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

TStringAlignGrid當回傳值

答題得分者是:carstyc
mnsf
初階會員


發表:104
回覆:90
積分:48
註冊:2003-11-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-06-10 09:57:30 IP:220.128.xxx.xxx 訂閱
假設畫面上有一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-06-10 10:24:43 IP:203.79.xxx.xxx 訂閱
您好,您寫的文字好像不太容易看得懂....


看你的程式碼,好像是實際生成一個 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-06-10 10:37:21 IP:220.128.xxx.xxx 訂閱
不好意思,我沒有把問題表達清楚
我想寫一個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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-06-10 10:46:52 IP:203.79.xxx.xxx 訂閱
了解,原來是有不同 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;
系統時間:2024-07-08 0:18:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!