unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Hello_World(Sender: TObject);
private
procedure ExecuteRoutine(Instance: TObject;
Name:
string);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
unit2;
type
TExecute =
procedure of object;
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteRoutine(Form1, '
Hello_World');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ExecuteRoutine(Form2, '
Hello_World');
end;
procedure TForm1.ExecuteRoutine(Instance: TObject;
Name:
string);
var
Routine: TMethod;
Execute: TExecute;
begin
Routine.Data := Pointer(Instance);
// Returns the address of a published method.
Routine.Code := Instance.MethodAddress(
Name);
if Routine.Code =
nil then Exit;
Execute := TExecute(Routine);
Execute;
end;
procedure TForm1.Hello_World(Sender: TObject);
begin
ShowMessage('
Form1.Hello_World');
end;
end.