我有一个接受要拖放的文件的表单,以及放在同一表单上的TPanel控件上的TWebBrowser控件。
主要的是,当我在表单上删除文件时,它的路径被添加到TEdit控件中。但是,当用户在表单上拖放文件时,有时他们可能会将其放在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;
提前谢谢你。任何线索都会非常感激。
答案 0 :(得分:5)
要拦截TWebBrowser中的拖放操作,您必须实现IDropTarget
和IDocHostUIHandler
接口。那么你必须使用GetDropTarget
方法传递你自己的IDropTarget实现。
有关示例delphi代码,请尝试使用本文How to handle drag and drop in a TWebBrowser control