1、在delphi里如何实现给函数/过程传递任意多参数问题
例如:
type
TMyRec = record
id: integer;
value: real;
end;
如何定义一个函数实现从任意多个TMyRec记录里得到最大记录ID,VALUE
var
r1,r2,r3,r4,r5,MaxRec: TMyRec;
begin
...
MaxRec := GetMaxRec(r1,r2,r3);
MaxRec := GetMaxRec(r1,r2,r3,r4);
MaxRec := GetMaxRec(GetMaxRec(r1,r2,r3,r4),r5);
...
end;2、如何给函数/过程传递类型参数,控件名,动态生成控件
例如: ...
GenNewCtrl(self, TButton, button1);
GenNewCtrl(self, TButton, button1,button2);
GenNewCtrl(self, TEdit, Edit1,Edit2);
...3、类型名与字符串名有和实质区别
例如有一BUTTON名字为button1,我们可以使用button1.click完成其单击功能,而如果传递给函数或过程一字符串名"button1",我们只有遍历窗体才能查找到该控件然后访问。却不能直接使用传递的参数,例如:
ExeClick(Button1);
或者
ExeClick('Button1');
这样的函数或过程定义如何实现?
例如:
type
TMyRec = record
id: integer;
value: real;
end;
如何定义一个函数实现从任意多个TMyRec记录里得到最大记录ID,VALUE
var
r1,r2,r3,r4,r5,MaxRec: TMyRec;
begin
...
MaxRec := GetMaxRec(r1,r2,r3);
MaxRec := GetMaxRec(r1,r2,r3,r4);
MaxRec := GetMaxRec(GetMaxRec(r1,r2,r3,r4),r5);
...
end;2、如何给函数/过程传递类型参数,控件名,动态生成控件
例如: ...
GenNewCtrl(self, TButton, button1);
GenNewCtrl(self, TButton, button1,button2);
GenNewCtrl(self, TEdit, Edit1,Edit2);
...3、类型名与字符串名有和实质区别
例如有一BUTTON名字为button1,我们可以使用button1.click完成其单击功能,而如果传递给函数或过程一字符串名"button1",我们只有遍历窗体才能查找到该控件然后访问。却不能直接使用传递的参数,例如:
ExeClick(Button1);
或者
ExeClick('Button1');
这样的函数或过程定义如何实现?
解决方案 »
- 急求答案 LoadFromStream(const Stream: IUnknown); 如何调用?
- 控件的创建和排列
- 我用quickreport时候为什么我在编译的时候总是说“file not found :'QRPDFFilt.dcu' 啊?
- 有关数据库别名的问题
- 难道就没有一个人可以解决?高手都到哪里去了?是高手的有本事就站出来!!
- 能在程序中操纵数据库吗
- 【求助】显示窗口标题和类名的最好方法
- 关于访问服务器文件的问题
- 怎样知道自己的程序被CTRL+ALT+DEL结束,并在此之前调用函数
- 可怜的加班人的问题
- 为什么我的ActiveForm里使用Designer.Modified运行时报错?救命!!!!!!!!!
- 兄弟們 請給我一個簡單得DLL編寫方法和實例
1,function GetMaxRec(Recs: array of TMyRec): TMyRec;
调用时要这么写:
MaxRec := GetMaxRec(r1,r2,r3,r4);2,procedure GenNewCtrl(Owner: TCompontent; CtlType: TCompontentClass;
var Ctls: array of TCompontent);
GenNewCtrl(self, TButton, [button1]);3, 可以通过窗口的FindComponent来作最后你提到的参数类型不一致的话,一个是可以用Variant类型,另一种是这样:
使用array of Const
function MakeStr(const Args: array of const): string;
begin
for I := 0 to High(Args) do
with Args[I] do
case VType of
vtInteger: Result := Result + IntToStr(VInteger);
vtVariant: Result := Result + string(VVariant^);
vtInt64: Result := Result + IntToStr(VInt64^);
...
end;
end;
end;
帮助里有解释和例子,不过这样是不能通过参数返回值的。
MaxRec := GetMaxRec([r1,r2,r3,r4]);
procedure GenNewCtrl(Owner: TCompontent; CtlType: TCompontentClass;
Ctls: array of Pointer);
GenNewCtrl(self, TButton, [@button1]);