Вы можете определить список параметров процедуры как "Foo : ARRAY of const" и
использовать почти ЛЮБОЙ тип параметра. Вот пример. Разместите на форме
компоненты Memo и Button и добавьте строку "procedure Display(X : array of
const);" в определения класса формы после комментария { Private Declarations }.
Создайте функцию типа этой:
|
|
procedure TForm1.Display(X: array of const);
var I: Integer;
begin
Memo1.Clear;
for I := 0 to High(X) do
with TVarRec(X[I]) do
WITH Memo1.Lines DO
case VType of
vtInteger : Add('Integer:'#9 +
IntToStr(VInteger));
vtBoolean : if VBoolean then Add('Boolean:'#9'True'
else Add('Boolean:'#9'False');
vtChar : Add('Char:'#9 + VChar);
vtExtended: Add('Float:'#9 +
FloatToStr(VExtended^));
vtString : Add('String:'#9 +
VString^);
vtPointer : Add('Pointer:'#9 +
Format('%p', [VPointer]));
vtPChar : Add('PChar:'#9 +
StrPas(VPChar));
vtObject : Add('Object:'#9 +
VObject.ClassName);
vtClass : Add('Class:'#9 +
VClass.ClassName);
end;
end; |
Теперь в обработчике события кнопки OnClick вызываем процедуру Display и
передаем ей "что попало". Числа, строки, PChar-ы, объекты! Например:
|
|
Display([42, 1.234, 'A', 'Васек
Трубачев', Form1, TButton]); |
Практичестки это программа с переменным числом параметров. Но самом деле
параметр один, но он является массивом, содержащим переменное количество
параметров различного типа. Потрясающе!
- Neil |