Как использовать переменную для имени процедуры?
Взято из FAQ:
Каким образом можно использовать переменную типа String в качестве имени процедуры?
Если все процедуры, которые вы собираетесь вызывать, имеют список с
одними и теми же параметрами (или все без параметров), то это не трудно.
Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например:
type
TMacroProc =
procedure(param: Integer);
//массив, сопоставляющий имена процедур их адресам во время выполнения приложения:
TMacroName =
string[32];
TMacroLink =
record
name: TMacroName;
proc: TMacroProc;
end;
TMacroList =
array [1..MaxMacroIndex]
of TMacroLink;
const
Macros: TMacroList = (
(
name: 'Proc1'; proc: Proc1),
(
name: 'Proc2'; proc: Proc2),
...
); //интерпретатор функций, типа:
procedure CallMacro(
name:
String; param: Integer);
var
i: Integer;
begin
for i := 1
to MaxMacroIndex
do
if CompareText(
name, Macros[i].
name) = 0
then
begin
Macros[i].proc(param);
break;
end;
end;
{Макропроцедуры необходимо объявить в секции Interface модуля или с ключевым словом Far, например: }
procedure Proc1(n: Integer);
far;
begin
...
end;
procedure Proc2(n: Integer);
far;
begin
...
end;
Взято с Vingrad.ru
Содержание Назад Вперед