Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как использовать переменную для имени процедуры?

01.01.2007

Взято из FAQ: https://blackman.km.ru/myfaq/cont4.phtml

Каким образом можно использовать переменную типа 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 https://forum.vingrad.ru