与 VCL 表单一起使用时 IDropTarget 出现问题

发布于 2024-07-29 07:11:59 字数 358 浏览 4 评论 0原文

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

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

I have a VCL gui developed in Codegear. I have created a DropTarget for the mainform and the DropTarget object implements the IDropTarget interface which allows me to drag and drop files from explorer. Now because I only want some of the child components to be drop targets (not the whole form), I only have the DragEnter method return S_OK when the POINTL coordinates are within the bounds of the component.

However, if I drag the item slowly into the bounds of the form but not the component, DragEnter returns E_NOINTERFACE, therefore not allowing a drop. If I continue to drag into the dropzone, DragEnter won't fire, I understand why it isn't firing. So my question is how can I manually fire the DragEnter event?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山川志 2024-08-05 07:11:59

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

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

Sounds like you are ignoring that IDropTarget has a DragOver() method that you need to use in addition to DragEnter(). If DragEnter() does not begin with coordinates that you allow, then you have to return S_OK with the pdwEffect parameter set to DROPEFFECT_NONE, and then let DragOver() continue doing its own coordinate checking afterwards.

In addition, since you only want to drag onto specific control, you should be calling RegisterDragDrop() for each of those individual controls (assuming they are TWinControl descendants), not for the TForm itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文