怎样制作?

解决方案 »

  1.   

    delphi 的demo里边有个例子的,如果你觉得不够可以去cnpack 下载
    它那个有关停靠的接口很全面的http://cnpack.cosoft.org.cn/
      

  2.   

    因为停靠的方式各不相同,borland风格的停靠在delphi里实现起来
    应该是最简单,只需要设置那个dragkind为dkdock以及一点点其他设置
    ,但是要实现相对完美的停靠功能好像也不是那么容易的
      

  3.   

    以下内容是转贴csfn网友的文章,希望对你有所帮助: 这篇文章是俺在2001年10月份在http://www.csdn.net/develop/article/10/10591.shtm发表的,里面介绍了一些有关停靠的技术,如果读者有兴趣,可以阅读一下。由于那时候对停靠的认识肤浅,有些地方可能会有一些错误,但是我还是保留了它,也算是作者学习过程的一个里程碑吧。Delphi中停靠技术的实现随着软件技术的不断进步,软件界面也越来越美观,操作也越来越方便。
    综观市面上比较专业的各种软件,我们会发现大部分都提供窗体停靠的功能,特别象工具软件,基本上都或多或少有停靠功能。
    自然,Delphi也支持停靠,而且她和VCL紧密结合,对于广大的Delphi程序员来说更是一大福音。让我们省去枯燥的编码时间。把注意力集中在核心程序的构思上。先让我们来复习一下VCL的结构,在TWinControl类中有一个DockSite属性(boolean),它的作用是是否允许别的控件停靠在它的上面,在TControl类中有一个DragKind属性,如果要这个控件能停靠在别的控件上,就把DragKind属性设成dkDock。就这么简单,只要设置一下属性,一个支持停靠的程序就完成了。
    当然,上面说的只是最最基本的步骤,有了以上两步,我们就可以继续编写代码实现更复杂的功能。
    一般的支持停靠的程序都可以在主窗口的上下左右停靠,也就是说在主窗口的边上放上能被停靠的控件比较好(只要是从TWinControl继承的都行),一般我们都选择TPanel,为了便于读者理解,我们可以假定主窗口的左边可以停靠,所以在主窗口上放一个Align属性为alLeft的Panel,取名为LeftDockPanel,宽度为0,DockSite属性为True,当然我们的LeftDockPanel应该是可以改变大小的,所以在它右边再放一个TSplitter,取名为LeftSplitter,Align属性为alLeft。接下来就是停靠控件了,一般的程序停靠控件都是窗体,所以我们也建一个窗体,取名叫DockableForm,DragKind属性设成dkDock,DragMode属性设为dmAutomatic(自动停靠)。
    现在我们可以运行这个程序了,什么?效果不好?停靠的窗体停靠停靠进去后就不见了!哦,我差点忘了,当停靠窗体停靠时Delphi会产生一些事件,他们分别是
    1.OnDockOver(Sender: TObject; Source: TDragDockObject;
       X, Y: Integer; State: TDragState; var Accept: Boolean);
    2.OnDockDrop(Sender: TObject; Source: TDragDockObject;
       X, Y: Integer);
    3.OnGetSiteInfo(Sender: TObject; DockClient: TControl;
       var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
    4.OnStartDock(Sender: TObject;
       var DragObject: TDragDockObject);
    5.OnEndDock(Sender, Target: TObject; X, Y: Integer);
    6.OnUnDock(Sender: TObject; Client: TControl;
       NewTarget: TWinControl; var Allow: Boolean);