> ## 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.

# Fonctionnement de Component Synchronizer

> Comment le Component Synchronizer d’ABBYY FineReader Engine connecte les composants visuels (Image Viewer, Text Editor, etc.) afin qu’ils réagissent aux événements comme une seule application OCR sous Windows.

<Warning>
  Les composants visuels sont implémentés dans FRE pour Windows.
</Warning>

[Component Synchronizer](/fr/fine-reader/engine/visual-components-reference/supplementary-objects/componentsynchronizer) est un composant spécial qui met en œuvre une réaction automatique à différents événements au niveau des composants visuels. Vous pouvez connecter plusieurs composants visuels à Component Synchronizer, et ils fonctionneront comme une seule application.

Vous n’avez pas besoin d’utiliser Component Synchronizer avec l’ensemble des composants connectés, mais uniquement avec ceux que vous utilisez. Par exemple, vous pouvez y connecter seulement [Image Viewer](/fr/fine-reader/engine/visual-components-reference/imageviewer) via la propriété ImageViewer et [Text Editor](/fr/fine-reader/engine/visual-components-reference/texteditor) via la propriété TextEditor.

Component Synchronizer ne possède pas d’interface utilisateur. Il n’utilise aucune fonctionnalité interne des composants visuels ; il utilise uniquement l’API COM des composants. Component Synchronizer fonctionne comme décrit ci-dessous.

<div id="when-a-component-is-connected-to-the-synchronizer-through-the-api">
  ## Lorsqu’un composant est connecté au Synchronizer via l’API
</div>

Si un composant ou un objet est connecté à Component Synchronizer via :

<Accordion title="Propriété ImageViewer">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::ImageViewer</strong> est définie sur l’objet <strong>ImageViewer</strong> spécifié, puis les opérations suivantes sont effectuées :

  <table>
    <thead>
      <tr>
        <th>La propriété</th>
        <th>Est définie sur</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IImageViewer::ZoomRectEnabled</strong>
        </td>

        <td>True</td>
      </tr>

      <tr>
        <td>
          <strong>IImageViewer::DocumentProcessingParams</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>IImageViewer::FRPage</strong>
        </td>

        <td>
          La page du <strong>IComponentSynchronizer::Document</strong> ayant pour indice <strong>IComponentSynchronizer::PageIndex</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété ZoomViewer">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::ZoomViewer</strong> est définie sur l’objet <strong>ZoomViewer</strong> spécifié, puis les opérations suivantes sont effectuées :

  <table>
    <thead>
      <tr>
        <th>La propriété</th>
        <th>Est définie sur</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IZoomViewer::SymbolRectEnabled</strong>
        </td>

        <td>True</td>
      </tr>

      <tr>
        <td>
          <strong>IZoomViewer::DocumentProcessingParams</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>IZoomViewer::FRPage</strong>
        </td>

        <td>
          La page du <strong>IComponentSynchronizer::Document</strong> ayant pour indice <strong>IComponentSynchronizer::PageIndex</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété TextEditor">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::TextEditor</strong> est définie sur l’objet <strong>TextEditor</strong> spécifié, puis les opérations suivantes sont effectuées :

  <table>
    <thead>
      <tr>
        <th>La propriété</th>
        <th>Est définie sur</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>ITextEditor::SynthesisParamsForDocument</strong>
        </td>

        <td>
          La valeur de la propriété <strong>SynthesisParamsForDocument</strong> de l’objet <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>ITextEditor::FRPage</strong>
        </td>

        <td>
          La page du <strong>IComponentSynchronizer::Document</strong> ayant pour indice <strong>IComponentSynchronizer::PageIndex</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété TextValidator">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::TextValidator</strong> est définie sur l’objet <strong>TextValidator</strong> spécifié, puis les opérations suivantes sont effectuées :

  <table>
    <thead>
      <tr>
        <th>La propriété</th>
        <th>Est définie sur</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>ITextValidator::SynthesisParamsForDocument</strong>
        </td>

        <td>
          La valeur de la propriété <strong>SynthesisParamsForDocument</strong> de l’objet <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>ITextValidator::FRDocument</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::Document</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété DocumentViewer">
  Dans ce cas, la propriété IComponentSynchronizer::DocumentViewer est définie sur l'objet <strong>DocumentViewer</strong> spécifié, puis les opérations suivantes sont exécutées :

  <table>
    <thead>
      <tr>
        <th>Propriété</th>
        <th>Valeur définie</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IDocumentViewer::FRDocument</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::Document</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>IDocumentViewer::DocumentProcessingParams</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>IDocumentViewer::ActivePage</strong>
        </td>

        <td>
          La page de <strong>IComponentSynchronizer::Document</strong> ayant pour indice <strong>IComponentSynchronizer::PageIndex</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété Document">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::Document</strong> est définie sur l'objet <strong>FRDocument</strong> spécifié, puis les opérations suivantes sont exécutées :

  <table>
    <thead>
      <tr>
        <th>Propriété</th>
        <th>Valeur définie</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IImageViewer::FRPage</strong>

          <br />

          <strong>IZoomViewer::FRPage</strong>

          <br />

          <strong>ITextEditor::FRPage</strong>

          <br />

          <strong>IDocumentViewer::ActivePage</strong>
        </td>

        <td>
          La première page de <strong>IComponentSynchronizer::Document</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>IComponentSynchronizer::PageIndex</strong>
        </td>

        <td>0</td>
      </tr>

      <tr>
        <td>
          <strong>IDocumentViewer::FRDocument</strong>

          <br />

          <strong>ITextValidator::FRDocument</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::Document</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété DocumentProcessingParams">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::DocumentProcessingParams</strong> est définie sur l'objet <strong>DocumentProcessingParams</strong> spécifié, puis les opérations suivantes sont exécutées :

  <table>
    <thead>
      <tr>
        <th>Propriété</th>
        <th>Valeur définie</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IImageViewer::DocumentProcessingParams</strong>

          <br />

          <strong>IZoomViewer::DocumentProcessingParams</strong>

          <br />

          <strong>IDocumentViewer::DocumentProcessingParams</strong>
        </td>

        <td>
          <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>

      <tr>
        <td>
          <strong>ITextEditor::SynthesisParamsForDocument</strong> <br />
          <strong>ITextValidator::SynthesisParamsForDocument</strong>
        </td>

        <td>
          La valeur de la propriété <strong>SynthesisParamsForDocument</strong> de l'objet <strong>IComponentSynchronizer::DocumentProcessingParams</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<Accordion title="Propriété PageIndex">
  Dans ce cas, la propriété <strong>IComponentSynchronizer::PageIndex</strong> est définie sur la valeur spécifiée, puis les opérations suivantes sont exécutées :

  <table>
    <thead>
      <tr>
        <th>Propriété</th>
        <th>Valeur définie</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>
          <strong>IImageViewer::FRPage</strong>

          <br />

          <strong>IZoomViewer::FRPage</strong>

          <br />

          <strong>ITextEditor::FRPage</strong>

          <br />

          <strong>IDocumentViewer::ActivePage</strong>
        </td>

        <td>
          La page de <strong>IComponentSynchronizer::Document</strong> ayant pour indice <strong>IComponentSynchronizer::PageIndex</strong>
        </td>
      </tr>
    </tbody>
  </table>
</Accordion>

<div id="when-a-connected-component-generates-an-event">
  ## Lorsqu'un composant connecté déclenche un événement
</div>

Événements de l'Image Viewer connecté :

<Accordion title="Événement OnMouseButtonUp">
  Si Image Viewer déclenche l'événement [OnMouseButtonUp](/fr/fine-reader/engine/visual-components-reference/iinputevents/onmousebuttonup-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( mouseButton == MBU_LeftButton && ZoomViewer != 0 ) {
   int documentX = 0;
   int documentY = 0;
   ImageViewer->ScreenToDocument( x, y, &documentX, &documentY );
   ZoomViewer->CenterOnDocumentPoint( documentX, documentY );
  }
  ```
</Accordion>

<Accordion title="Événement OnBlockSelectionChanged">
  Si Image Viewer déclenche l'événement [OnBlockSelectionChanged](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onblockselectionchanged-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( selected == VARIANT_TRUE ) {
   if( textEditor != 0 ) {
    textEditor->ShowBlock( blockIndex, NotFound );
   }
  }
  ```
</Accordion>

<Accordion title="Événement OnTableSelected">
  Si Image Viewer déclenche l'événement [OnTableCellsSelected](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/ontablecellsselected-method), Component Synchronizer appelle la méthode [ShowBlock](/fr/fine-reader/engine/visual-components-reference/texteditor/showblock-method) de l'objet [TextEditor](/fr/fine-reader/engine/visual-components-reference/texteditor) avec l'indice du bloc sélectionné et celui de la cellule en bas à droite.
</Accordion>

<Accordion title="Événement OnAfterDblClick">
  Si Image Viewer déclenche l'événement [OnAfterDblClick](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onafterdblclick-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( textEditor != 0 ) {
   textEditor->ActivateOn( blockIndex, x, y );
  }
  ```
</Accordion>

<Accordion title="Événement OnActivePageChanged">
  Si Image Viewer déclenche l'événement [OnActivePageChanged](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onactivepagechanged-method) et que les propriétés ZoomViewer, TextEditor et DocumentViewer de l'objet ComponentSynchronizer ont déjà été définies, la propriété FRPage ou ActivePage du composant correspondant est définie sur la page spécifiée du document.
</Accordion>

<Accordion title="Événement OnSelectTool">
  Si Image Viewer déclenche l'événement [OnSelectTool](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onselecttool-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( ZoomViewer == 0 ) {
   return;
  }
  IFRPagePtr curPage;
  ZoomViewer->get_FRPage( &curPage );
  if( curPage != 0 ) {
   ZoomViewer->put_ActiveTool( selectedTool );
  }
  ```
</Accordion>

<Accordion title="Événement OnOptionsChanged">
  Si Image Viewer déclenche l'événement [OnOptionsChanged](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onoptionschanged-method) et que les propriétés ZoomViewer, DocumentViewer, TextEditor et TextValidator de l'objet ComponentSynchronizer ont déjà été définies, la méthode UpdateOptions des objets ZoomViewer, DocumentViewer, TextEditor et TextValidator est appelée.
</Accordion>

Événements du Zoom Viewer connecté :

<Accordion title="Événement OnVisibleDocumentAreaChanged">
  Si Zoom Viewer déclenche l'événement [OnVisibleDocumentAreaChange](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/onvisibledocumentareachange-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( ImageViewer != 0 ) {
   ImageViewer->put_ZoomRect( visibleRect );
   if( isInFocus ) {
    ImageViewer->ShowDocumentArea( visibleRect );
   }
  }
  ```
</Accordion>

<Accordion title="Événement OnBlockSelectionChanged">
  Si Zoom Viewer déclenche l'événement [OnBlockSelectionChanged](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/onblockselectionchanged-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( selected == VARIANT_TRUE ) {
   if( textEditor != 0 ) {
    textEditor->ShowBlock( blockIndex, NotFound );
   }
  }
  ```
</Accordion>

<Accordion title="Événement OnTableCellsSelected">
  Si Zoom Viewer déclenche l'événement [OnTableCellsSelected](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/ontablecellsselected-method), Component Synchronizer appelle la méthode ShowBlock de l'objet TextEditor avec l'indice du bloc sélectionné et celui de la cellule en bas à droite.
</Accordion>

<Accordion title="Événement OnAfterDblClick">
  Si Zoom Viewer génère l’événement [OnAfterDblClick](/fr/fine-reader/engine/visual-components-reference/iimageviewerevents/onafterdblclick-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( textEditor != 0 ) {
   textEditor->ActivateOn( blockIndex, x, y );
  }
  ```
</Accordion>

<Accordion title="Événement OnActivePageChanged">
  Si Zoom Viewer génère l’événement [OnActivePageChanged](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/onactivepagechanged-method) et que les propriétés ImageViewer, TextEditor et DocumentViewer de l’objet ComponentSynchronizer ont déjà été définies, la propriété FRPage ou ActivePage du composant correspondant est définie sur la page spécifiée du document.
</Accordion>

<Accordion title="Événement OnSelectTool">
  Si Zoom Viewer génère l’événement [OnSelectTool](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/onselecttool-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( ImageViewer == 0 ) {
   return;
  }
  IFRPagePtr curPage;
  ImageViewer->get_FRPage( &curPage );
  if( curPage != 0 ) {
   ImageViewer->put_ActiveTool( selectedTool );
  }
  ```
</Accordion>

<Accordion title="Événement OnOptionsChanged">
  Si Zoom Viewer génère l’événement [OnOptionsChanged](/fr/fine-reader/engine/visual-components-reference/izoomviewerevents/onoptionschanged-method) et que les propriétés ImageViewer, DocumentViewer, TextEditor et TextValidator de l’objet ComponentSynchronizer ont déjà été définies, la méthode UpdateOptions des objets ImageViewer, DocumentViewer, TextEditor et TextValidator est appelée.
</Accordion>

Événements du Document Viewer connecté :

<Accordion title="Événement OnActivePageChanged">
  Si Document Viewer génère l’événement [OnActivePageChanged](/fr/fine-reader/engine/visual-components-reference/idocumentviewerevents/onactivepagechanged-method) et que les propriétés ImageViewer, ZoomViewer et TextEditor de l’objet ComponentSynchronizer ont déjà été définies, la propriété FRPage du composant correspondant est définie sur la page spécifiée du document.
</Accordion>

<Accordion title="Événement OnDocumentChanged">
  Si Document Viewer génère l’événement [OnDocumentChanged](/fr/fine-reader/engine/visual-components-reference/idocumentviewerevents/ondocumentchanged-method) et que les propriétés ImageViewer, ZoomViewer, TextEditor et TextValidator de l’objet ComponentSynchronizer ont déjà été définies :

  * la propriété FRDocument de l’objet TextValidator est définie sur le nouveau document
  * la propriété FRPage des objets ImageViewer, ZoomViewer et TextEditor, ainsi que la propriété ActivePage de l’objet DocumentViewer, sont définies sur la première page du nouveau document
</Accordion>

<Accordion title="Événement OnOptionsChanged">
  Si Document Viewer génère l’événement [OnOptionsChanged](/fr/fine-reader/engine/visual-components-reference/idocumentviewerevents/onoptionschanged-method) et que les propriétés ImageViewer, ZoomViewer, TextEditor et TextValidator de l’objet ComponentSynchronizer ont déjà été définies, la méthode UpdateOptions des objets ImageViewer, ZoomViewer, TextEditor et TextValidator est appelée.
</Accordion>

Événements du Text Editor connecté :

<Accordion title="Événement OnEditorBlockChanged">
  Si Text Editor génère l’événement [OnEditorBlockChanged](/fr/fine-reader/engine/visual-components-reference/itexteditorevents/oneditorblockchanged-method), Component Synchronizer effectue les opérations suivantes :

  1. Si les propriétés ImageViewer et ZoomViewer de l’objet ComponentSynchronizer ont déjà été définies, la méthode SetSelectedBlocksIndices des objets ImageViewer et ZoomViewer est appelée pour le bloc spécifié.
  2. S’il s’agit d’un bloc de tableau, la méthode SetSelectedCells des objets ImageViewer et ZoomViewer est appelée pour la cellule sélectionnée.
  3. Ensuite, la méthode ShowDocumentArea des objets ImageViewer et ZoomViewer est appelée.
</Accordion>

<Accordion title="Événement OnSymbolSelected">
  Si Text Editor génère l’événement [OnSymbolSelected](/fr/fine-reader/engine/visual-components-reference/itexteditorevents/onsymbolselected-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( ZoomViewer != 0 ) {
   ZoomViewer->put_SymbolRect( symbolRect );
  }
  if( ImageViewer != 0 ) {
   ImageViewer->ShowDocumentArea( symbolRect );
  }
  if( ZoomViewer != 0 ) {
   ZoomViewer->ShowDocumentArea( symbolRect );
  }
  ```
</Accordion>

<Accordion title="Événement OnActivePageChanged">
  Si Text Editor génère l’événement [OnActivePageChanged](/fr/fine-reader/engine/visual-components-reference/itexteditorevents/onactivepagechanged-method) et que les propriétés ImageViewer, ZoomViewer et DocumentViewer de l’objet ComponentSynchronizer ont déjà été définies, la propriété FRPage ou ActivePage du composant correspondant est définie sur la page spécifiée du document.
</Accordion>

<Accordion title="Événement OnOptionsChanged">
  Si Text Editor génère l’événement [OnOptionsChanged](/fr/fine-reader/engine/visual-components-reference/itexteditorevents/onoptionschanged-method) et que les propriétés ImageViewer, ZoomViewer, DocumentViewer et TextValidator de l’objet ComponentSynchronizer ont déjà été définies, la méthode UpdateOptions des objets ImageViewer, ZoomViewer, DocumentViewer et TextValidator est appelée.
</Accordion>

Événements du Text Validator connecté :

<Accordion title="Événement OnSymbolSelected">
  Si Text Validator génère l’événement [OnSymbolSelected](/fr/fine-reader/engine/visual-components-reference/itextvalidatorevents/onsymbolselected-method), Component Synchronizer effectue les opérations suivantes :

  ```
  if( ZoomViewer != 0 ) {
   ZoomViewer->put_SymbolRect( symbolRectangle );
  }
  ```
</Accordion>

<Accordion title="Événement OnSelectionChanged">
  Si Text Validator génère l’événement [OnSelectionChanged](/fr/fine-reader/engine/visual-components-reference/itextvalidatorevents/onselectionchanged-method), Component Synchronizer effectue les opérations suivantes :

  ```
  int symbolPos;
  IEditorPosition* nextPosition;
  position->get_Symbol( &symbolPos );
  nextPosition->put_Symbol( symbolPos + length );
  if( textEditor != 0 ) {
   textEditor->SetSelection( position, nextPosition );
  }
  ```
</Accordion>

<Accordion title="Événement OnActivePageChanged">
  Si Text Validator génère l’événement [OnActivePageChanged](/fr/fine-reader/engine/visual-components-reference/itextvalidatorevents/onactivepagechanged-method) et que les propriétés ImageViewer, ZoomViewer, TextEditor et DocumentViewer de l’objet ComponentSynchronizer ont déjà été définies, la propriété FRPage ou ActivePage du composant correspondant est définie sur la page spécifiée du document.
</Accordion>

<Accordion title="Événement OnDocumentChanged">
  Si Text Validator génère l’événement [OnDocumentChanged](/fr/fine-reader/engine/visual-components-reference/itextvalidatorevents/ondocumentchanged-method) et que les propriétés ImageViewer, ZoomViewer, TextEditor et DocumentViewer de l’objet ComponentSynchronizer ont déjà été définies :

  * la propriété FRDocument de l’objet DocumentViewer est définie sur le nouveau document
  * les propriétés FRPage des objets ImageViewer, ZoomViewer et TextEditor, ainsi que la propriété ActivePage de l’objet DocumentViewer, sont définies sur la première page du nouveau document.
</Accordion>

<Accordion title="Événement OnOptionsChanged">
  Si Text Validator génère l’événement [OnOptionsChanged](/fr/fine-reader/engine/visual-components-reference/itextvalidatorevents/onoptionschanged-method) et que les propriétés ImageViewer, ZoomViewer, TextEditor et DocumentViewer de l’objet ComponentSynchronizer ont déjà été définies, la méthode UpdateOptions des objets ImageViewer, ZoomViewer, TextEditor et DocumentViewer est appelée.
</Accordion>

<div id="see-also">
  ## Voir aussi
</div>

[ComponentSynchronizer](/fr/fine-reader/engine/visual-components-reference/supplementary-objects/componentsynchronizer)
