- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Moving controls at runtime

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;




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile