Form sempre na frente

Delphi

25/03/2006

Alguem pode me ajudar to precissando de algum código para fazer meu form sempre ficar na frente, não precissa ter foco mas sempre ficar na frente como no Gerenciador de Tarefas, ele perde o foco mas fica na frente.

Tó fazendo um MSN Popup com muito mais funções e to precissando disso.

Irei disponibilizar aqui para o pessoal, quando tiver pronta!

Obrigado!


Rudá

Rudá

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

25/03/2006

Colega,
SeuForm.Style := fsStayOnTop;

Ou alterar a propriedade [b:e00076965f]Style[/b:e00076965f] diretamente no Object Inspector.


GOSTEI 0
Rudá

Rudá

25/03/2006

[b:65845a9a58]Undeclared identifier ´Style´[/b:65845a9a58]

Não tem a propriededa Style


GOSTEI 0
Vinicius2k

Vinicius2k

25/03/2006

Desculpe...

Leia-se [b:63858aa6f1]FormStyle[/b:63858aa6f1].


GOSTEI 0
Rudá

Rudá

25/03/2006

Valeu é isso mesmo que eu queria muito obrigado!


GOSTEI 0
Rudá

Rudá

25/03/2006

Funciona se setar a propriedade para o form principal, mas não funciona para os form filho.

Como resolver isso??


GOSTEI 0
Martins

Martins

25/03/2006

[quote:76e6f6954a=´Rudá´]Funciona se setar a propriedade para o form principal, mas não funciona para os form filho.

Como resolver isso??[/quote:76e6f6954a]

O Código q o Vinicius passou deveria funcionar, vc testou mudando as propriedade nos forms filho? Sua aplicação é SDI ou MDI.

Em último caso tente.

    SetForegroundWindow(Formx.Handle);


Boa sorte!!!


GOSTEI 0
Rudá

Rudá

25/03/2006

Como faço para identificar se é SDI ou MDI??

Estou fazendo assim:

Estou usando Delphi 7;
Vou em File - New - Application;
Coloco um Button no Form1;
E Coloquei esse Código:
procedure TForm1.Button1Click(Sender: TObject);
var
Form: TForm;
begin
Form:= TForm.Create(Self);
Form.FormStyle:= fsStayOnTop;
Form.Show;
end;


No Form1 o [b:4454b48427]FormStyle[/b:4454b48427] está [b:4454b48427]fsNormal[/b:4454b48427];
E assim não funcionou!
Tentei Colocar no Form1 o [b:4454b48427]FormStyle[/b:4454b48427] = [b:4454b48427]fsStayOnTop[/b:4454b48427];
Mas mesmo assim não funciona!

Podem dar uma olhada no que eu fiz: http://www.hiperleao.com.br/frente.zip


GOSTEI 0
Vinicius2k

Vinicius2k

25/03/2006

Até onde eu sei, isto só é possível com um Form -- o principal. Se sua aplicação tem mais de um form, não conheço solução para a situação, pois o segundo form é mantido sobre o form principal, porém não sobre as demais janelas do Windows.

Em tempo, seu código de criação do segundo form está, digamos, um tanto ´estranho´...
uses
  UnitDoForm2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SeuForm2 := TSeuForm2.Create(Application);
  SeuForm2.Show;
end;



GOSTEI 0
Rudá

Rudá

25/03/2006

Poderia ser feito assim então, colocar o form principal na frente de tudo e os filhos na frente do principal e com isso na frente de tudo tem como fazer isso??


GOSTEI 0
Rudá

Rudá

25/03/2006

Não tem alguma DLL que faça isso??


GOSTEI 0
Kroki

Kroki

25/03/2006

Não sei se é isso que vc quer,modifique com sua nescessidade;
No evento OnShow do Form que vc quer;
...
try
Form1.FormStyle:= fsStayOnTop;
SetForegroundWindow(Form1.Handle);
Form1.Activate;
except end;
...
OBS:Na hora da compilação ele gera uma execessão.
Seu form sempre estará na frente dos outros.


GOSTEI 0
Rudá

Rudá

25/03/2006

Com isso não da para mecher no form direito!


GOSTEI 0
Kroki

Kroki

25/03/2006

Aqui eu trabalho normal,oque vc não conseguiu?


GOSTEI 0
Rudá

Rudá

25/03/2006

Não consigo clicar no botão fechar do form principal!


GOSTEI 0
Kroki

Kroki

25/03/2006

Vc pode tentar adaptar algo porque não sei como vc ta usando,aqui eu consigo fechar e abrir normal,mas se eu chamar um outro for tem que ser Modal.


GOSTEI 0
Siam

Siam

25/03/2006

[quote:5e360773dc=´Rudá´]Poderia ser feito assim então, colocar o form principal na frente de tudo e os filhos na frente do principal e com isso na frente de tudo tem como fazer isso??[/quote:5e360773dc]Tente colocar no onShow: SetWindowPos(Handle, HWND_TopMost, 0,0,0,0, SWP_NoMove+SWP_NoSize);


GOSTEI 0
Rudá

Rudá

25/03/2006

[quote:825031c939=´Rudá´]Poderia ser feito assim então, colocar o form principal na frente de tudo e os filhos na frente do principal e com isso na frente de tudo tem como fazer isso??
Tente colocar no onShow: SetWindowPos(Handle, HWND_TopMost, 0,0,0,0, SWP_NoMove+SWP_NoSize);[/quote:825031c939]

Não funciona!


GOSTEI 0
Siam

Siam

25/03/2006

No Form principal funciona.


GOSTEI 0
Rudá

Rudá

25/03/2006

O principal problema do tópico é o form filho e não o form principal!


GOSTEI 0
Siam

Siam

25/03/2006

Mas foi vc mesmo quem disse para colocar o principal na frente:[quote:cb94bcc24b=´Rudá´]Poderia ser feito assim então, colocar o form principal na frente de tudo e os filhos na frente do principal e com isso na frente de tudo tem como fazer isso??[/quote:cb94bcc24b]Acho que para os filhos, só mudando Formstyle := fsnormal;


GOSTEI 0
Rudá

Rudá

25/03/2006

Não funcionou colocando o código no form principal e no form filho colocando [b:6a10f4838e]FormStyle:= fsStayOnTop[/b:6a10f4838e]


GOSTEI 0
Rudá

Rudá

25/03/2006

Consegui resolver com isso:

procedure TRudaMSNForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
if not (csDesigning in ComponentState) then
begin
WndParent := GetDesktopWindow;
Style := WS_CLIPSIBLINGS or WS_CHILD;
ExStyle := WS_EX_TOPMOST or WS_EX_TOOLWINDOW;
WindowClass.Style := CS_DBLCLKS or CS_SAVEBITS and not(CS_HREDRAW or CS_VREDRAW);
end
end;



GOSTEI 0
Rudá

Rudá

25/03/2006

Quando eu uso Hide no form principal e precisso abrir um form só que eu quero que aparece na barra de tarefas o programa!

Tem como resolver isso??


GOSTEI 0
POSTAR