Fórum Formulário em DLL #309584
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
Gostei + 0
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)