Question and Answer Database FAQ2936D.txt Moving a control at runtime with the mouse. Category :VCL Platform :All Product :All 32 bit Question: How can I move a control at runtime using the mouse? Answer: You can trap the OnMouseDown event, remembering the x and y coordinates of the mouse and set the mouse capture. You can then track mouse movements with the OnMouseMove event, moving the control until the OnMouseUp event is fired. You then will want to place the control in it's final position and release capture of the mouse. The following example shows how to move a TButton component around on the form using the mouse. The movement is initiated by the user holding down the control key when the mouse button is activated. Example: type TForm1 = class(TForm) Button1: TButton; procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } MouseDownSpot : TPoint; Capturing : bool; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssCtrl in Shift then begin SetCapture(Button1.Handle); Capturing := true; MouseDownSpot.X := x; MouseDownSpot.Y := Y; end; end; procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Capturing then begin Button1.Left := Button1.Left — (MouseDownSpot.x — x); Button1.Top := Button1.Top — (MouseDownSpot.y — y); end; end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Capturing then begin ReleaseCapture; Capturing := false; Button1.Left := Button1.Left — (MouseDownSpot.x — x); Button1.Top := Button1.Top — (MouseDownSpot.y — y); end; end; 7/16/98 4:31:28 PM
Last Modified: 01-SEP-99