Bloquear o duplo clique mouse na barra de titulo dos forms
olá pessoal
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
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
Curtidas 0
Respostas
Diogoalles
26/04/2005
e ai galera..
ainda ñ consegui resolver isso.. será que alguem teria uma dica?
valeu
Diogo
ainda ñ consegui resolver isso.. será que alguem teria uma dica?
valeu
Diogo
GOSTEI 0
Sanses
26/04/2005
Olá
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
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
Diogoalles
26/04/2005
olá galera..
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
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
Beppe
26/04/2005
Tem a mensagem WM_WINDOWPOSCHANGING.
GOSTEI 0
Kapak
26/04/2005
Só o Form MDI ou os Childs tb ?
GOSTEI 0
Diogoalles
26/04/2005
só os forms MDIChild...
poderia me dar um exemplo d como executar o WM_WINDOWPOSCHANGING ?... pesquisei no help e ñ consegui :cry:
valeu
poderia me dar um exemplo d como executar o WM_WINDOWPOSCHANGING ?... pesquisei no help e ñ consegui :cry:
valeu
GOSTEI 0
Kapak
26/04/2005
Olá colega, acho que WM_WindowPosChanging não servirá p/ o seu caso pq vc só quer o duplo clique na barra de título não é ?
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.
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
Beppe
26/04/2005
A mensagem WM_WindowPosChanging pode ser usada porque ao maximizar a janela ela muda de coordenadas. A mensagem que cuida do duplo-clique no caption é WM_NCLButtonDblClk. Mas tem o botão e o comando no menu de sistema que não são lidados.
A mensagem WM_SysCommand quando Message.CmdType = SC_MAXIMIZE faz o resto.
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
Kapak
26/04/2005
A mensagem WM_WindowPosChanging pode ser usada porque ao maximizar a janela ela muda de coordenadas.
Pq vc não a usou ?procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType = SC_MAXIMIZE then
Message.Result := 0
else
inherited;
end;
Deste jeito ele só evita o clique no botão de maximizar e não o duplo clique.GOSTEI 0
Beppe
26/04/2005
[quote:cf1ee6e205=´Beppe´]A mensagem WM_WindowPosChanging pode ser usada porque ao maximizar a janela ela muda de coordenadas.
Pq vc não a usou ?[/quote:cf1ee6e205]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.
[quote:cf1ee6e205]procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType = SC_MAXIMIZE then
Message.Result := 0
else
inherited;
end;
Deste jeito ele só evita o clique no botão de maximizar e não o duplo clique.[/quote:cf1ee6e205]No tópico anterior eu postei dois handlers. O segundo(WMNCLButtonDblClk) faz isso.
GOSTEI 0
Kapak
26/04/2005
Realmente WM_NCLButtonDblClk evita o duplo clique no estado normal e minimizado; sugerí WM_SysCommand por se tratar de msgs Window Menu.
GOSTEI 0