> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IFRDocumentEvents インターフェイス

> ABBYY FineReader Engine API の IFRDocumentEvents インターフェイス — FRDocument からリスナーにイベント（OnPageProcessed、OnProgress、OnWarning）を通知するためのクライアント側の Callback インターフェイス。

これは、[FRDocument](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument) オブジェクトからリスナーにイベントを通知するためのCallback インターフェイスです。このインターフェイスはクライアント側で実装されます。お使いの開発ツール向けの詳細な実装方法については、[使用](/ja/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-connectable-objects) を参照してください。概要を以下に示します。

* C++ ユーザーは、IFRDocumentEvents インターフェイスを実装し、接続ポイント (Windows) を取得して、そのインターフェイスを実装するオブジェクトを FRDocument オブジェクトに "advise" する必要があります。このインターフェイスは IUnknown インターフェイスから派生しているため、クライアント オブジェクトでも IUnknown メソッドを実装する必要があります。
* FRDocument オブジェクトから通知を受け取りたい Visual Basic ユーザーは、それを WithEvents として宣言し、次のようなプロシージャを実装する必要があります。

```csharp theme={null}
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
```

このインターフェイスのメソッドを通じて通知を受け取るオブジェクトは、各メソッドの実装内で次の処理を実行できます。

* 画像の読み込み、文書解析、認識、合成、およびエクスポートの進行率を報告する。
* 完了した文書解析、認識、合成、およびエクスポートに関する情報を報告する。
* Windows の場合: 長時間の処理中にアプリケーションが応答なしに見えるのを防ぐため、システムメッセージを処理する。これは、ユーザーインターフェイスを持つアプリケーションで役立つことがあります。

<div id="methods">
  ## メソッド
</div>

| 名前                                                                                                                        | 説明                                                    |
| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| [OnPageProcessed](/ja/fine-reader/engine/api-reference/document-related-objects/ifrdocumentevents/onpageprocessed-method) | ページ処理の完了に関する情報をクライアントに通知します。                          |
| [OnProgress](/ja/fine-reader/engine/api-reference/document-related-objects/ifrdocumentevents/onprogress-method)           | 現在の操作 (画像の読み込み、解析、認識など) のおおよその進行率に関する情報をクライアントに通知します。 |
| [OnWarning](/ja/fine-reader/engine/api-reference/document-related-objects/ifrdocumentevents/onwarning-method)             | 処理中に発生したヒントや警告をクライアントに通知します。                          |

<div id="samples">
  ## サンプル
</div>

この Windows C++ サンプルでは、メソッド呼び出しに時間がかかりすぎた場合に処理を中止するタイマーの実装方法を示します。

<Accordion title="C++ (COM) コード">
  ```cpp theme={null}
  class CFRDocumentCallback: public IFRDocumentEvents {
  public:
      CFRDocumentCallback() : startTime( 0 ) {}
      // IUnknown メソッドを実装します
      ULONG STDMETHODCALLTYPE AddRef() { return 1; }
      ULONG STDMETHODCALLTYPE Release() { return 1; }
      HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppObject );
      HRESULT STDMETHODCALLTYPE OnProgress( IFRDocument* document, int percentage, VARIANT_BOOL* ShouldContinue );
      HRESULT STDMETHODCALLTYPE OnWarning( IFRDocument* document, int pageNumber, BSTR recognizerTip, 
          VARIANT_BOOL* ShouldContinue );
      HRESULT STDMETHODCALLTYPE OnPageProcessed( IFRDocument* document, int pageNumber, PageProcessingStageEnum stage );
      void FlushTimer();
      void SetShouldTrackTime( bool _shouldTrackTime );
  private:
      time_t startTime;
      bool shouldTrackTime = true;
  };
   
  // startTime をリセットするには、FlushTimer メソッドを呼び出します
  void CFRDocumentCallback::FlushTimer() {
      time( &startTime );
  }
   
  // この Callback は他のメソッドでも使用される可能性があるため、
  // タイムアウトを無効にする場合は shouldTrackTime を FALSE に設定します
  void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
      shouldTrackTime = _shouldTrackTime;
  }
   
  // 現在時刻と "startTime" の差が一定のしきい値を超えると、
  // 処理は中止されます
  HRESULT STDMETHODCALLTYPE CFRDocumentCallback::OnProgress( IFRDocument* frDocument, 
      int percentage, VARIANT_BOOL* shouldTerminate )
  {
      if( shouldTrackTime ) {
          time_t currentTime;
          time( ¤tTime );
          double seconds = difftime( currentTime, startTime );
          printf( "%f\n", seconds );
          *shouldTerminate = ( seconds > 100 ? VARIANT_TRUE : VARIANT_FALSE );
      }
      return S_OK;
  }
  ```
</Accordion>

このオブジェクトは、次のコード サンプルで使用されます: [EventsHandling](/ja/fine-reader/engine/guided-tour/samples#eventshandling) (Windows および Linux) 。

<div id="remarks">
  ## 注記
</div>

Linux では、Engine オブジェクトがアウトプロセス サーバーとして読み込まれている場合、このインターフェイスは動作しません。

<div id="see-also">
  ## 関連項目
</div>

[FRDocument](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument)

[使用](/ja/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-connectable-objects)
