Como carregar o form que esta numa dll.
Consegui criar um Form dentro de uma DLL, so que nao sei como faço para criar o formulario da DLL, aguém por favor pode me ajudar?
Desde Ja agradeço.
Desde Ja agradeço.
Ltsilva
Curtidas 0
Respostas
Alysson
30/08/2003
usa isso.
Application.CreateForm(TForm1, Form1);
Onde:
*TForm1 = O classe do form, seus botoões, suas procedures, etc....
*Form1 = Nome do Form......
Application.CreateForm(TForm1, Form1);
Onde:
*TForm1 = O classe do form, seus botoões, suas procedures, etc....
*Form1 = Nome do Form......
GOSTEI 0
Bacalhau
30/08/2003
A DLL tem de exportar um procedure de criação do form. Por exemplo
Procedure MostraForm(...);
var X : TMeuForm
begin
X := TMeuForm.create(MeuForm);
X.showmodal;
end;
no fim da DLL leva a linha
exports MostraForm index 1;
Na aplicação que chama o DLL escreves depois dos types
PROCEDURE MOSTRAFORM EXTERNAL ´NOME.DLL´;
Quando quiseres chamar o form digitas
MOSTRAFORM
Táfeito
Procedure MostraForm(...);
var X : TMeuForm
begin
X := TMeuForm.create(MeuForm);
X.showmodal;
end;
no fim da DLL leva a linha
exports MostraForm index 1;
Na aplicação que chama o DLL escreves depois dos types
PROCEDURE MOSTRAFORM EXTERNAL ´NOME.DLL´;
Quando quiseres chamar o form digitas
MOSTRAFORM
Táfeito
GOSTEI 0
Ltsilva
30/08/2003
Tudo bem, deu certo, mas porque que o form aparece em um novo botão da barra de tarefas?
Tem como o form ficar no mesmo botão da Aplicação?
Att
Tem como o form ficar no mesmo botão da Aplicação?
Att
GOSTEI 0
Bacalhau
30/08/2003
Realmente esse é um problema difícil.
O natural é fazer form com o formstyle = MDIChild. O problema é colocar numa DLL e a aplicação ´mãe´ estabelecer uma ligação. Normalmente dá bronca. Eu já li um artigo sobre isso; tenta ir ao google e pesquisar ´MDIChild in DLL´. Se eu achar digo
O natural é fazer form com o formstyle = MDIChild. O problema é colocar numa DLL e a aplicação ´mãe´ estabelecer uma ligação. Normalmente dá bronca. Eu já li um artigo sobre isso; tenta ir ao google e pesquisar ´MDIChild in DLL´. Se eu achar digo
GOSTEI 0
Ltsilva
30/08/2003
Finalmente consegui, e não precisei usar o Form como MDIChild, usei o seguinte código:
Na DLL...
library LibForm1;
uses
SysUtils,
Classes,forms, windows,
UForm1 in ´UForm1.pas´ ;
{$R *.res}
var
oApp : TApplication;
oScr : TScreen;
procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := oApp;
Screen := oScr;
end;
end;
procedure ShowFrm(App:TApplication; Scr : TScreen); stdcall;
begin
Application := App;
Screen := Scr;
App.CreateForm(TForm1, Form1);
Form1.Show;
end;
exports
ShowFrm;
begin
oApp := Application;
oScr := Screen;
DLLProc := @MyDLLProc;
end.
E na Aplicação...
unit UPrinc;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
procedure ShowFrm(App: TApplication;Scr: TScreen); stdcall;
type
TPrinc = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Princ: TPrinc;
implementation
procedure ShowFrm(App: TApplication;Scr: TScreen); external ´LibForm1.dll´ name ´ShowFrm´;
{$R *.DFM}
procedure TPrinc.Button1Click(Sender: TObject);
begin
ShowFrm(Application, Screen);
end;
end.
O que seria de mim se não fosse esse Forum, Valeu Bacalhau, este exemplo eu peguei no Google, só tive o trabalho de mudar o form de MDIChild para Normal.
Na DLL...
library LibForm1;
uses
SysUtils,
Classes,forms, windows,
UForm1 in ´UForm1.pas´ ;
{$R *.res}
var
oApp : TApplication;
oScr : TScreen;
procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := oApp;
Screen := oScr;
end;
end;
procedure ShowFrm(App:TApplication; Scr : TScreen); stdcall;
begin
Application := App;
Screen := Scr;
App.CreateForm(TForm1, Form1);
Form1.Show;
end;
exports
ShowFrm;
begin
oApp := Application;
oScr := Screen;
DLLProc := @MyDLLProc;
end.
E na Aplicação...
unit UPrinc;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
procedure ShowFrm(App: TApplication;Scr: TScreen); stdcall;
type
TPrinc = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Princ: TPrinc;
implementation
procedure ShowFrm(App: TApplication;Scr: TScreen); external ´LibForm1.dll´ name ´ShowFrm´;
{$R *.DFM}
procedure TPrinc.Button1Click(Sender: TObject);
begin
ShowFrm(Application, Screen);
end;
end.
O que seria de mim se não fosse esse Forum, Valeu Bacalhau, este exemplo eu peguei no Google, só tive o trabalho de mudar o form de MDIChild para Normal.
GOSTEI 0
Bacalhau
30/08/2003
Obrigado :oops:
Também já aprendi mais uma...
Também já aprendi mais uma...
GOSTEI 0