Главная страница | назад





Article #16490: Moving controls at runtime

 Question and Answer Database
FAQ1490D.txt Moving controls at runtime
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