Я создал TEventObject
, чтобы обеспечить OnMouseDown
и OnMouseMove
события для TWebBrowser
. События отлично работают при перемещении мыши и щелчке в веб-браузере, но когда я прокручиваю или нажимаю вертикальную полосу прокрутки веб-браузера, возникает EZeroDivide
исключение. EurekaLog сообщает об исключении EZeroDivide в d2d1.dll. Я пытался перехватить исключение, но ничего из того, что я пробовал, похоже не работает:
function TEventObject.Invoke( DispID: integer; const IID: TGUID; LocaleID: integer; Flags: Word; var Params;
VarResult, ExcepInfo, ArgErr: Pointer ): HResult;
begin
try
if ( DispID = DISPID_VALUE ) then
begin
if Assigned( FOnEvent ) then
FOnEvent;
Result := S_OK;
end
else
begin
FOnEvent := nil;
Result := E_NOTIMPL;
end;
except
on EZeroDivide do
begin
FOnEvent := nil;
Result := E_NOTIMPL;
end;
end;
end;
У меня вопрос: можно ли как-то предотвратить исключение или можно обнаружить mousedown на вертикальной полосе прокрутки TWebbrowser, чтобы предотвратить исключение? Это исключение трудно решить, потому что я мало что знаю о TEventObject и не понимаю, почему исключение возникает только при нажатии или перетаскивании вертикальной полосы прокрутки. Я могу предоставить больше информации, если это необходимо. Компилятор: Delphi 2010.
[Изменить]
Смотрите этот пост:
http://www.codenewsfast.com/cnf/article/0/waArticleBookmark.7401953
Очень простое демо-приложение доступно по адресу:
http://dl.dropbox.com/u/2167512/bugs/ie9/ie9_bug.zip
Это предотвращает ошибку:
Math.SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide,exOverflow, exUnderflow, exPrecision]);