linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > c/c++/c# >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·Windows/Linux下配置Eclipse+C
·c语言static与extern的用法
·VC++(Ctime日期函数)应用
·typedef struct和struct的区别
·C/C++对文件操作
·C常用算法程序实例-线性代数方
·C#发送Email邮件方法总结
·struct的初始化,拷贝及指针成
·C语言入门实例 switch使用
·c++二叉树实现源代码
·对初学者的建议:如何学习C语言
·C++ Builder 处理控件中的文本
·常用的BCB & Delphi 函数
·C++入门经典教程完全版01-引言
·C++ Builder 使用Canvas对象的
最新文章
·使用C/C++扩展Python
·C语言入门实例 switch使用
·在C#里实现DATAGRID的打印预览
·如何使用 Visual C# .NET 创建
·C#发送Email邮件方法总结
·一道C#面试题目引发的思考
·c语言艺术清屏
·c语言static与extern的用法
·大数的阶乘算法
·C#编码好习惯
·构造函数,复制构造函数
·typedef struct和struct的区别
·struct的初始化,拷贝及指针成
·超强的指针学习笔记推荐
·STL中erase方法对链表类容器的
Google
 
C++ Builder 实现控件的拖动-停靠操作
[ 作者:  加入时间:2007-11-02 13:28:44  来自:Linux联盟收集整理 ]
5.2 实现控件的拖动-停靠操作83iLinux联盟
83iLinux联盟
TWinControl的派生类可作为停靠点,而TControl的派生类可作为停放到停靠点的子窗口。例如,要在窗体的窗口左边界提供一个停靠点,可将一个面板排列到窗体左边界并使面板成为一个停靠点。当可停靠的控件被拖动到面板中并释放时,它们成为面板的子控件。83iLinux联盟
83iLinux联盟
· 使窗口控件成为一个停靠点。83iLinux联盟
· 使控件成为一个可停靠子控件。83iLinux联盟
· 控制子控件如何被停放。83iLinux联盟
· 控制子控件如何取消停靠。83iLinux联盟
· 控制子控件如何响应拖动-停靠操作。83iLinux联盟
83iLinux联盟
5.2.1 使窗口控件成为一个停靠点83iLinux联盟
要使窗口控件成为一个停靠点:83iLinux联盟
1) 把DockSite属性设为true。83iLinux联盟
2) 要使停靠点对象只在包含已停放的客户时显示,将其AutoSize属性设为true。当AutoSize为true时,停靠点尺寸保持为0,直到它接受一个被停放的子控件。然后它会调整大小以适应子控件。83iLinux联盟
83iLinux联盟
5.2.2 使控件成为一个可停靠子控件83iLinux联盟
要使控件成为一个可停靠子控件:83iLinux联盟
1) 把DragKind属性设为dkDock。当DragKind为dkDock时,可将控件移动到一个新的停靠点中,或取消控件的停靠以使它变成浮动窗口。当DragKind为dkDrag(缺省)时,必须使用OnDragOver、OnEndDrag和OnDragDrop事件来实现拖动控件而开始的拖放操作。83iLinux联盟
2) 把DragMode设为dmAutomatic。当DragMode为dmAutomatic时,拖动(根据DragKind的值判断是拖放操作或停靠操作)会在用户开始使用鼠标拖动控件时自动初始化。当 DragMode为dmManual时,需调用BeginDrag方法来开始拖动-停靠(或拖放)操作。83iLinux联盟
3) 设置TWinControl的派生类的FloatingDockSiteClass属性,以指定它作为那些被取消停靠的浮动窗口的暂驻窗口。当控件没有在停靠点被释放时,一个这类的窗口控件被动态创建,同时,成为该可停靠子控件的父类。若这个可停靠子控件是TWinControl的派生类,则不需单独为它创建一个停靠点来暂驻控件,尽管可以为获得边界和标题栏而指定一个窗体。为了省略动态暂驻窗口,把控件的83iLinux联盟
FloatingDockSiteClass设为与控件的类一样,则它将变成一个没有父类的浮动窗口。

5.2.3 控制子控件如何被停放83iLinux联盟
当子控件在停靠点上方被释放时,停靠点会自动接受子控件。对于大多数控件来说,第一个被停放的子控件填满客户区,第二个被停放的子控件将客户区分隔为两个独立的区域等等。Page控件将子控件停放入新页中(若子控件为另一个Page控件则合并页)。83iLinux联盟
83iLinux联盟
有三个事件允许停靠点进一步限制子控件如何停放:83iLinux联盟
点击放大83iLinux联盟
83iLinux联盟
停靠点的OnGetSiteInfo事件在用户拖动可停靠子控件到其上方时发生。它可让停靠点指出是否可接受DockClient参数指定的控件作为它的子控件,若可接受,还必须考虑子控件停放的位置。当OnGetSiteInfo发生时,InfluenceRect初始化停靠点的屏幕坐标,且CanDock初始化为true。通过改变InfluenceRect可创建具有更多限制的停靠区,而通过将CanDock设为false可拒绝子控件的停放。 83iLinux联盟
83iLinux联盟
83iLinux联盟
停靠点的OnDockOver事件也在用户拖动可停靠子控件到其上方时发生。它与拖放操作的OnDragOver事件类似。通过设置其Accept参数来指出子控件可被释放并停放。若该可停靠子控件由OnGetSiteInfo事件处理程序拒绝停放(也许因为控件类型的错误),OnDockOver事件不会发生。83iLinux联盟
83iLinux联盟
83iLinux联盟
停靠点的OnDockDrop在用户拖动可停靠子控件到其上方并释放时发生。它与拖放操作的OnDragDrop事件类似。可使用本事件来执行接受控件为子控件所需的必要的调整。通过使用Source参数所指定的TDockObject对象的Control属性可访问子控件。83iLinux联盟
83iLinux联盟
5.2.4 控制子控件如何取消停靠83iLinux联盟
当子控件的DragMode属性为dmAutomatic且被拖动时,停靠点可自动允许子控件取消停靠。停靠点可在OnUnDock事件处理程序中响应子控件被拖走或禁止取消停靠:83iLinux联盟
点击放大83iLinux联盟
83iLinux联盟
Client参数指出要取消停靠的子控件,Allow参数可让停靠点(Sender)拒绝取消停靠的操作。在实现OnUnDock事件处理程序时,知道停靠点内当前停放的其他子控件(若存在)可能会有用处。这个信息存放在只读属性DockClients中,它是一个TControl的索引数组。已停放的客户数由只读属性DockClientCount给出。83iLinux联盟
83iLinux联盟
5.2.5 控制子控件如何响应拖动-停靠操作83iLinux联盟
可停靠子控件有两个发生拖动-停靠操作期间的事件:OnStartDock事件和拖放操作的OnStartDrag事件相似,允许可停靠子控件创建定制的拖放对象。OnEndDock事件类似于OnEndDrag事件,在拖动结束时发生。83iLinux联盟

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·C++ Builder 实现控件拖放操作  (2007-11-02 13:28:01)
 ·D7中使用D5 D6的控件  (2007-11-02 13:05:25)
 ·使用Delphi快速开发ActiveX控件  (2007-11-02 12:05:54)
 ·delphi设置控件透明  (2007-11-01 10:48:50)
 ·Delphi中树型控件的使用技巧  (2007-10-30 15:41:50)
 ·使控件在设计期间也响应消息  (2007-10-30 15:15:08)
 ·delphi动态创建控件  (2007-10-30 15:07:56)
 ·模仿combox(select)控件  (2007-10-30 14:26:31)
 ·从 DataGridView 控件 托放数据 到 TreeView控件  (2007-10-29 14:21:22)
 ·读Programming ASP.NET中文版控件  (2007-10-29 14:15:23)