Fórum DELPHI TNOTIFYEVENT #365638

29/10/2008

0

Gostaria de executar uma função na minha DLL passando um Owner como um TForm como parâmetro .
A função, criaria componentes neste owner, e executaria os métodos da DLL.
A criação do componente está feita, o problema é que ele não consegue executar os eventos

Neste exemplo crio um TButton, em um TForm, porém, Não consegui fazer funcionar um método(OnClick) neste objeto.


Quem quiser envio o código por e-mail.

{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
CÓDIGO DA DLL
{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
library DLL;

uses
  SysUtils, Classes, Forms, Controls, StdCtrls;
{$R *.res}
type
  TMarcButton = class(TButton)
  public
    procedure Click; override;
    constructor Create(AOwner : TComponent); override;
  end;

function CreateButton(APP : TApplication;AParentOwner : TWinControl):TButton;stdcall;
var
  Button : TMarcButton;
begin
  Button := TMarcButton.Create(APP);
  Button.ParentWindow := AParentOwner.Handle;
  Button.Top      := 100;
  Button.Left     := 100;
  Button.Caption  := ´Teste´;
  Button.Visible  := True;
  Button.Enabled  := True;
  Button.Show;
  Result := Button;
end;

exports
  CreateButton;

{ TMarcButton }

constructor TMarcButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

procedure TMarcButton.Click;
begin
 Self.Caption := timetostr(Time)
end;


{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
CÓDIGO DA APLICAÇÃO
{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
  TCreateButton = function (APP : TApplication;    AParentOwner : TWinControl):TButton;stdcall;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  DllHandle : HWND;
  CreateButton : TCreateButton;
  B : TButton;
begin
  DllHandle := LoadLibrary(Pchar(´DLL.dll´));
  try
    @CreateButton := GetProcAddress(DllHandle, ´CreateButton´);
    b := CreateButton(Application, Self);
    //Aqui ele executa.. mas se clica no objeto não executa
    B.Click
  finally
//    FreeLibrary(DllHandle);
  end;
end;



Marcadans

Marcadans

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar