Fórum Bloquear o duplo clique mouse na barra de titulo dos forms #279040
26/04/2005
0
tenho uma aplicação Mdi. Os forms MdiChild tem os botões Fechar e Maximizar na barra de titulo... se o usuário clicar com o mouse 2x na barra de titulo o form é maximizado, clicando novamente o form é restaurado.
Eu preciso impedir que o form seja maximizado ou restaurado com o duplo clique do mouse, como eu posso fazer isso sem alterar as propriedades do form utilizando alguma chamada de sistema? (se o usuário clicar 2x na barra de titulo ñ deve acontecer nada com o form)
obrigado
Diogo
Diogoalles
Curtir tópico
+ 0Posts
27/04/2005
Diogoalles
ainda ñ consegui resolver isso.. será que alguem teria uma dica?
valeu
Diogo
Gostei + 0
27/04/2005
Sanses
Olha, não testei com aplicações MDI, mas se vc colocar no onresize do form as medidas e posição dele, ninguem poderá alterar:
form1.Top := 50;
form1.Left := 50;
form1.width := 500;
form1.Height := 500;
quanto ao duplo clique na barra de título, acredito que seja possível barrar somente com hoks de sistema, pois isso é o windows que implemtenta
[]´s
Sanses
Gostei + 0
27/04/2005
Diogoalles
Sanches ..obrigado pela dica mas isso não funciona para o que estou precisando.
Sem alterar as propriedades do form preciso encontrar algum evento ou função que capture o duplo clique do mouse na barra de titulo do form e não aconteca nada com ele. Não pode sair do lugar e nem ser redimensionado.
agradecido mais uma vez e aguardo qq dica se alguem a tiver
abraço
Diogo
Gostei + 0
27/04/2005
Beppe
Gostei + 0
27/04/2005
Kapak
Gostei + 0
28/04/2005
Diogoalles
poderia me dar um exemplo d como executar o WM_WINDOWPOSCHANGING ?... pesquisei no help e ñ consegui :cry:
valeu
Gostei + 0
28/04/2005
Kapak
WM_WindowPosChanging é enviado p/ qualquer situação do Form em que houver reposicionamento. Daí tanto faz se for dado duplo clique ou mover o Form ou minimizar ou restaurar ou fechar, essa msg é sempre enviada.
Como o duplo clique é na barra de título, então acho que vc precisará da msg do tipo WM_SysCommand; defina-a e quando ocorrer o evento, cheque o duplo clique e não dê [b:2d58509a4d]inherited[/b:2d58509a4d] p/ evitar seu processamento.
Gostei + 0
28/04/2005
Beppe
A mensagem WM_SysCommand quando Message.CmdType = SC_MAXIMIZE faz o resto.
// ocorre no duplo-clique no caption procedure WMNCLButtonDblClk(var Message: TWMNCLButtonDblClk); message WM_NCLButtonDblClk; // ocorre ao comando do menu de sistema e botões no caption procedure WMSysCommand(var Message: TWMSysCommand); message WM_SysCommand; ... procedure TForm1.WMSysCommand(var Message: TWMSysCommand); begin if Message.CmdType = SC_MAXIMIZE then Message.Result := 0 else inherited; end; procedure TForm1.WMNCLButtonDblClk(var Message: TWMNCLButtonDblClk); begin Message.Result := 0; end;
Gostei + 0
28/04/2005
Kapak
Gostei + 0
28/04/2005
Beppe
Esqueci de dizer. Ela gera a animação da maximização, e uma lógica extra precisa ser usada pra movimentação normal do form.
No tópico anterior eu postei dois handlers. O segundo(WMNCLButtonDblClk) faz isso.
Gostei + 0
28/04/2005
Kapak
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)