На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Компоненты / Макро-процедуры Сделать домашней страницей Добавить в избранное Написать писмо

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


Автор: Peter Below

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


Copyright ©   "DELPHI WORLD"   E-mail:   delphiworld@mail.ru  http://www.delphiworld.narod.ru
Источник получения информации: http://www.delphiworld.narod.ru
Hosted by uCoz