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

 

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);

ifindex >= 0then

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) = -1then

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

else

begin

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

myFunc;

end;

 

 

 

RAM

 

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

Сборник Kuliba

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить