Arrastando Formulario
meu problema é o seguinte, gostaria de ao clicar num componente do formulario e arrastalo, o formulario arraste tb.
isso pq eu tirei a borda do formulario e por isso ele nao se move, queria fazer ele s mover via codigo. obrigado
isso pq eu tirei a borda do formulario e por isso ele nao se move, queria fazer ele s mover via codigo. obrigado
Bterossi
Curtidas 0
Respostas
Marcelo.c
07/05/2003
081 - Mover Formulario em todas as partes
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
procedure WMNChitTest(var M: TWMNchitTest);
message WM_NCHITTEST;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
begin
inherited;
if M.result = htclient then
M.result := htCaption;
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
private
{ Private declarations }
public
procedure WMNChitTest(var M: TWMNchitTest);
message WM_NCHITTEST;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
begin
inherited;
if M.result = htclient then
M.result := htCaption;
end;
end.
GOSTEI 0
Bterossi
07/05/2003
Só funciona com formulario, eu gostaria de fazer p/ componente.obrigado
GOSTEI 0
Marcelo.c
07/05/2003
No teste que fiz, em qualquer lugar que se clique, o formulário é movido.
Não é isso que você precisa ?
Não é isso que você precisa ?
GOSTEI 0
Bterossi
07/05/2003
Sim, mais c eu clicar em um componente ele nao arrasta o formulario, é isso que eu quero.
Arrastando um componente, eu arrasto o formulario.
obrigado
Arrastando um componente, eu arrasto o formulario.
obrigado
GOSTEI 0
Marcos Rodrigues
07/05/2003
Sim, mais c eu clicar em um componente ele nao arrasta o formulario, é isso que eu quero.
Arrastando um componente, eu arrasto o formulario.
obrigado
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
var
pt: TPoint;
lft: Integer;
tp: Integer;
begin
inherited;
GetCursorPos(pt);
lft:= pt.X - Left; //posição do cursor em X menos a propriedade Left do Form
tp:= pt.Y - Top; //posição do cursor em Y menos a propriedade Top do Form
//spondo aqui que seu form moverá somente quando o cursor estiver no range abaixo
if (lft < 20) or (tp > 88) then
Exit;
if M.result = htclient then
M.result := htCaption;
end;
Arrastando um componente, eu arrasto o formulario.
obrigado
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
var
pt: TPoint;
lft: Integer;
tp: Integer;
begin
inherited;
GetCursorPos(pt);
lft:= pt.X - Left; //posição do cursor em X menos a propriedade Left do Form
tp:= pt.Y - Top; //posição do cursor em Y menos a propriedade Top do Form
//spondo aqui que seu form moverá somente quando o cursor estiver no range abaixo
if (lft < 20) or (tp > 88) then
Exit;
if M.result = htclient then
M.result := htCaption;
end;
GOSTEI 0
Marcos Rodrigues
07/05/2003
Sim, mais c eu clicar em um componente ele nao arrasta o formulario, é isso que eu quero.
Arrastando um componente, eu arrasto o formulario.
obrigado
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
var
pt: TPoint;
lft: Integer;
tp: Integer;
begin
inherited;
GetCursorPos(pt);
lft:= pt.X - Left; //posição do cursor em X menos a propriedade Left do Form
tp:= pt.Y - Top; //posição do cursor em Y menos a propriedade Top do Form
//spondo aqui que seu form moverá somente quando o cursor estiver fora do range abaixo
if (lft < 20) or (tp > 88) then
Exit;
if M.result = htclient then
M.result := htCaption;
end;
Arrastando um componente, eu arrasto o formulario.
obrigado
procedure TForm1.WMNchitTest(var M:TWMNChitTest);
var
pt: TPoint;
lft: Integer;
tp: Integer;
begin
inherited;
GetCursorPos(pt);
lft:= pt.X - Left; //posição do cursor em X menos a propriedade Left do Form
tp:= pt.Y - Top; //posição do cursor em Y menos a propriedade Top do Form
//spondo aqui que seu form moverá somente quando o cursor estiver fora do range abaixo
if (lft < 20) or (tp > 88) then
Exit;
if M.result = htclient then
M.result := htCaption;
end;
GOSTEI 0
Arthur Heinrich
07/05/2003
Não sei se isso é possível. Todo componente é um "WindowedControl". Ou seja, seu botão é como se fosse uma janela dentro da outra.
A forma como o Windows trabalha é mover a sua janela quando você clica no Caption (título da janela). Se você aplicar isso a outro componente, acredito que ele moverá o seu componente dentro da janela ou simplesmente não funcionará.
Entretanto, talvez dê para você implementar uma gambiarra, utilizando os eventos OnMouseDown, OnMouseMove e OnMouseUp.
No MouseDown, você pode marcar um flag para indicar que está movendo a janela e registrar a coordenada do Mouse e a posição original da janela.
No MouseMove, caso o flag esteja indicando que a janela está sendo movida, você pode comparar a coordenada do Mouse com a registrada no momento do MouseDown, para calcular o deslocamento do Mouse e mover a janela para a posição correspondente.
No MouseUp, você simplesmente desmarca o flag.
A forma como o Windows trabalha é mover a sua janela quando você clica no Caption (título da janela). Se você aplicar isso a outro componente, acredito que ele moverá o seu componente dentro da janela ou simplesmente não funcionará.
Entretanto, talvez dê para você implementar uma gambiarra, utilizando os eventos OnMouseDown, OnMouseMove e OnMouseUp.
No MouseDown, você pode marcar um flag para indicar que está movendo a janela e registrar a coordenada do Mouse e a posição original da janela.
No MouseMove, caso o flag esteja indicando que a janela está sendo movida, você pode comparar a coordenada do Mouse com a registrada no momento do MouseDown, para calcular o deslocamento do Mouse e mover a janela para a posição correspondente.
No MouseUp, você simplesmente desmarca o flag.
GOSTEI 0