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