Form em DLL
Galera comecei a colocar meus forms dentro de DLLs p/ deixar a aplicação mais leve e por ventura facilitar as atualizações,
só que não sei o tipo correto de criar esses forms peguei algumas dicas mais não me serviram 100¬ tipo essa:
dentro da DLL:
no sistema:
Grato se alguém me der uma força
thanks
só que não sei o tipo correto de criar esses forms peguei algumas dicas mais não me serviram 100¬ tipo essa:
dentro da DLL:
procedure Form(Handle: THandle); stdcall;
begin
with tfform.CreateParented(Handle) do
try
BorderStyle := bsDialog;
Position := poScreenCenter;
ShowModal;
finally
Free;
end;
end;
exports
Form;
no sistema:
implementation
{$R *.dfm}
procedure Form(Handle: THandle); stdcall; external ´nomeDa.dll´;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form(Application.Handle);
end;
Grato se alguém me der uma força
thanks
Marcos Fernando
Curtidas 0
Respostas
Fabiano Góes
13/09/2006
vou tentar te explicar,
seguinte, imagine um Modulo de Clientes onde o arquivo de projeto seria assim:
para colocar este módulo em uma dll, altere-o assim:
ao compilar este projeto(library) será gerado a seguinte dll: ModuloClientes.dll
então crie um método para chamar esta dll:
para fazer a chamada faça assim:
agpra e só fazer um teste.
Bom espero ter ajudado, quaquer duvida é só postar ok.
abraço !!!
seguinte, imagine um Modulo de Clientes onde o arquivo de projeto seria assim:
program ModuloClientes;
uses
Forms,
unFrmClientes in ´unFrmClientes.pas´ ;
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TfrmClientes, frmClientes);
Application.Run;
end.
para colocar este módulo em uma dll, altere-o assim:
library ModuloClientes;
uses
SysUtils,
Classes,
Forms,
unFrmClientes in ´unFrmClientes.pas´ ;
{$R *.res}
procedure Iniciar; stdcall;
begin
with TfrmClientes.Create(Application) do
try
ShowModal;
finally
Release;
Free;
end;
end;
exports
Iniciar;
begin
end.
ao compilar este projeto(library) será gerado a seguinte dll: ModuloClientes.dll
então crie um método para chamar esta dll:
procedure AbreModuloDLL(FileName: TFileName); var DLL: THandle; Iniciar: procedure; stdcall; begin DLL := LoadLibrary(PChar(FileName)); if (DLL = 0) then RaiseLastOSError; try @Iniciar := GetProcAddress(DLL, ´Iniciar´); if (@Iniciar = nil) then RaiseLastOSError; Iniciar; finally FreeLibrary(DLL); end; end;
para fazer a chamada faça assim:
AbreModuloDLL(´ModuloClientes.dll´);
agpra e só fazer um teste.
Bom espero ter ajudado, quaquer duvida é só postar ok.
abraço !!!
GOSTEI 0
Marcos Fernando
13/09/2006
Guri valeu pela força deu certo, só que assim: toda ves que eu chamo um form ele abre no iniciar também isso não é muito legal né,,,
Sabe me informar como corrigir isso?
Thanks
Sabe me informar como corrigir isso?
Thanks
GOSTEI 0
Marcos Fernando
13/09/2006
Guri implementei sua SP para que eu possa chamar o form que eu quizer ficou assim:
ai na chamada é só indicar o nome assim:
só falta aquele BO do iniciar agora,
thanks
procedure AbreModuloDLL(FileName: TFileName; F_n: String);
var
DLL: THandle;
Form: procedure; stdcall;
F_n2 : string;
begin
F_n2 := F_n;
DLL := LoadLibrary(PChar(FileName));
if (DLL = 0) then
RaiseLastOSError;
try
@Form := GetProcAddress(DLL, pchar(F_n2));
if (@Form = nil) then
RaiseLastOSError;
Form;
finally
FreeLibrary(DLL);
end;
end;
ai na chamada é só indicar o nome assim:
AbreModuloDLL(´ModuloClientes.dll´,´pesqClientes´);
só falta aquele BO do iniciar agora,
thanks
GOSTEI 0
Rodc
13/09/2006
Tem como meu aplicativo acessar as funções e variáveis que estão no form que está dentro da DLL? E o contrário, também é possível? Acessar as variáveis do sistema de dentro da DLL?
GOSTEI 0
Prmas
13/09/2006
Olá pessoal,
Otima explicaçãodo Fabiano Góes.
No meu caso porém, o form está ligado a funções em outros forms que estão no aplicativo ou pretendo colocar em outra dll.
Como posso chamar essas funções do aplicativo ou outra dll?
Isso é possível? Se alguém tiver a respostam por favor me ajude...
Obrigado a todos.
Marcos
Otima explicaçãodo Fabiano Góes.
No meu caso porém, o form está ligado a funções em outros forms que estão no aplicativo ou pretendo colocar em outra dll.
Como posso chamar essas funções do aplicativo ou outra dll?
Isso é possível? Se alguém tiver a respostam por favor me ajude...
Obrigado a todos.
Marcos
GOSTEI 0
Mmoreira
13/09/2006
Pessoal,
Alguem sabe como resolver o problema do:
prmas
Estou com a mesma duvida!!
Alguem sabe como resolver o problema do:
prmas
Estou com a mesma duvida!!
GOSTEI 0
Eniorm
13/09/2006
procedure AbreModuloDLL(FileName: TFileName);
var
DLL: THandle;
Iniciar: procedure; stdcall;
o que vem a ser esse [b:0ce297125b]stdcall[/b:0ce297125b] e qual a finalidade do mesmo???
fiz um teste aqui e resultou que, ao fechar o form (que está na dll) é fechado o programa todo, é correto isso ???
abraço
GOSTEI 0
Vicente Santos
13/09/2006
CARA isso tirou todas as minhas duvidas, valeu mesmo ! showww;
GOSTEI 0
Khushi
13/09/2006
You can get the solution by visit on this link https://unfitpc.com here is the best solution of your problem.
GOSTEI 0