Dicas - Movendo formulários

Dica de como movimentar um formulário.

Já existe uma forma, muito divulgada, de se movimentar um form utilizando a mensagem WM_Chittest, só que se vc tiver eventos para um objeto que não tem handle, todos os eventos deste objeto serão desprezados.

Nesta dica , qualquer objeto que tenha os eventos UP, DOWN e MOVE do mouse, será capaz de movimentar o form, não deixando de executar nenhum evento pré-definido.

No exemplo abaixo foi utilizado o componente TLabel:

Listagem 1: Declaração de variável e método

private { Private declarations } MoveForm : Boolean; public { Public declarations } procedure Movimenta(sender : tObject);

Listagem 2: Método Movimenta

procedure TForm1.Movimenta(sender: tObject); const   SC_MOVE = $F012; begin   ReleaseCapture;   (sender as TWinControl).Perform(wm_syscommand,sc_move,0); end;

Listagem 3: Evento OnMouseDown do label

procedure TForm1.label1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin   MoveForm := True; end;

Listagem 4: Evento OnMouseUp do label

procedure TForm1.label1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin   MoveForm := False; end;

Listagem 5: Evento OnMouseMove do label

procedure TForm1.label1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin   if MoveForm = True then     Movimenta(self); end;

Ulisses Brügger
ubrugger@dba.com.br

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados