...call a routine by its name?

Author: Fernando Silva

Category: Misc

type
  
TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    // Your routines (that you'll run by name) must be here
    
procedure Hello_World(Sender: TObject);
  private
    procedure 
ExecuteRoutine(Instance: TObject; Name: string);
  end;

var
  
Form1: TForm1;

type
  
TExecute = procedure of object;

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.Button1Click(Sender: TObject);
begin
  
ExecuteRoutine(Form1, 'Hello_World');
end;

procedure TForm1.Hello_World(Sender: TObject);
begin
  
ShowMessage('This is a test');
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base