Hi TFE,
Here you go, use the OnMouseDown and OnMouseMove events for the TImage or
whatever:
(can no doubt be much improved, dredged up from some old code, not checked)
-------------------
var
control_mousedown_X,control_mousedown_Y:integer;
//_______________________________________________
procedure my_form.my_controlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
mousedown_p,control_p:TPoint;
begin
if GetCursorPos(mousedown_p)=False then begin mousedown_p.X:=0;
mousedown_p.Y:=0; end; // mouse position in screen co-ords.
control_p.X:= my_control.Left;
control_p.Y:= my_control.Top;
control_mousedown_X:=mousedown_p.X-(my_form.ClientToScreen(control_p)).X; //
mouse offset within the control
control_mousedown_Y:=mousedown_p.Y-(my_form.ClientToScreen(control_p)).Y;
end;
//_______________________________________________
procedure Tmy_form.my_controlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
mps:TPoint;
begin
if Shift=[ssLeft] // mouse down, dragging?
then begin
if GetCursorPos(mps)=False then begin mps.X:=0; mps.Y:=0; end;
with my_control do begin
Left:=(my_form.ScreenToClient(mps)).X-control_mousedown_X;
Top:=(my_form.ScreenToClient(mps)).Y-control_mousedown_Y;
end;//with
end;
end;
//______________________________________________
regards,
Martin.