movimentando form no modo none
22/03/2003
0
eu tenho um form e quero arrasta-lo com o mouse...... porem ele esta no modo none(sem barra de titulo... e tambem esta coberto por componentes
entao naum consigo usar uma dica que encontrei.....
que eh esta....
[b:4cbb46dabb]private
procedure WMNCHitTest(var Msg: TMessage);
message WM_NCHitTest;
public
{ Public declarations }
end;
- Vá na seção implementation e escreva a procedure abaixo:
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
if GetAsyncKeyState(VK_LBUTTON) < 0 then
Msg.Result := HTCAPTION
else
Msg.Result := HTCLIENT;
end;[/b:4cbb46dabb]
porem naum funciona pois eu nao consigo selecionar o form apenas os componentes.....
como faco isso???????[/b]
entao naum consigo usar uma dica que encontrei.....
que eh esta....
[b:4cbb46dabb]private
procedure WMNCHitTest(var Msg: TMessage);
message WM_NCHitTest;
public
{ Public declarations }
end;
- Vá na seção implementation e escreva a procedure abaixo:
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
if GetAsyncKeyState(VK_LBUTTON) < 0 then
Msg.Result := HTCAPTION
else
Msg.Result := HTCLIENT;
end;[/b:4cbb46dabb]
porem naum funciona pois eu nao consigo selecionar o form apenas os componentes.....
como faco isso???????[/b]
Anonymous
Curtir tópico
+ 0
Responder
Posts
23/03/2003
Carlos Filho
É disso que eu gosto! Uma pergunta que não é sobre banco de dados!!!
Pelo visto vc deve estar fazendo algo sofisticado!
aqui vai a correção (suponha que seja Form1):
A parte após o ´and´ dentro da condição serve para limitar a ´área de arrasto´, que no meu exemplo é um tipo de cópia da barra de título do formulário. No seu caso, vc deve tirar a segunda condição, assim o seu formulário será arrastado se vc clicar em qualquer parte da dele...
Mas lembre-se: certos componentes que você põe no seu formulário tem sua própria janela, isso significa que eles não irão gerar a mensagem wm_NcHitTest, um exemplo é o TPanel. Em geral componentes que você pode por outros componentes dentro ou aqueles onde vc pode escrever como TListBox ou TEdit não geram mensagens wm_NcHitTest e portanto esse código não funcionará! Contudo se vc usar esse código e clicar no formulário ou num Label nesse formulario, ele será arrastado!
Espero que eu tenha ajudado
Pelo visto vc deve estar fazendo algo sofisticado!
aqui vai a correção (suponha que seja Form1):
(...) private procedure HitOnCaption(var Msg: TWmNcHitTest); message wm_NcHitTest; (...) implementation procedure TForm1.HitOnCaption(var Msg: TWmNcHitTest); begin inherited; //executa o manipulador de mensagens original if (Msg.Result = htClient) and (Msg.YPos < 16 + Top + GetSystemMetrics (sm_cyFrame)) then Msg.Result := htCaption; end; (...)
A parte após o ´and´ dentro da condição serve para limitar a ´área de arrasto´, que no meu exemplo é um tipo de cópia da barra de título do formulário. No seu caso, vc deve tirar a segunda condição, assim o seu formulário será arrastado se vc clicar em qualquer parte da dele...
Mas lembre-se: certos componentes que você põe no seu formulário tem sua própria janela, isso significa que eles não irão gerar a mensagem wm_NcHitTest, um exemplo é o TPanel. Em geral componentes que você pode por outros componentes dentro ou aqueles onde vc pode escrever como TListBox ou TEdit não geram mensagens wm_NcHitTest e portanto esse código não funcionará! Contudo se vc usar esse código e clicar no formulário ou num Label nesse formulario, ele será arrastado!
Espero que eu tenha ajudado
Responder
Clique aqui para fazer login e interagir na Comunidade :)