4

TEventObjectを提供するイベントOnMouseDownを作成しました。マウスを移動したり、Webブラウザーをクリックしたりすると、イベントは完全に機能しますが、Webブラウザーの垂直スクロールバーをスクロールまたはクリックすると、例外が発生します。EurekaLogは、d2d1.dllでEZeroDivide例外を報告します。例外をトラップしようとしましたが、試したことは何も機能していないようです。OnMouseMoveTWebBrowserEZeroDivide

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についてあまり詳しくなく、垂直スクロールバーをクリックまたはドラッグしたときにのみ例外が発生する理由がわからないため、解決するのが難しいものです。必要に応じて、より多くの情報を提供できます。コンパイラ:Delphi2010。

[編集] この投稿を参照してください: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]);
4

1 に答える 1

2

FPU例外を無効にしてみてください。

System.Set8087CW($133F);

Delphiの新しいバージョンでは:

Math.SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);
于 2012-01-04T16:24:55.817 に答える