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