Click no Botão Fechar (X) do Form

Delphi

22/09/2006

Olá pessoal,

Como faço para saber se a pessoa [color=blue:de92124443]CLICOU[/color:de92124443] no Botão Fechar (X) do form?

Desde já agradeço

Susana Cardoso


Susi

Susi

Curtidas 0

Melhor post

Siam

Siam

22/09/2006

Defina:
  procedure WM_Sys(var Msg:TMessage); message WM_SysCommand;
Depois:
procedure TForm1.WM_Sys(var Msg:TMessage);
begin
  if (Msg.WParam = SC_Close) and (Msg.LParam <> 0) then
  begin
    // Clicou no ´X´
    inherited; // Retire esta linha se não quiser fechar o Form
  end
  else
    inherited;
end;



GOSTEI 1

Mais Respostas

Rjun

Rjun

22/09/2006

Não sei se tem como saber que o form está sendo fechando pelo clique no botão X. Mas se você quer fazer algum tratamento antes de fechar o form, pode usar o evento OnCloseQuery.


GOSTEI 0
Susi

Susi

22/09/2006

Olá Rogério,

Não sei se tem como saber que o form está sendo fechando pelo clique no botão X. Mas se você quer fazer algum tratamento antes de fechar o form, pode usar o evento OnCloseQuery.


Realmente, posso fazer no OnCloseQUery, só que ali, mesmo que eu tecle ALT+F4 ele também vai fazer... e eu gostaria que só fizesse quando clicasse no Botão...

Mas agradeço sua ajuda...

Um abraço

Susana Cardoso


GOSTEI 0
Siam

Siam

22/09/2006

Defina uma procedure do tipo message WM_SysCommand.
Se WParam = SC_Close e LParam <> 0; então foi clicado o X do Form.


GOSTEI 0
Susi

Susi

22/09/2006

Defina uma procedure do tipo message WM_SysCommand. Se WParam = SC_Close e LParam <> 0; então foi clicado o X do Form.


Olá Siam,

Não consegui entender muito bem ... coloquei a procedure, mas dá erro nos parametros.... poderia me explicar melhor?

Fico muito grata

Susana


GOSTEI 0
Susi

Susi

22/09/2006

Olá Siam...

Obrigada...Funcionou perfeitamente...


Um abraço

Susana Cardoso


GOSTEI 0
Output

Output

22/09/2006

Humm... e q tipow de parametro q passa pra esse Procedimento...


Tipow eu tava xamando o procedimneto no evento OnClose do form....


?


GOSTEI 0
Siam

Siam

22/09/2006

Humm... e q tipow de parametro q passa pra esse Procedimento... Tipow eu tava xamando o procedimneto no evento OnClose do form....
Não entendí. Que parâmetro e qual procedimento você se refere?


GOSTEI 0
Output

Output

22/09/2006

procedure TForm1.WM_Sys(var Msg:TMessage);
begin
  if (Msg.WParam = SC_Close) and (Msg.LParam <> 0) then
  begin
    // Clicou no ´X´
    inherited; // Retire esta linha se não quiser fechar o Form
  end
  else
    inherited;
end;


O procedimento acima,,, eu tava xamando ele no evento onClose do form,,

mah tm q passa um parametro,,, me da um exemplo?


GOSTEI 0
Susi

Susi

22/09/2006

Olá Rodrigo....

Você não precisa chamar ele no Evento OnClose do Form...

É só colocar a procedure na unit do form que vc quer.... e pronto ele faz sozinho... não precisa passar parametros....


Um abraço...

Susana


GOSTEI 1
Output

Output

22/09/2006

Brigado Suzana pela dica....
Eu fiz como vc disse,,,e tb retirei a linha inherited,,, pra c o kra clikar no x pra fechar ,, naum fexe,, somente feche c ele clikar no botao fechar....

procedure TForm1.WM_Sys(var Msg:TMessage);
begin
  if (Msg.WParam = SC_Close) and (Msg.LParam <> 0) then
  begin
    // Clicou no ´X´
    RETIREI A LINHA Q ESTAVA AKI // Retire esta linha se não quiser fechar o Form
  end
  else
    inherited;
end;



GOSTEI 0
Siam

Siam

22/09/2006

Na verdade quando é declarada uma procedure do tipo WM_SysCommand, ela intercepta as msgs de sistema que o Windows manda para o seu Form quando vc mexe na barra de título. Se vc colocar [b:cd3304b489]inherited[/b:cd3304b489], o Windows continua a processar a msg e faz o esperado; se não colocar, o Windows não faz mais nada.


GOSTEI 0
Output

Output

22/09/2006

Pois eh kra,,, eu fiz issu,,, tirei a [b:4c868784c5]inherited[/b:4c868784c5] mais o form fecha do msm geito.


GOSTEI 0
Siam

Siam

22/09/2006

Pois eh kra,,, eu fiz issu,,, tirei a inherited mais o form fecha do msm geito.
Poste o código


GOSTEI 0
Output

Output

22/09/2006

procedure TForm1.WM_Sys(var Msg:TMessage);
begin
  if (Msg.WParam = SC_Close) and (Msg.LParam <> 0) then
  begin
  
  end
  else
    inherited;
end; 
[/code]


GOSTEI 0
Siam

Siam

22/09/2006

Não era para fechar o Form1.
Poste a declaração de WM_Sys em TForm1.


GOSTEI 0
Output

Output

22/09/2006

Perdao kra.... dei uma olhada eu tava fazendo nhaca na declaração de WM_Sys em TForm1.......

agora deu certinho vlw kra


GOSTEI 0
POSTAR