Каким образом мне можно использовать переменную типа 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; |
Peter Below |