2009-07-30 19 views
0

我有一个在Codegear开发的VCL gui。我为mainform创建了一个DropTarget,而DropTarget对象实现了IDropTarget接口,该接口允许我从资源管理器拖放文件。现在,因为我只希望某些子组件是放置目标(而不是整个窗体),所以当POINTL坐标位于组件边界内时,我只有DragEnter方法返回S_OK。但是,如果将项目缓慢拖到窗体的边界而不是组件中,DragEnter会返回E_NOINTERFACE,因此不允许拖放。如果我继续拖入拖放区,DragEnter不会触发,我明白为什么它不会触发。所以我的问题是我该如何手动触发DragEnter事件使用VCL表格时IDropTarget的问题

回答

3

听起来就像你忽略了那样,IDropTarget有一个DragEnter()方法,除了需要使用DragEnter()方法。如果DragEnter()不以您允许的坐标开头,那么必须返回S_OK且pdwEffect参数设置为DROPEFFECT_NONE,然后让DragOver()继续执行其自己的坐标检查。另外,由于你只想拖到特定的控件上,你应该为每个单独的控件(假设它们是TWinControl后裔)调用RegisterDragDrop(),而不是TForm本身。