Запретить 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