Rafael Adão Posted June 22, 2012 at 02:01 PM Report Share #464958 Posted June 22, 2012 at 02:01 PM (edited) 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 June 22, 2012 at 02:05 PM by Rafael Adão Link to comment Share on other sites More sharing options...
bsccara Posted June 22, 2012 at 10:54 PM Report Share #465057 Posted June 22, 2012 at 10:54 PM 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 More sharing options...
Rafael Adão Posted June 25, 2012 at 06:56 PM Author Report Share #465453 Posted June 25, 2012 at 06:56 PM 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 More sharing options...
bsccara Posted June 25, 2012 at 11:09 PM Report Share #465541 Posted June 25, 2012 at 11:09 PM Então podes usar uma propriedade definida na subclasse/classe interceptora para activar/desactivar esse processamento do Alt+F4. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now