Я создал 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;
Мой вопрос: могу ли я каким-то образом предотвратить исключение или можно ли обнаружить нажатие мыши на вертикальной полосе прокрутки TWebbrowser, чтобы предотвратить исключение? Это исключение мне трудно решить, потому что я мало знаю о TEventObject и не понимаю, почему исключение возникает только при нажатии или перетаскивании вертикальной полосы прокрутки. Я могу предоставить больше информации, если это необходимо. Компилятор: Делфи 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]);