1. Return a record
Type
TmyData = Record 先定义一个Record有三个返回值
Data1: string;
Data2: string;
Data3: string;
end;
private
{ Private declarations }
function Myfunction(parm: string): TMydata; //定义一个function, parm 参数自定
//定义 function的代码
function Tform1.Myfunction(parm: string): TMydata;
var MyData1: TMydata;
begin
MyData1.Data1:= 'This is Data1:'+parm;
MyData1.Data2:= 'This is Data2:'+parm+parm;
MyData1.Data3:= 'This is Data3:'+parm+parm+parm;
result:= MyData1; //传回为一个记录record
end;
//函数传值实例
procedure TForm1.Button1Click(Sender: TObject);
var
MyreturnData: TmyData; // 定义一个要接收的record
Begin
MyreturnData:= Form1.Myfunction('A'); // 指定回传值
//显示出三個值
showmessage(MyreturnData.Data1);
showmessage(MyreturnData.Data2);
showmessage(MyreturnData.Data3);
end;
2. Return an array (or variant array)
//function 传回动态数组范例:
Type
k=array of integer;
function abc(i:integer):k;
var
j:integer;
begin
SetLength (result,5);
for j:=0 to i do
result[j]:=j;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.Caption := inttostr(abc(5)[5]);
end;
3. Using var/out parameters, e.g.
例如将日期分拆为年月日的系统函數 DecodeDate 是这样定义的 :
procedure DecodeDate(const DateTime: TDateTime; var Year, Month, Day: Word);
你可看到 Year, Month, Day 之前有个 var 字,就是在这个 procedure 內修改到这三个变量会直接反映在调用这个函数所输入的变量里。
应用实例 :
procedure TForm1.Button1Click(Sender: TObject);
var
zDay, zMonth, zYear : word;
begin
DecodeDate(Now,zYear,zMonth,zDay); //已将 Now 的年月日分拆并存到变量
ShowMessage(Format('现在是%d年%d月%d日',[zYear,zMonth,zDay]));
end;