我有一个接受文件拖放的表单,以及放置在同一表单上的 TPanel 控件上的 TWebBrowser 控件。
最主要的是,当我将文件拖放到表单上时,其路径会添加到 TEdit 控件中。然而,当用户将文件拖放到表单上时,有时他们实际上可能会将其放到 TWebBrowser 上,TWebBrowser 会根据文件类型为用户保存或运行文件。这是我实际上不希望发生的事情,我只想让 TWebBrowser 忽略删除的文件或像表单一样处理它。
这是我用来处理 WM_DROPFILES 消息的代码:
procedure TMainForm.AcceptFiles( var msg : TMessage );
const
cnMaxFileNameLen = 255;
var
i,
nCount : integer;
acFileName : array [0..cnMaxFileNameLen] of char;
begin
// find out how many files we're accepting
nCount := DragQueryFile( msg.WParam,
$FFFFFFFF,
acFileName,
cnMaxFileNameLen );
// query Windows one at a time for the file name
for i := 0 to nCount-1 do
begin
DragQueryFile( msg.WParam, i,
acFileName, cnMaxFileNameLen );
// do your thing with the acFileName
//MessageBox( Handle, acFileName, '', MB_OK );
Edit1.Text := acFileName;
end;
// let Windows know that you're done
DragFinish( msg.WParam );
end;
提前谢谢您。任何线索将不胜感激。
最佳答案
要拦截 TWebBrowser 中的拖放操作,您必须实现 IDropTarget
和 IDocHostUIHandler
接口(interface)。那么你必须使用GetDropTarget
方法来传递您自己的 IDropTarget 实现。
有关示例 Delphi 代码,请尝试这篇文章 How to handle drag and drop in a TWebBrowser control
关于delphi - 防止 TWebBrowser 接受删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11452852/