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

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

01.01.2007

Каким образом можно использовать переменную типа 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; 
Previous page:
Как сделать procedure / function с переменным числом параметров?
Top:
DRKB
Next page:
Работа с датами и временем