Formulário em DLL
18/01/2006
0
Galera procurei no forum mas não encontrei assunto correlato ao que vou mensionar, o que acontece é o seguinte:
Criei uma dll e coloque nela varios forms, e tenho observado que a cada form eu abro é criado um novo item na barra do iniciar do windows, a questão é a seguinte, tem como contornar isto, ou mesmo ocultar estes novos itens que teimam em aparecer?
Desde já Obrigado.
Criei uma dll e coloque nela varios forms, e tenho observado que a cada form eu abro é criado um novo item na barra do iniciar do windows, a questão é a seguinte, tem como contornar isto, ou mesmo ocultar estes novos itens que teimam em aparecer?
Desde já Obrigado.
Madrick
Curtir tópico
+ 0
Responder
Posts
18/01/2006
Ipc$
Tente sobrescrever o método CreateParams:
procedure CreateParams(var Params: TCreateParams); override; procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle + WS_EX_ToolWindow; end;
Responder
03/03/2006
Thiago Vidal
Só pra deixar aqui registrado, caso alguém faça esta busca no futuro...
Tive este mesmo problema, e assim como esta solução oferecida, a maioria das soluções encontradas aqui no fórum obriga a propriedade BorderStyle da janela a ser bsToolWin, o que no meu caso, não era uma coisa boa, eu precisava da janela com BorderStyle bsDialog, abrindo a partir da DLL, sem criar outro botao na barra de tarefas, visto que o form da minha DLL chama diversos outros forms, e deixaria a barra de tarefas abarrotada de botões.
Uma solução que eu encontrei, foi passar para o método da DLL, o Handle do objeto Application do executavel, e usar um CreateParented com este handle.
Segue o exemplo:
Na DLL:
No Executavel:
chamei a DLL estaticamente por simplicidade, mas tambem funciona se for utilizado LoadLibrary/FreeLibrary.
Lembrando mais uma vez, que a propriedade BorderStyle do Form deve ser bsDialog, se for bsSingle ou bsSizeable, o Form não fica visível, e a aplicação fica travada.
Tive este mesmo problema, e assim como esta solução oferecida, a maioria das soluções encontradas aqui no fórum obriga a propriedade BorderStyle da janela a ser bsToolWin, o que no meu caso, não era uma coisa boa, eu precisava da janela com BorderStyle bsDialog, abrindo a partir da DLL, sem criar outro botao na barra de tarefas, visto que o form da minha DLL chama diversos outros forms, e deixaria a barra de tarefas abarrotada de botões.
Uma solução que eu encontrei, foi passar para o método da DLL, o Handle do objeto Application do executavel, e usar um CreateParented com este handle.
Segue o exemplo:
Na DLL:
library Project2; uses Windows, SysUtils, Classes, Forms, Unit2 in ´Unit2.pas´ ; {$R *.res} procedure Abrir(Handle: THandle); stdcall; begin with TForm2.CreateParented(Handle) do try BorderStyle := bsDialog; Position := poScreenCenter; ShowModal; finally Free; end; end; exports Abrir; begin end.
No Executavel:
... implementation {$R *.dfm} procedure Abrir(Handle: THandle); stdcall; external ´project2.dll´; procedure TForm1.Button1Click(Sender: TObject); begin Abrir(Application.Handle); end; ...
chamei a DLL estaticamente por simplicidade, mas tambem funciona se for utilizado LoadLibrary/FreeLibrary.
Lembrando mais uma vez, que a propriedade BorderStyle do Form deve ser bsDialog, se for bsSingle ou bsSizeable, o Form não fica visível, e a aplicação fica travada.
Responder
Clique aqui para fazer login e interagir na Comunidade :)