DELPHI TNOTIFYEVENT
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
{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
CÓDIGO DA APLICAÇÃO
{------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------}
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
Curtidas 0