Delphi - база знаний


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


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




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

unitProcDict;

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 как показано ниже:

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

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

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

Взято из

Советов по Delphi от


Сборник Kuliba






Начало  Назад  Вперед



Книжный магазин