Запретить TWebBrowser принимать потерянные файлы

У меня есть форма, которая принимает файлы для перетаскивания, а также элемент управления TWebBrowser, помещенный в элемент управления TPanel в той же форме.

Главное, что, когда я удаляю файл в форме, его путь добавляется в элемент управления 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;

Заранее спасибо. Любая подсказка будет высоко ценится.

1 ответ

Решение

Чтобы перехватить операции перетаскивания в TWebBrowser, вы должны реализовать IDropTargetи IDocHostUIHandler интерфейсы. тогда вы должны использовать GetDropTarget способ передать вам собственную реализацию IDropTarget.

Для примера кода Delphi попробуйте эту статью How to handle drag and drop in a TWebBrowser control

Другие вопросы по тегам