DELPHI label标签怎么在FORM里用鼠标拖着满街跑?就象桌面图标一样

 我来答
RedBaronVIP
2013-01-10 · TA获得超过1147个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:242万
展开全部
楼主真是执着啊,开了好几个贴。这个问题一点都不难,不过要注意一点,如果每次拖动都要改变Label位置的话,Label的OnMouseMove事件会不断被触发,Label 就会像猴子一样在屏幕上跳来跳去。最好像Delphi一样,拖动的时候画个拖曳框,最后停止拖曳的时候再把Label的位置改变,这样效率较高。
代码如下:
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
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
FDrag: Boolean;
FDragDC: HDC;
FOrgPos: TPoint;
FPos: TPoint;
procedure DrawDragRect;
public
{ Public declarations }
end;
...
procedure TForm1.DrawDragRect;
var
dx, dy, x1, y1, x2, y2: Integer;
brOld: HBRUSH;
begin
dx := FPos.X - FOrgPos.X;
dy := FPos.Y - FOrgPos.Y;
x1 := Label1.Left + dx;
y1 := Label1.Top + dy;
x2 := x1 + Label1.Width;
y2 := y1 + Label1.Height;
brOld := SelectObject(FDragDC, GetStockObject(NULL_BRUSH));
Windows.Rectangle(FDragDC, x1, y1, x2, y2);
SelectObject(FDragDC, brOld);
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
GetCursorPos(FOrgPos);
Windows.ScreenToClient(Label1.Parent.Handle, FOrgPos);
FPos := FOrgPos;
FDragDC := GetDC(Label1.Parent.Handle);
SetROP2(FDragDC, R2_NOTXORPEN);
DrawDragRect;
FDrag := True;
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FDrag then
begin
DrawDragRect;
GetCursorPos(FPos);
Windows.ScreenToClient(Label1.Parent.Handle, FPos);
DrawDragRect;
end;
end;

procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDrag := False;
DrawDragRect;
ReleaseDC(Label1.Parent.Handle, FDragDC);
Label1.Left := Label1.Left + FPos.X - FOrgPos.X;
Label1.Top := Label1.Top + FPos.Y - FOrgPos.Y;
end;
太平洋来的风
2013-01-10 · TA获得超过190个赞
知道小有建树答主
回答量:582
采纳率:100%
帮助的人:253万
展开全部
设一个全局变量

mousedown 设置变量标志 true
mousemove 根据变量标志 true 来决定 修改label的 left top 注意偏移问题哦
mouseup 设置变量标志 false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式