ABC控件:
http://www.obsof.com/public/download.html

解决方案 »

  1.   

    将要浮动控件的DragKind设为dkDock,DragMode设为dmAutomatic!拖动即可!
      

  2.   

    一个例子:
    procedure Tmainform.GroupBox1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    const
      SC_DragMove = $F012;  { a magic number }
    begin
      ReleaseCapture;
      groupbox1.Perform(WM_SysCommand, SC_DragMove, 0);
    end;其它的类似吧。多试试看。
      

  3.   

    关于这个问题,我在中国开发网管理网站曾经提出过,是关于控件的拖拽操作的,虽然有一些人(包括斑竹在内)参与了讨论,但我得到的只有失望,真是悲哀,或者是大家对此类问题比较不屑一顾吧!所以我到www.csdn.net来寻找志同道合的朋友,呵呵!
    关于你所提到的浮动面板的问题:
    1、我觉得ehom(?!)的方法最好,不过在拖拽的过程中会出现类似窗体的标题条,而且有类似窗体的关闭X,一旦点击,将会删除该控件;
    2、使用魔术数$F012:
        ReleaseCapture;
        控件名.Perform(WM_SYSCOMMAND, $F012, 0);
       不过使用这种方法也有不尽人意的地方,就是你所使用的控件必须是从TWinControl继承下来的,否则将不能操作,比如TImage等;
    3、我对控件的Drag与Dock进行了一下分析,在控件的OnEndDock事件中做如下控制:
    procedure TfrmMain.ImgMoveEndDock(Sender, Target: TObject; X, Y: Integer);
    var
      pt1: TPoint;
    begin
      pt1:= Point(x, y);
      pt1:= frmMain.ScreenToClient((Sender as TControl).ClientToScreen(pt1));
      (Sender as TControl).Parent:= frmMain;
      (Sender as TControl).Left:= pt1.x - x - 3;
      (Sender as TControl).Top:= pt1.y - y - 20;
    end;
    这样一来,只要是可视控件都可以使用上面的代码进行控制,而且具有通用性,但是唯一美中不足的是代码中最后两行的3与20(这是我自己试出来的),我不知道应该如何将它处理得更加容易维护,而不是简单的填写数字,我的意思是最好能够不使用具体的数字,如果哪位大侠知道的话,希望能够与我交流交流,谢谢!
    我的Email:[email protected]
      

  4.   

    在把父控件的DockSite的属性设为True
    ================================================================曾经有一碗热辣辣的烧猪手面放在我面前,我没有珍惜,等到晾凉了之后才后悔莫及。
      

  5.   

    也可把控件放在从TWinControl继承的控件上,采用gamevale(村长)的方法?不过这就成了纯粹的拖动,而没有了面版的意思!真正的面版就应该有表题栏!