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:01  来自:Linux联盟收集整理 ]
第5章 应用控件inALinux联盟
inALinux联盟
控件是一些用户可在运行时进行交互的可视化组件,本章将介绍控件的各种通用特点。inALinux联盟
inALinux联盟
5.1 实现控件拖放操作inALinux联盟
拖放是用户操纵对象的常用的方法。用户可拖动整个控件,或将某一个控件(如列表框或树状视图)中的项拖动到另一个控件中。inALinux联盟
· 开始拖动操作。inALinux联盟
· 接受被拖动的项。inALinux联盟
· 放下项。inALinux联盟
· 终止拖动操作。inALinux联盟
· 通过拖动对象定制拖放操作。inALinux联盟
· 改变拖动鼠标指针。inALinux联盟
inALinux联盟
5.1.1开始拖动操作inALinux联盟
每个控件都有DragMode属性用以确定如何初始化。若DragMode值为dmAutomatic,那么当用户将光标置于控件上并按下鼠标键时拖动操作自动开始。因为dmAutomatic可能会影响通常的鼠标活动,所以可把DragMode设为dmManual(缺省值),通过处理鼠标按下事件开始拖动操作。inALinux联盟
inALinux联盟
为手动开始控件拖动操作,可调用该控件 BeginDrag方法。BeginDrag需要一个布尔型参数Immediate。若其为true,拖动操作立即开始;若其为false,则拖动操作在用户将鼠标拖动一段短距离之前不会开始。调用BeginDrag(false)允许控件接受鼠标单击而不开始拖动操作。inALinux联盟
inALinux联盟
可设置其他状态时开始控件拖动操作,如在调用BeginDrag方法之前通过检查其参数确定用户按下的是哪一个鼠标键。例如,下列代码通过将拖动操作初始化为只当鼠标左键被按下时才开始在处理文件列表框的鼠标按下事件。inALinux联盟
inALinux联盟
inALinux联盟
5.1.2接受拖动项inALinux联盟
当用户拖动某项经过一个控件上方时,该控件收到OnDragOver事件,这时必须指示出,若用户将拖动项放在此处,控件是否能接受拖动项。拖动光标的更改指示出控件是否能接受该拖动项。为接受经过控件上方的拖动项,应为控件的OnDragOver事件编写事件处理程序。inALinux联盟
drag-over事件有一参数Accept,若需接受拖动项,可在事件处理程序中将其设为true。若Accept为true,应用程序将向控件发送一个drag-drop事件。drag-over事件还有其他的参数,包括拖动项的源及鼠标光标的当前位置,这些参数也可供事件处理程序确定是否接受放下操作。下例中,一个目录树视图只当拖动项来自文件列表框时才接受它们。inALinux联盟
inALinux联盟
inALinux联盟
5.1.3放下项inALinux联盟
若一个控件指示它能接受拖动项,它也应处理要被放下的项。为处理被放下的项,可为接受放下操作的控件的OnDragDrop事件编写事件处理程序。与drag-over事件相似,drag-drop事件指示拖动项的源及在接受控件上方的鼠标光标的坐标。后者允许监视项被拖动的路径;例如,可使用这个信息来改变有其他控件经过的组件的颜色。inALinux联盟
inALinux联盟
下例中,一目录树视图接受来自文件列表框的拖动项,对应于移动文件到某个目录中并放下文件。inALinux联盟
inALinux联盟
inALinux联盟
5.1.4 终止拖动操作inALinux联盟
当拖动项被成功地放下或在不能接受它的控件上方被释放时,拖动操作结束。此时end-drag事件被发给拖动项的源控件。为使源控件响应拖动结束,应为控件的OnEndDrag事件编写事件处理程序。inALinux联盟
OnEndDrag事件中最重要的参数是Target,它指出哪一个控件(若存在)接受了放下操作。若inALinux联盟
Target为null,则意味着没有控件接受拖动项。OnEndDrag事件还包含接受控件的坐标。在下例中,文件列表框通过刷新其文件列表处理end-drag事件。inALinux联盟
点击放大inALinux联盟
5.1.5通过拖动对象定制拖放操作

可用TDragObject的派生类来定制对象的拖放操作。标准的drag-over和drag-drop事件指出拖动项的源及接受控件上方鼠标光标的坐标。要得到附加的状态信息,可从TDragObject派生一个定制的拖动对象并覆盖其虚拟方法。可在OnStartDrag事件中创建这个定制对象。inALinux联盟
通常,drag-over和drag-drop事件中的源参数是指拖动操作开始的控件。若不同类型的控件需开始相同的数据的拖动操作,则源需要支持各类控件。当使用TDragObject的派生对象时,源即是拖动对象本身;若每个控件都在其OnStartDrag事件中创建相同类型的拖动对象,则目标只需处理一种类型的对象。inALinux联盟
drag-over和drag-drop事件能通过调用IsDragObject函数得知源是拖动对象还是控件。拖动对象可使你在应用程序主EXE文件实现的窗体和DLL实现的窗体之间拖动项,或在不同的DLL实现的窗体之间拖动项。inALinux联盟
inALinux联盟
5.1.6 改变拖动鼠标指针

通过设置源组件的DragCursor属性可定制拖动操作期间鼠标指针的外观。

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·使用 C++ Builder 框架  (2007-10-23 13:49:32)
 ·使用 C++ Builder 对象仓库介绍  (2007-10-23 13:47:24)
 ·C++ Builder 创建分布式应用程序介绍  (2007-10-23 13:44:16)
 ·C++ Builder 创建程序包和DLL方法步骤  (2007-10-23 13:42:17)
 ·使用 C++ Builder 创建应用程序步骤  (2007-10-23 13:40:25)
 ·开发 C++ Builder 应用程序步骤  (2007-10-23 13:39:19)
 ·C++ Builder 可视化组件库(VCL)标准组件 二  (2007-10-23 13:36:00)
 ·C++ Builder 可视化组件库(VCL)标准组件  (2007-10-23 13:34:05)
 ·C++ Builder 可视化组件库(VCL)中的对象、组件与控件  (2007-10-23 13:32:42)
 ·C++ Builder 可视化组件库(VCL)介绍  (2007-10-23 13:31:31)