como chamar o form de uma dll?

27/08/2004

0

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?


Salsa

Salsa

Responder

Posts

27/08/2004

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?


Responder

27/08/2004

Nildo

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


Responder

27/08/2004

Salsa

[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?


Responder

27/08/2004

Ipc$

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?


Responder

27/08/2004

Salsa

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



Responder

30/08/2004

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.


Responder

29/06/2005

Eniorm

[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 :(


Responder

29/06/2005

Massuda

[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:
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.
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).


Responder

29/06/2005

Ipc$

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.


Responder

29/06/2005

Ipc$

Olá Massuda, acho que respondemos junto.
Bom, espero que solucione o problema do colega.
Obrigado !!!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar