Советы по Delphi

         

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


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

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

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

TypeTMacroProc = Procedure( param: Integer );

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


  • TypeTMacroName = String[32];TMacroLink = Recordname: TMacroName;proc: TMacroProc;End;TMacroList = Array [1..MaxMacroIndex] Of TMacroLink;
    ConstMacros: TMacroList=((name: 'Proc1'; proc: Proc1 ),(name: 'Proc2'; proc: Proc2 ),.....);

  • интерпретатор функций, типа:
  • Procedure CallMacro( name: String; param: Integer );Vari: Integer;BeginFor i := 1 To MaxMacroIndex DoIf CompareText( name, Macros[i].name ) = 0 Then BeginMacros[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]



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