como chamar o form de uma dll?
eu tenho uma dll .. e nela coloquei um form .... blz ....
fiz a procedure q chama a da dll ...
mas qndo eu chamo a procedure da dll .. ele da erro ...
procedure futgame;
begin
Principal.Show;
end;
.. pensei q era erro ... mas ae mandei dar um showmessage no lugar de show pra testar e foi .. pq ele nao abre o meu form???
alguem me ajuda a carregar forms q estao numa dll?
fiz a procedure q chama a da dll ...
mas qndo eu chamo a procedure da dll .. ele da erro ...
procedure futgame;
begin
Principal.Show;
end;
.. pensei q era erro ... mas ae mandei dar um showmessage no lugar de show pra testar e foi .. pq ele nao abre o meu form???
alguem me ajuda a carregar forms q estao numa dll?
Salsa
Curtidas 0
Respostas
Ipc$
27/08/2004
Bom, entendí que vc declarou um Form em sua dll e exportou uma procedure futgame p/ sua aplicação chamar, certo?
Se for isso, sua procedure apenas está dando Principal.Show
Vc tem certeza que este Form(Principal) está instanciado?
Se for isso, sua procedure apenas está dando Principal.Show
Vc tem certeza que este Form(Principal) está instanciado?
GOSTEI 0
Nildo
27/08/2004
Creio que se você fizer uma pesquisa no fórum você pode achar vários exemplos. Esse assunto de Forms em DLLs já foi muito discutido aqui no fórum.
Um abraço
Um abraço
GOSTEI 0
Salsa
27/08/2004
[quote:07dfcc0ffe=´IPC$´]Bom, entendí que vc declarou um Form em sua dll e exportou uma procedure futgame p/ sua aplicação chamar, certo?
Se for isso, sua procedure apenas está dando Principal.Show
Vc tem certeza que este Form(Principal) está instanciado?[/quote:07dfcc0ffe]
como assim esta estanciado?
Se for isso, sua procedure apenas está dando Principal.Show
Vc tem certeza que este Form(Principal) está instanciado?[/quote:07dfcc0ffe]
como assim esta estanciado?
GOSTEI 0
Ipc$
27/08/2004
Vc criou um Form na sua library certo?
Como vc está instanciando esse objeto?
No seu .dpr existe a famosa linha: Application.CreateForm ?
Se não, então quando vc está instanciando antes de dar o .Show?
Como vc está instanciando esse objeto?
No seu .dpr existe a famosa linha: Application.CreateForm ?
Se não, então quando vc está instanciando antes de dar o .Show?
GOSTEI 0
Salsa
27/08/2004
isso corrigi o erro .. vou reformular minha pergunta... la vai:
seguinte ...
tenho um projeto MDI ...
e a partir dele, quero chamar o form que esta em uma dll, para que ele carregue no meu projeto mdi como se fosse um form child.
o problema eh o seqguinte, como form normal, eu consigo abrir ele.. chamando da dll ...
porem qndo ponho a propriedade do form como fsMDIChild .. ele da erro:
exception class : EInvalidOperation
exception message : Cannot create form. No MDI forms are currently active.
....
to criando assim na dll:
procedure futgame;
begin
Application.CreateForm(TPrincipal,Principal);
Principal.Show;
end;
alguem ae sabe se tem como fazer oq quero?
resumindo, quero chamar formschild q estao numa dll ... dentro do meu projeto MDI!
valeuz
GOSTEI 0
Ipc$
27/08/2004
Olá !
Dei uma pesquisada aqui no fórum e não encontrei Forms MDIChild em dlls.
Bom, se vc ainda não solucionou, vê se resolve:
1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.
3-Crie o Form.
4-Na seção finalization, retorne o Application que vc salvou.
Dei uma pesquisada aqui no fórum e não encontrei Forms MDIChild em dlls.
Bom, se vc ainda não solucionou, vê se resolve:
1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.
3-Crie o Form.
4-Na seção finalization, retorne o Application que vc salvou.
GOSTEI 0
Eniorm
27/08/2004
[quote:d44adab3c3=´IPC$´]Olá !
Dei uma pesquisada aqui no fórum e não encontrei Forms MDIChild em dlls.
Bom, se vc ainda não solucionou, vê se resolve:
1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.
3-Crie o Form.
4-Na seção finalization, retorne o Application que vc salvou.[/quote:d44adab3c3]
Eu não entendi esses passos :(
Dei uma pesquisada aqui no fórum e não encontrei Forms MDIChild em dlls.
Bom, se vc ainda não solucionou, vê se resolve:
1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.
3-Crie o Form.
4-Na seção finalization, retorne o Application que vc salvou.[/quote:d44adab3c3]
Eu não entendi esses passos :(
GOSTEI 0
Massuda
27/08/2004
[quote:bd784f8fbe=´Enio Marconcini´]Eu não entendi esses passos[/quote:bd784f8fbe]Todo executável (EXE, DLL) gerado pelo Delphi e que utiliza a VCL tem algumas variáveis globais mantidas pela VCL. No caso de uma DLL e um EXE, acontece dessas variáveis globais não terem o mesmo valor, o que acarreta problemas quando (se não me engano) o form contido na DLL não é do tipo modal (exibido com ShowModal).
[quote:bd784f8fbe=´IPC$´]1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.[/quote:bd784f8fbe]Isso é feito para que o Application da DLL seja o mesmo do Application do programa; a DLL deve ter uma procedure que permita ao programa ajustar o Application [b:bd784f8fbe]antes[/b:bd784f8fbe] de criar o form
[quote:bd784f8fbe=´IPC$´]4-Na seção finalization, retorne o Application que vc salvou.[/quote:bd784f8fbe]Como todo programador bem educado, a gente deixa as coisas como nós encontramos originalmente...
Isso tudo pode ser implementado assim na DLL:Só não esqueça que precisa chamar PreparaDLL antes de criar o form.
Outra forma [b:bd784f8fbe]mais simples[/b:bd784f8fbe] de resolver isso é usar [i:bd784f8fbe]runtime packages[/i:bd784f8fbe]. Nesse caso, tanto o EXE como a DLL deve usar pelo menos os packages padrão do Delphi. Entretanto, algumas pessoas tem dificuldade em utilizar runtime packages pois há necessidade de instalar mais arquivos do que a maioria está acostumada (e é só isso... copiar mais arquivos para a máquina).
[quote:bd784f8fbe=´IPC$´]1-Passe o Application p/ sua dll.
2-Na dll, antes de criar o Form, salve o Application e atribua o Application da aplicação.[/quote:bd784f8fbe]Isso é feito para que o Application da DLL seja o mesmo do Application do programa; a DLL deve ter uma procedure que permita ao programa ajustar o Application [b:bd784f8fbe]antes[/b:bd784f8fbe] de criar o form
[quote:bd784f8fbe=´IPC$´]4-Na seção finalization, retorne o Application que vc salvou.[/quote:bd784f8fbe]Como todo programador bem educado, a gente deixa as coisas como nós encontramos originalmente...
Isso tudo pode ser implementado assim na DLL:
library Exemplo; interface procedure PreparaDLL(NewApplication: TApplication; NewScreen: TScreen); ... implementation var OldApplication: TApplication; OldScreen: TScreen; procedure PreparaDLL(NewApplication: TApplication; NewScreen: TScreen); begin Application := NewApplication; Screen := NewScreen; end; initialization OldApplication := Application; OldScreen := Screen; finalization Application := OldApplication; Screen := OldScreen; end.
Outra forma [b:bd784f8fbe]mais simples[/b:bd784f8fbe] de resolver isso é usar [i:bd784f8fbe]runtime packages[/i:bd784f8fbe]. Nesse caso, tanto o EXE como a DLL deve usar pelo menos os packages padrão do Delphi. Entretanto, algumas pessoas tem dificuldade em utilizar runtime packages pois há necessidade de instalar mais arquivos do que a maioria está acostumada (e é só isso... copiar mais arquivos para a máquina).
GOSTEI 0
Ipc$
27/08/2004
Olá colega,
Lembro que dá p/ criar MDIChilds em dlls mesmo que o Form pai esteja no .exe. Tente seguir aqueles passos e ver se funciona, senão, poste o código do método ou função da dll, onde vc cria o MDIChild.
Lembro que dá p/ criar MDIChilds em dlls mesmo que o Form pai esteja no .exe. Tente seguir aqueles passos e ver se funciona, senão, poste o código do método ou função da dll, onde vc cria o MDIChild.
GOSTEI 0
Ipc$
27/08/2004
Olá Massuda, acho que respondemos junto.
Bom, espero que solucione o problema do colega.
Obrigado !!!
Bom, espero que solucione o problema do colega.
Obrigado !!!
GOSTEI 0