如何让运行时 拖动label。我知道如何写运行时拖动 button ,但不知道如何让运行时 拖动label。(50分)

  • 主题发起人 主题发起人 Tsunky
  • 开始时间 开始时间
T

Tsunky

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让运行时 拖动label。我知道如何写运行时拖动 button ,但不知道如何让运行时 拖动label。
 
两个不是一样么?都是控制OnMouseDown,OnMouseMove,OnMouseUp,呵呵。
 
可是仅仅label不行啊。
 
可以吧!我都试过了。
 
TButton的父类是TWinControl
TLabel的父类是TGraphicControl
最好把代码贴出来,让大家看看。
 
这样,button、penel都可以,只是Label不行。
那位做过,Help me.

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
sc_dragmove=$F011;
begin
releasecapture;
label1.Perform(wm_syscommand,sc_dragmove,0);

end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
sc_dragmove=$F011;
begin
releasecapture;
Button1.Perform(wm_syscommand,sc_dragmove,0);

end;
 
确实如此,对Label改用其它方法。

结合 OnMouseDown,OnMouseMove,OnMouseUp来实现。
 
用ondragdrop和ondragover事件!
 
这是笨办法:
--------------
var
Form1: TForm1;
x,y,ox,ol,ot,oy:integer;
p:tpoint;
Down:boolean;
implementation

{$R *.dfm}

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Down:=true;
getcursorpos(p);
ox:=p.x;
oy:=p.y;
ol:=Label1.left;
ot:=Label1.Top;
end;

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

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Down then
begin
getcursorpos(p);
x:=p.x-ox;
y:=p.y-oy;
Label1.left:=ol+x;
Label1.top:=ot+y;
end;
end;
 
TO : jrq
我试了,但不行啊。
 
接受答案了.
 
to Tsunky:
老兄啊,不要开玩笑呀。
这是从我的DEMO中copy出来的源码。怎么能不行呢?

你在窗体上放置了ApplicationEvents组件没有????

我想大概是你的这个过程 procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); 出了问题。
 
晕。。。。。。。
怎么是我得分,我没有代码呢!
代码如下:
在一个窗体上任意放几个的控件,包括button,label,memo等等,把它们的
dragmode属性值改为dmAutomatic。
然后再放一个panel,在这个panel的ondragover事件中,写下//。
再在ondragdrop
事件中如下处理:
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
var xxx:tcontrolclass;
begin
xxx:=tcontrolclass(source.ClassType );
with xxx.Create(self) do
parent:=panel1;
end;
这时把任一个控件(包括label)拖到panel上,都可以根据所拖控件的类,
在panel上新建一个这个类的对象。
 
后退
顶部