label拖动(50分)

  • 主题发起人 主题发起人 kl
  • 开始时间 开始时间
K

kl

Unregistered / Unconfirmed
GUEST, unregistred user!
用鼠标如何拖动放置在panel上的label?
 
mousemove事件或者......
 
我用mousedown/mouseup/mousedown,但是有问题。
能否具体些。
 
用个DexDesign控件,怎么拖都可以!
(这可是在运行状态哦!)

 
建议将Tlabel控件改成Tstatictext控件。
显示效果是一样的。
label是从TGraphicControl继承的,而statictext是从TWinControl继承的。
 
这个程序可以运行,找一下其中的mousedown,mousemove,mouseup事件!
var
Form1: TForm1;
lblpick:Tlabel;
bdrag:boolean;
x1,y1:integer;
newobj_x,newobj_y:integer;
newobj_tag:integer;
Tpic:Timage;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
bdrag:=false;
tpic:=Timage.create(self);
tpic.parent:=form1;
tpic.setbounds(100,100,100,100);
tpic.OnMouseDown :=Button2MouseDown;
tpic.OnMouseMove :=Button2MouseMove;
tpic.OnMouseUp :=Button2MouseUp;
tpic.Canvas.Brush.Color:=clblue;
tpic.Canvas.Rectangle(0,0,20,20);
tpic.Transparent:=true;
end;

procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if bdrag then
begin
TButton(Sender).left:=TButton(Sender).left+x-x1;
TButton(Sender).top:=TButton(Sender).top+y-y1;
end;{if}
caption:=TButton(Sender).Caption;
end;

procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bdrag:=false;

caption:=TButton(Sender).Caption;
end;

procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x1:=x;
y1:=y;
bdrag:=true;
caption:=TButton(Sender).Caption;
end;
 
可以试一下ondragover和ondragDrop事件?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }

downX,downY,downLeft,downTop: Integer; //鼠标按下的位置以及鼠标按下时Label的位置
dragging: Boolean; //表示现在能不能移动Label

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
downX:=X;
downY:=Y;
downLeft:=Label1.Left;
downTop:=Label1.Top;
dragging := TRue; // //MouseDown的时候,允许移动
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if dragging then
begin
Label1.Left:=X-downX+Label1.Left;
Label1.Top:=Y-downY+Label1.Top;
end;
end;

procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if dragging then //MouseUp的时候,不允许移动
dragging := False;
end;

end.
 
时间太久 强制结束
 
江维,
哪里有DexDesign下载呢,不胜感激
 
后退
顶部