0

我有一个在 Codegear 中开发的 VCL gui。我已经为 mainform 创建了一个 DropTarget,并且 DropTarget 对象实现了 IDropTarget 接口,它允许我从资源管理器中拖放文件。现在因为我只希望某些子组件成为放置目标(而不是整个表单),所以当 POINTL 坐标在组件的范围内时,我只有 DragEnter 方法返回 S_OK。

但是,如果我将项目缓慢拖入表单的边界而不是组件的边界,则 DragEnter 返回 E_NOINTERFACE,因此不允许拖放。如果我继续拖入放置区,DragEnter 不会触发,我明白它为什么不触发。所以我的问题是如何手动触发 DragEnter 事件

4

1 回答 1

3

听起来您忽略了 IDropTarget 除了 DragEnter() 之外还需要使用的 DragOver() 方法。如果 DragEnter() 不是从您允许的坐标开始,那么您必须返回S_OK并将 pdwEffect 参数设置为DROPEFFECT_NONE,然后让 DragOver() 继续进行自己的坐标检查。

此外,由于您只想拖到特定控件上,因此您应该为每个单独的控件调用 RegisterDragDrop()(假设它们是 TWinControl 后代),而不是 TForm 本身。

于 2009-08-03T23:11:22.983 回答