请问怎样用鼠标拖动一个 控件 在窗体中移动 ????????????例如:
在窗体中放了一个 panel 控件 , 当鼠标在 panel 上按住鼠标左键时, 可以将 panel 控件 拖动到 任何地方 , 放开左键就停止拖动。请问在delphi6下如何实现,请提供详细的代码,最好带中文注释!!谢谢
在窗体中放了一个 panel 控件 , 当鼠标在 panel 上按住鼠标左键时, 可以将 panel 控件 拖动到 任何地方 , 放开左键就停止拖动。请问在delphi6下如何实现,请提供详细的代码,最好带中文注释!!谢谢
Y: Integer);
begin
button1.Left:=x;
button1.Top:=y;
end;自己想一下下就行了,呵呵。。 类似
----------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
IsMouseDown :Boolean;
DisX,DisY :Integer;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsMouseDown := True; //鼠标键已经按下
DisX := Mouse.CursorPos.X-TPanel(Sender).Left; //得到鼠标当前的位置和Panel位置的差值
DisY := Mouse.CursorPos.Y-TPanel(Sender).Top
end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsMouseDown := False; //鼠标键已经松开
end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsMouseDown then //只有鼠标按下时才改变位置
begin
TPanel(Sender).Top :=Mouse.CursorPos.Y-DisY; //根据鼠标的位置变化实时变换Panel的位置
TPanel(Sender).Left :=Mouse.CursorPos.X-DisX; //(注:需要减去位置差值)
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.DoubleBuffered := True;
end;end.
Y: Integer);
begin
ReleaseCapture;
panel1.perform(WM_SysCommand, $F012, 0);end;
Form1: TForm1;
MoveEn:Boolean;
XY:TPoint;
implementation{$R *.DFM}procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button =mbLeft then
begin
MoveEn:=True;
XY.x :=x;
XY.y :=y;
end;
end;procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MoveEn:=False;end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MoveEn then
begin
Label1.Left :=Label1.Left +(x-XY.x);
Label1.Top :=Label1.Top +(y-XY.y);
end;end;