Вызов процедуры, имя которой содержится в переменной

Previous  Top  Next

    
 

 

 

Как я могу вызвать процедуру, чье имя хранится в таблице, списке, и т.п.? Другими словами, я хочу сохранить имя процедуры в переменной и для ее вызова обращаться к значению этой переменной. Какие предложения?

 

Code:

unit ProcDict;

 

interface

 

type MyProc = procedure(s: string);

 

procedure RegisterProc(procName: string; proc: MyProc);

procedure ExecuteProc(procName: string; arg: string);

 

implementation

 

uses Classes;

var ProcDict: TStringList;

 

procedure RegisterProc(procName: string; proc: MyProc);

begin

ProcDict.AddObject(procName, TObject(@proc));

end;

 

procedure ExecuteProc(procName: string; arg: string);

var

index: Integer;

begin

index := ProcDict.IndexOf(ProcName);

if index >= 0 then

   MyProc(ProcDict.objects[index])(arg);

// Можно вставить обработку исключительной ситуации - сообщение об ошибке

end;

 

initialization

ProcDict := TStringList.Create;

ProcDict.Sorted := true;

finalization

ProcDict.Free;

end.

 

 

 

вы могли бы создать StringList как показано ниже:

 

Code:

StringList.Create; StringList.AddObject('Proc1',@Proc1);

StringList.AddObject('Proc2',@Proc2);

 

 

и затем реализовать это в вашей программе:

 

Code:

var

myFunc: procedure;

begin

if Stringlist.indexof(S) = -1 then

   MessageDlg('Не понял процедуру ' + S, mtError, [mbOk], 0)

else

   begin

     @myFunc := Stringlist.Objects[Stringlist.indexof(S)];

     myFunc;

   end;

 

 

 

RAM

©Drkb::00113

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba