【问题标题】:Problem with IDropTarget when using with a VCL Form与 VCL 表单一起使用时 IDropTarget 出现问题
【发布时间】:2009-07-30 07:14:55
【问题描述】:

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

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

【问题讨论】:

    标签: c++ com drag-and-drop vcl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2011-05-04
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多