Delphi - база знаний

       

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


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



Взято из 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(nameString; 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




Содержание раздела