Макро-процедуры
Каким образом мне можно использовать переменную типа 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 [000691]