将文件拖放到Delphi表单不起作用
发布时间:2020-12-15 04:12:36 所属栏目:大数据 来源:网络整理
导读:我试图接受从文件资源管理器拖放到窗体的文件,但它不起作用.永远不会调用我的WM_DROPFILES处理程序.我正在运行 Windows 8,如果这有任何区别. 这是我做的一个简单示例(我在表单上只有一个TMemo): type TForm1 = class(TForm) Memo1: TMemo; private { Privat
我试图接受从文件资源管理器拖放到窗体的文件,但它不起作用.永远不会调用我的WM_DROPFILES处理程序.我正在运行
Windows 8,如果这有任何区别.
这是我做的一个简单示例(我在表单上只有一个TMemo): type TForm1 = class(TForm) Memo1: TMemo; private { Private declarations } procedure WMDROPFILES(var msg : TWMDropFiles) ; message WM_DROPFILES; procedure CreateWnd; override; procedure DestroyWnd; override; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.CreateWnd; begin inherited; DragAcceptFiles(Handle,True); end; procedure TForm1.DestroyWnd; begin inherited; DragAcceptFiles(Handle,false); end; procedure TForm1.WMDROPFILES(var msg: TWMDropFiles); var i,fileCount: integer; fileName: array[0..MAX_PATH] of char; begin fileCount:=DragQueryFile(msg.Drop,$FFFFFFFF,fileName,MAX_PATH); for i := 0 to fileCount - 1 do begin DragQueryFile(msg.Drop,i,MAX_PATH); Memo1.Lines.Add(fileName); end; DragFinish(msg.Drop); end; 解决方法
您很可能正在运行升级的应用程序.可能是因为你正在运行Delphi提升.在Vista及更高版本中,低权限进程无法向更高权限进程发送消息.这
MSDN blog解释了更多.
如果您正在运行Delphi IDE,我建议您停止这样做.标准桌面应用程序开发很少需要这样做. 正如雷米指出的那样,你的DestroyWnd是不正确的.在调用DragAcceptFiles之前,您正在销毁窗口句柄.只需颠倒订单即可.我个人在CreateWnd和DestroyWnd都使用WindowHandle.如果未分配窗口句柄,则Handle属性会创建窗口句柄,因此会屏蔽此类错误. procedure TForm1.CreateWnd; begin inherited; DragAcceptFiles(WindowHandle,True); end; procedure TForm1.DestroyWnd; begin DragAcceptFiles(WindowHandle,false); inherited; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |