Jump to content

[Delphi VCL] Desabilitar ALT+F4 de um form genérico


Rafael Adão

Recommended Posts

Olá,

Existe alguma maneira de desabilitar o ALT+F4 de um formulário genericamente, por exemplo, numa classe Utilitario_InterfaceUsuario tenho:

procedure desabilitaBotaoFecharEAltF4DoForm(const f: TForm);
var
 hwndHandle : THANDLE;
 hMenuHandle : HMenu;
begin
hwndHandle := f.Handle;
if (hwndHandle <> 0) then
  begin
	  hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
	  if (hMenuHandle <> 0) then
		DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
  end;
//Desabilita ALT+F4 genéricamente
// ???
// ???
end;

Como podem ver, consigo desabilitar o botão fechar que fica na barra superior das janelas do Windows. Para desabilitar o ALT+F4 num formulário específico:

procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = vk_f4) and (ssAlt in Shift) then
  Key:=0;
end;

Lembrando que antes ativo a propriedade keyPreview do formulário. Queria saber se tem como fazer este tratamento genericamente agregando o código na função que fiz no Utilitario_InterfaceUsuario, sem mexer no FormKeyDown do formulário passado como parâmetro, que pode já ter algo implementado.

Edited by Rafael Adão
Link to comment
Share on other sites

Se podes criar uma subclasse para os formulários podes nessa fazer um override do método CreateHandle, chamando o método herdado primeiro e depois metendo o teu código. Se não podes criar uma subclasse deves poder usar uma classe interceptora (que fica com o mesmo tipo). Digo que deves porque o meu Delphi não suporta isso e como tal não tenho experiência com isso.

Link to comment
Share on other sites

Se podes criar uma subclasse para os formulários podes nessa fazer um override do método CreateHandle, chamando o método herdado primeiro e depois metendo o teu código. Se não podes criar uma subclasse deves poder usar uma classe interceptora (que fica com o mesmo tipo). Digo que deves porque o meu Delphi não suporta isso e como tal não tenho experiência com isso.

Entendi o que você propôs. Por enquanto nas 6 ou 7 telas que precisa deste controle fiz manualmente o tratamento do ALT+F4.

O problema é que tem telas que pode e telas que não pode ativar o ALT+F4. E certas situações/fatos que pode-se habilitar o ALT+F4. Vou deixar como está por enquanto e nos novos formulários que precisar disto vou tentar implementar algo do tipo. Quando isto acontecer, posto aqui a solução ;D

Abraço

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.