加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么我的表单在文件被删除时不会收到WM_DropFiles?

发布时间:2020-12-15 09:40:37 所属栏目:大数据 来源:网络整理
导读:我正在使用Embarcadero RAD Studio XE来开发应用程序.我正在尝试使用以下代码将文件拖放到应用程序中 TMainForm = class(TForm)public: procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;end;procedure TMainForm.FormCreate(Sender: TO
我正在使用Embarcadero RAD Studio XE来开发应用程序.我正在尝试使用以下代码将文件拖放到应用程序中

TMainForm = class(TForm)
public:
  procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Self.Handle,True);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(Self.Handle,False);
end;

procedure TMainForm.WMDropFiles(var Msg: TWMDropFiles);
begin
  inherited;
  showmessage('catch here');
  // some code to handle the drop files here
  Msg.Result := 0;
end;

这段代码没有问题.此外,当我拖放文件时,光标显示状态已更改为拖放,但在删除后,没有任何反应(也未显示任何消息).这有什么不对吗?

解决方法

在普通的vanilla应用程序中,问题中的代码会导致在表单上删除对象时执行WMDropFiles.所以,显然还有其他事情可以阻止它发挥作用.最明显的潜在原因是:

>在初始调用DragAcceptFiles之后重新创建主窗体的窗口句柄.
>您的进程运行的完整性级别高于删除其上的文件的进程.例如,您是否以管理员身份运行流程?请注意,以IDE身份运行Delphi IDE会导致您的进程在从IDE启动时以管理员身份运行.
>您的过程中的其他任何东西都在干扰拖放.不知道你的应用程序中有什么,很难猜出这可能是什么.开始删除部分应用,直到除了问题中的代码之外什么都没有留下.

方案2似乎很合理.要了解更多信息,请参阅:Q: Why Doesn’t Drag-and-Drop work when my Application is Running Elevated? – A: Mandatory Integrity Control and UIPI

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读