Советы по Delphi

         

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


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

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 thenMyProc(ProcDict.objects[index])(arg);// Можно вставить обработку исключительной ситуации - сообщение об ошибке
end;

initialization
ProcDict := TStringList.Create;ProcDict.Sorted := true;
finalization
ProcDict.Free;
end.

[000307]


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

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



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

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

var
myFunc : procedure;begin
if
Stringlist.indexof(S) = -1 thenMessageDlg('Не понял процедуру '+S,mtError,[mbOk],0)elsebegin@myFunc := Stringlist.Objects[Stringlist.indexof(S)];myFunc;end;

RAM [000697]



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