请教高手:如何自定义函数,使它能够返回多个值?(100分)

  • 主题发起人 主题发起人 iwalk
  • 开始时间 开始时间
返回一个记录类型不就可以了么
 
在下愚笨,请明示。
 
用返还参数,如:
function myfunction(Param1:Byte;param2:String;Var value1:String;Var value2:Byte):Boolean;
除了返回一个Boolean值外,还可以返回value1和value2值。
不过在调用该函数处,还得声明一下:
Var
value1:String;
value2:Byte;
 
type
TResult = record
r1 : integer;
r2 : string;
r3 : TDatetime;
end;

function test : TResult;
begin
with result do
begin
r1 := 1;
r2 := 'hello, world!';
r3 := StrToDate('2002-02-02');
end;
end;
 
Jar的方法既简单又明了!
到注意在定义函数时,一定不要忘了需要返回的参数前面一定要带var
function myfunction(Param1:Byte;param2:String;[red]Var[/red] value1:String;[red]Var[/red] value2:Byte):Boolean;
 
返加variant類型就可以了。
給你一個例子(返回len1個大于等于min1,小于等于max1的隨機數組):
function result1(len1,min1,max1:integer):variant;
var i,j:integer;
list1:tstringlist;
str1:string;
begin
list1:=tstringlist.Create;
result:=VarArrayCreate([0,len1-1],varvariant);
randomize;
for i:=0 to len1-1 do
begin
j:=random(max1-min1)+min1;
while list1.IndexOf(inttostr(j))<>-1 do
j:=random(max1-min1)+min1;
list1.Add(inttostr(j))

end;
for i:=0 to list1.Count-2 do
for j:=i+1 to list1.Count-1 do
begin
if strtoint(list1)>strtoint(list1[j]) then
begin
str1:=list1;
list1:=list1[j];
list1[j]:=str1;
end;
end;
for i:=0 to list1.Count-1 do
result:=list1;
list1.Free;
end;
 
可以将返回类型置成TStrings类型
再处理Tstrings类型的变量,从中取值...
 
返回一个TStringList更好,爱返回多少就返回多少。
 
你把返回值定义成一个数组。。
 
9494。
楼主给分!
 
我一直用Jar的方法
 
jar能不能举个例子?
 
function myfunction(Param1:Byte;Var value1:String;Var value2:Byte):Boolean;
begin
if Param1=0 then
begin
Value1:=IntToStr(2*param1);
Value2:=3*Param1;
Result:=True;
end
else
begin
value1:=IntToStr(Param1)

value2:=2*Param1;
Result:=Flase;
end;
end;

procedure TGeRevealFrm.Button1Click(Sender: TObject);
var
Value1:String;
Value1:Byte;
begin
if myfunction(1,Value1,Value2)=True then
begin
Edit1.Text:=value1;
Edit2.Text:=IntToStr(Value2);
end;
if myfunction(0,Value1,Value2)=True then
begin
Edit3.Text:=value1;
Edit4.Text:=IntToStr(Value2);
end;
end;


 
好,这也是我以前困绕的问题。
 
按引用传递, 传递变量地址。 function FName(var varName,.....) 即可。
 
zxb200 说的最有道理。
因为你不但可以在一个VARIANT 数组中返回各种数据类型,
而且还可以定义这些返回值的名称,不是很好吗?
 
真的谢谢,那就放分吧楼主,我准备接点分给别人呢,刚提了一个问的
 
Jar所言即是!
 
后退
顶部