Buscar

Usando variáveis do tipo TProcedure para chamadas pelo nome

Código

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, JvExButtons, JvButtons, DB, DBClient,
  wwclient, JvDataSource, Grids, DBGrids, JvgDBGrid, JvExControls,
  JvXPCore, JvXPButtons;

type

  TForm1 = class(TForm)
    Button1: TJvHTButton;

    procedure Button1Click(Sender: TObject);
    procedure CallMeByName(Sender: TObject);
  private
    procedure ExecMethod(OnObject: TObject; MethodName: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

type
  TExec = procedure of object;

implementation

  uses
    unit2;

  {$R *.dfm}

  {................................................................ ExecMethod }
  procedure TForm1.ExecMethod(OnObject: TObject; MethodName: string);
  var
    Routine: TMethod;
    Exec   : TExec;
  begin
    Routine.Data := Pointer(OnObject);
    Routine.Code := OnObject.MethodAddress(MethodName);

    if not Assigned(Routine.Code) then
      Exit;

    IF not Assigned(Routine.Code) then
      Exit;

    Exec:= TExec(Routine);
    Exec;
  end;

  {.............................................................. CallMeByName }
  procedure TForm1.CallMeByName(Sender: TObject);
  begin
    ShowMessage('Hello Delphi!');
  end;
  {.............................................................. Button1Click }
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    ExecMethod(Form1, 'CallMeByName');
  end;

end.

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 09/07/10
Por: Walter Bernardo Gomes
Visualizada: 4141 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009