| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;
TIntMethod = procedure(Data: Integer) of object;
TProcObject = class(TObject) public procedure ExecProc(Index: Integer; Data: Integer); published procedure P1(Data: Integer); procedure P2(Data: Integer); procedure P3(Data: Integer); end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Proc: TProcObject; k: Integer; begin Proc := TProcObject.Create; for k := 1 to 4 do Proc.ExecProc(k, $FFFF); Proc.Free; end;
{ TProcObject }
procedure TProcObject.ExecProc(Index, Data: Integer); var Method: TMethod; MethodName: string; begin MethodName := Format('P%d', [Index]); Method.Code := MethodAddress(MethodName); if Method.Code = nil then raise Exception.Create(Format('Method %s is not defined in class %s', [MethodName, ClassName])); Method.Data := Self; TIntMethod(Method)(Data); end;
procedure TProcObject.P1(Data: Integer); begin ShowMessage('1'); end;
procedure TProcObject.P2(Data: Integer); begin ShowMessage('2'); end;
procedure TProcObject.P3(Data: Integer); begin ShowMessage('3'); end;
end.
|
|