Идёт загрузка страницы...

htp://aptem.net.ru





Вызов процедуры, имя которой содержится в переменной 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 then
MyProc(ProcDict.objects[index])(arg);
// Можно вставить обработку исключительной ситуации - сообщение об ошибке
end;

initialization
ProcDict := TStringList.Create;
ProcDict.Sorted := true;

finalization
ProcDict.Free;

end.

[000307]