我正在使用 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
当对象被放到表单上时执行。所以,显然还有其他事情发生阻止了它的工作。最明显的潜在原因是:
- 主窗体的窗口句柄在初始调用后重新创建
DragAcceptFiles
.
- 您的进程正在以比在其上删除文件的进程更高的完整性级别运行。例如,您是否以管理员身份运行进程。请注意,以管理员身份运行 Delphi IDE 会导致您的进程在从 IDE 启动时以管理员身份运行。
- 您的流程中的其他因素正在干扰拖/放。如果不知道您的应用程序中有什么,就很难猜测这可能是什么。开始删除应用程序的某些部分,直到除了问题中的代码之外什么都没有剩下。
选项 2 似乎很合理。要了解更多信息,请参阅:问:为什么当我的应用程序运行在高架状态时,拖放功能不起作用? – A:强制完整性控制和 UIPI
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)