怎样才能使控件在Form中象在程序设计时一样自由拖动(50分)

  • 主题发起人 主题发起人 wz_hzb
  • 开始时间 开始时间
W

wz_hzb

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DF5中为了使Lable控件能在Form中自由拖动,将
Lable1.DragKind:=dkDock;
Lable1.DragMode:=dmAutomatic;
解决了Lable自由拖动的问题,但新问题出来了:控件拖动后一次后变成了一个自由的小窗体。

怎样才能使控件在Form中象在程序设计时一样自由拖动,请各位大侠帮忙解决解决!

 
先捕捉mousedown事件,然后根据鼠标的移动移动控件位置,模拟拖拽。
 
MouseDown MouseMove MouseUp Event
 
控件问题已经解决,在此我谢谢各位。
顺便再问一下,怎样在两个DBGrid之间运用拖拽技术实现DBGrid间的数据手工交换。
谢谢!
 
附加功能 将问题提前
 
比如你的Form上有一个控件Panel!
copy一段就可以了!!
unit Unit1;
……
type
TForm1Κclass(TForm)
procedureFormCreate(Sender:TObject);
……
public
{申明消息过滤过程}
procedureAppMessage(varMsg:TMsg;varHandled:Boolean);
……
implementation
procedureTForm1.FormCreate(Sender:TObject);
begin
{捕捉消息:将程序的收到消息事件与消息过滤过程关联起来}
Application.OnMessage:=AppMessage;
end;
procedureTForm1.AppMessage(varMsg:TMsg;varHandled:Boolean);
begin
{如果鼠标左键按下的话}
if Msg.message=WM—LButtonDown then
begin
{判断光标是否在用户工作区内}
if DefWindowProc(Panel1.Handle,WM—NCHitTest,0,GetMessagePos)=HTClient then
begin
{发出鼠标在用户标题栏内被按下的消息}
SendMessage(Panel1.Handle,WM—NCLButtonDown,HTCaption,GetMessagePos);
Handled:=true;
{消息处理完毕,窗体不再接受MouseDown及Click事件,如果为false,程序的运行稍微有些不正常。}
end;
end;
end;
end.
在Delphi4.0下通过!
 
把Label包含在Panel中,Align设为alClient,然后:
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; Shift:  TShiftState; X, Y: Integer);
const
SC_DragMove = $F012; // a magic number
begin
ReleaseCapture;
panel1.perform(WM_SysCommand, SC_DragMove, 0);
end;
 
CathyEagle,you are really sth!
不过现在我遇到如下问题:label 为动态生成,即设计期不在form中出现,该如何做到?
 
多人接受答案了。
 
后退
顶部