Советы по Delphi


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


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

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

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

    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]



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