Arrastando Formulario

07/05/2003

0

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


Bterossi

Bterossi

Responder

Posts

07/05/2003

Marcelo.c

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.


Responder

07/05/2003

Bterossi

Só funciona com formulario, eu gostaria de fazer p/ componente.obrigado


Responder

07/05/2003

Marcelo.c

No teste que fiz, em qualquer lugar que se clique, o formulário é movido.

Não é isso que você precisa ?


Responder

07/05/2003

Bterossi

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


Responder

27/04/2024

Marcos Rodrigues

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;

Responder

27/04/2024

Marcos Rodrigues

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;

Responder

28/04/2024

Arthur Heinrich

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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar