Идёт загрузка страницы...

htp://aptem.net.ru





Delphi 1

Макро-процедуры

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

Если все процедуры, которые вы собираетесь вызывать имеют список с одними и теми же параметрами, (или все без параметров), то это не трудно. Для этого необходимо:

  1. процедурный тип, соответствующий вашей процедуре, например:


       
    Type
    TMacroProc = Procedure( param: Integer );

  2. массив, "подключающий" имена процедур к их адресам во время выполнения приложения:


       
    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 ),
    .....);

  3. интерпретатор функций, типа:


       
    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]