Макро-процедуры
Автор: Peter Below
Каким образом мне можно использовать переменную типа String в качестве имени процедуры?
Если все процедуры, которые вы собираетесь вызывать имеют список с одними и теми же параметрами, (или все без параметров), то это не трудно. Для этого необходимо:
процедурный тип, соответствующий вашей процедуре, например:
Type
TMacroProc = Procedure( param: Integer );
|
массив, "подключающий" имена процедур к их адресам во время выполнения приложения:
Type
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;
|
|