我正在开发一个拖放应用程序,当拖放项目作为以下默认列表{{1}时,我感到对默认DragCursor
感到困扰}}:
所以我试图为用户开发一种新的方式,看看像GMAIL一样拖动动作:
我的问题是: 是否可以在Delphi 7中一起使用Drag&n; n drop事件鼠标事件?
如果我将DragCursors
放入dmAutomatic
,则DragMode
事件无效,如果我将MouseDown
放入dmManual
,则DragMode
正常工作,但MouseDown
事件不起作用。
以下是我的代码:
DragDrop
对不起我的简单问题,但我不知道我该怎么做......
非常感谢!
答案 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拖放机制将模糊更高级别的鼠标事件。但是,如果您决定直接处理这些消息,您还将破坏拖放机制。如果不仔细管理事件和拖放子系统,您可以轻松地使事情表现得非常糟糕。