gpt4 book ai didi

delphi - 当文件拖放到我的表单上时,为什么我的表单没有收到 WM_DropFiles?

转载 作者:行者123 更新时间:2023-12-03 14:56:29 27 4
gpt4 key购买 nike

我正在使用 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;

这段代码没有问题。另外,当我拖放文件时,光标显示状态更改为拖放,但放下文件后,什么也没有发生(也没有显示消息)。这有什么问题吗?

最佳答案

在普通的普通应用程序中,问题中的代码会导致在将对象拖放到表单上时执行 WMDropFiles。所以,显然还有其他事情发生阻止了它的工作。最明显的潜在原因是:

  1. 在初次调用 DragAcceptFiles 后,将重新创建主窗体的窗口句柄。
  2. 您的进程正在以比在其上删除文件的进程更高的完整性级别运行。例如,您是否以管理员身份运行进程。请注意,以管理员身份运行 Delphi IDE 会导致您的进程在从 IDE 启动时以管理员身份运行。
  3. 您的流程中的其他因素正在干扰拖/放。如果不知道您的应用程序中有什么,就很难猜测这可能是什么。开始删除应用的某些部分,直到除了问题中的代码之外什么都没有剩下。

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

关于delphi - 当文件拖放到我的表单上时,为什么我的表单没有收到 WM_DropFiles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com