Delphi - 拖放+ MouseDown + MouseUp

时间:2016-04-19 13:38:30

标签: delphi drag-and-drop delphi-7

我正在开发一个拖放应用程序,当拖放项目作为以下默认列表{{1}时,我感到对默认DragCursor感到困扰}}:

Default DragCursors

所以我试图为用户开发一种新的方式,看看像GMAIL一样拖动动作:

Gmail

我的问题是: 是否可以在Delphi 7中一起使用Drag&n; n drop事件鼠标事件?

enter image description here enter image description here

如果我将DragCursors放入dmAutomatic,则DragMode事件无效,如果我将MouseDown放入dmManual,则DragMode正常工作,但MouseDown事件不起作用。

以下是我的代码:

DragDrop

对不起我的简单问题,但我不知道我该怎么做......

非常感谢!

2 个答案:

答案 0 :(得分:2)

您可以使用dmAutomatic并为OnStartDrag事件编写处理程序,而不是您尝试使用的鼠标事件。

来自D7文件:

  

描述

     

使用OnStartDrag事件处理程序实现特殊处理   用户开始拖动控件或其包含的对象。   仅当DragKind为dkDrag时才会出现OnStartDrag。

     

...

     

OnStartDrag事件处理程序可以创建TDragControlObjectEx   DragObject参数的实例,用于指定拖动光标,或者,   可选地,拖动图像列表。

答案 1 :(得分:1)

Drag-n-drop是一个模态操作。当按钮关闭时,它必然会在鼠标事件中潜逃,以便为拖动操作提供服务。

在cmAutomatic中,您告诉组件在左键按下时自动启动拖放操作。在dmManual中,您负责通过在MouseDown事件中调用BeginDrag来启动拖动操作。

如果没有抓住实际的Windows鼠标事件(WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_LBUTTONUP等等),VCL拖放机制将模糊更高级别的鼠标事件。但是,如果您决定直接处理这些消息,您还将破坏拖放机制。如果不仔细管理事件和拖放子系统,您可以轻松地使事情表现得非常糟糕。