2

我有一个接受拖放文件的表单,以及放置在同一表单上的 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;

先感谢您。任何线索将不胜感激。

4

1 回答 1

5

要拦截 TWebBrowser 中的拖放操作,您必须实现IDropTargetIDocHostUIHandler接口。那么您必须使用该GetDropTarget方法来传递您自己的 IDropTarget 实现。

对于示例 delphi 代码,请尝试这篇文章How to handle drag and drop in a TWebBrowser control

于 2012-07-12T15:44:29.513 回答