跳轉到主要內容
Visual Components 是在 Windows 版 FRE 中實作的。
Component Synchronizer 是一種特殊元件,會對 Visual Components 中發生的各種事件自動作出回應。您可以將多個 Visual Components 連接到 Synchronizer,讓它們像單一應用程式一樣運作。 您無需將整組元件全部連接到 Component Synchronizer,只要連接您實際會用到的元件即可。例如,您可以僅透過 ImageViewer 屬性將 Image Viewer 連接至其中,並透過 TextEditor 屬性將 Text Editor 連接至其中。 Component Synchronizer 沒有使用者介面。它不使用 Visual Components 的任何內部功能,而只使用這些元件的 COM API。Component Synchronizer 的運作方式如下。

當元件透過 API 連線至 Synchronizer 時

如果元件或物件透過以下屬性連線至 Component Synchronizer:
在此情況下,IComponentSynchronizer::ImageViewer 屬性會設為指定的 ImageViewer 物件,接著會執行下列操作:
屬性設為
IImageViewer::ZoomRectEnabledTrue
IImageViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IImageViewer::FRPageIComponentSynchronizer::Document 中索引為 IComponentSynchronizer::PageIndex 的頁面
在此情況下,IComponentSynchronizer::ZoomViewer 屬性會設為指定的 ZoomViewer 物件,接著會執行下列操作:
屬性設為
IZoomViewer::SymbolRectEnabledTrue
IZoomViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IZoomViewer::FRPageIComponentSynchronizer::Document 中索引為 IComponentSynchronizer::PageIndex 的頁面
在此情況下,IComponentSynchronizer::TextEditor 屬性會設為指定的 TextEditor 物件,接著會執行下列操作:
屬性設為
ITextEditor::SynthesisParamsForDocumentIComponentSynchronizer::DocumentProcessingParams 物件的 SynthesisParamsForDocument 屬性值
ITextEditor::FRPageIComponentSynchronizer::Document 中索引為 IComponentSynchronizer::PageIndex 的頁面
在此情況下,IComponentSynchronizer::TextValidator 屬性會設為指定的 TextValidator 物件,接著會執行下列操作:
屬性設為
ITextValidator::SynthesisParamsForDocumentIComponentSynchronizer::DocumentProcessingParams 物件的 SynthesisParamsForDocument 屬性值
ITextValidator::FRDocumentIComponentSynchronizer::Document
在此情況下,IComponentSynchronizer::DocumentViewer 屬性會設為指定的 DocumentViewer 物件,接著會執行下列操作:
屬性設為
IDocumentViewer::FRDocumentIComponentSynchronizer::Document
IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IDocumentViewer::ActivePageIComponentSynchronizer::Document 中索引為 IComponentSynchronizer::PageIndex 的頁面
在此情況下,IComponentSynchronizer::Document 屬性會設為指定的 FRDocument 物件,接著會執行下列操作:
屬性設為
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageIComponentSynchronizer::Document 中的第一頁
IComponentSynchronizer::PageIndex0
IDocumentViewer::FRDocument ITextValidator::FRDocumentIComponentSynchronizer::Document
在此情況下,IComponentSynchronizer::DocumentProcessingParams 屬性會設為指定的 DocumentProcessingParams 物件,接著會執行下列操作:
屬性設為
IImageViewer::DocumentProcessingParams IZoomViewer::DocumentProcessingParams IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
ITextEditor::SynthesisParamsForDocument ITextValidator::SynthesisParamsForDocumentIComponentSynchronizer::DocumentProcessingParams 物件的 SynthesisParamsForDocument 屬性值
在此情況下,IComponentSynchronizer::PageIndex 屬性會設為指定的值,接著會執行下列操作:
屬性設為
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageIComponentSynchronizer::Document 中索引為 IComponentSynchronizer::PageIndex 的頁面

當已連接的元件產生事件時

已連接的 Image Viewer 事件:
如果 Image Viewer 產生 OnMouseButtonUp 事件,Component Synchronizer 會執行下列操作:
if( mouseButton == MBU_LeftButton && ZoomViewer != 0 ) {
 int documentX = 0;
 int documentY = 0;
 ImageViewer->ScreenToDocument( x, y, &documentX, &documentY );
 ZoomViewer->CenterOnDocumentPoint( documentX, documentY );
}
如果 Image Viewer 產生 OnBlockSelectionChanged 事件,Component Synchronizer 會執行下列操作:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
如果 Image Viewer 產生 OnTableCellsSelected 事件,Component Synchronizer 會以選取的 Block 索引和右下方儲存格索引,呼叫 TextEditor 物件的 ShowBlock 方法。
如果 Image Viewer 產生 OnAfterDblClick 事件,Component Synchronizer 會執行下列操作:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
如果 Image Viewer 產生 OnActivePageChanged 事件,且 ComponentSynchronizer 物件的 ZoomViewer、TextEditor、DocumentViewer 屬性已設定,則對應元件的 FRPage 或 ActivePage 屬性會設為文件中指定的頁面。
如果 Image Viewer 產生 OnSelectTool 事件,Component Synchronizer 會執行下列操作:
if( ZoomViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ZoomViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ZoomViewer->put_ActiveTool( selectedTool );
}
如果 Image Viewer 產生 OnOptionsChanged 事件,且 ComponentSynchronizer 物件的 ZoomViewer、DocumentViewer、TextEditor、TextValidator 屬性已設定,則會呼叫 ZoomViewer、DocumentViewer、TextEditor、TextValidator 物件的 UpdateOptions 方法。
已連接的 Zoom Viewer 事件:
如果 Zoom Viewer 產生 OnVisibleDocumentAreaChange 事件,Component Synchronizer 會執行下列操作:
if( ImageViewer != 0 ) {
 ImageViewer->put_ZoomRect( visibleRect );
 if( isInFocus ) {
  ImageViewer->ShowDocumentArea( visibleRect );
 }
}
如果 Zoom Viewer 產生 OnBlockSelectionChanged 事件,Component Synchronizer 會執行下列操作:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
如果 Zoom Viewer 產生 OnTableCellsSelected 事件,Component Synchronizer 會以選取的 Block 索引和右下方儲存格索引,呼叫 TextEditor 物件的 ShowBlock 方法。
如果 Zoom Viewer 觸發 OnAfterDblClick 事件,Component Synchronizer 會執行下列操作:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
如果 Zoom Viewer 觸發 OnActivePageChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、TextEditor 和 DocumentViewer 屬性都已設定,則會將對應 component 的 FRPage 或 ActivePage 屬性設為文件中指定的頁面。
如果 Zoom Viewer 觸發 OnSelectTool 事件,Component Synchronizer 會執行下列操作:
if( ImageViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ImageViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ImageViewer->put_ActiveTool( selectedTool );
}
如果 Zoom Viewer 觸發 OnOptionsChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、DocumentViewer、TextEditor 和 TextValidator 屬性都已設定,則會呼叫 ImageViewer、DocumentViewer、TextEditor 和 TextValidator 物件的 UpdateOptions 方法。
已連接的 Document Viewer 事件:
如果 Document Viewer 觸發 OnActivePageChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer 和 TextEditor 屬性都已設定,則會將對應 component 的 FRPage 屬性設為文件中指定的頁面。
如果 Document Viewer 觸發 OnDocumentChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、TextEditor 和 TextValidator 屬性都已設定:
  • TextValidator 物件的 FRDocument 屬性會設為新文件
  • ImageViewer、ZoomViewer 和 TextEditor 物件的 FRPage 屬性,以及 DocumentViewer 物件的 ActivePage 屬性,會設為新文件的第一頁
如果 Document Viewer 觸發 OnOptionsChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、TextEditor 和 TextValidator 屬性都已設定,則會呼叫 ImageViewer、ZoomViewer、TextEditor 和 TextValidator 物件的 UpdateOptions 方法。
已連接的 Text Editor 事件:
如果 Text Editor 觸發 OnEditorBlockChanged 事件,ComponentSynchronizer 會執行下列操作:
  1. 如果 ComponentSynchronizer 物件的 ImageViewer 和 ZoomViewer 屬性都已設定,則會針對指定的 Block 呼叫 ImageViewer 和 ZoomViewer 物件的 SetSelectedBlocksIndices 方法。
  2. 如果是 table block,則會針對所選儲存格呼叫 ImageViewer 和 ZoomViewer 物件的 SetSelectedCells 方法。
  3. 接著會呼叫 ImageViewer 和 ZoomViewer 物件的 ShowDocumentArea 方法。
如果 Text Editor 觸發 OnSymbolSelected 事件,Component Synchronizer 會執行下列操作:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRect );
}
if( ImageViewer != 0 ) {
 ImageViewer->ShowDocumentArea( symbolRect );
}
if( ZoomViewer != 0 ) {
 ZoomViewer->ShowDocumentArea( symbolRect );
}
如果 Text Editor 觸發 OnActivePageChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、DocumentViewer 屬性均已設定,則對應元件的 FRPage 或 ActivePage 屬性會設為文件中指定的頁面。
如果 Text Editor 觸發 OnOptionsChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、DocumentViewer、TextValidator 屬性均已設定,則會呼叫 ImageViewer、ZoomViewer、DocumentViewer、TextValidator 物件的 UpdateOptions 方法。
已連接的 Text Validator 事件:
如果 Text Validator 觸發 OnSymbolSelected 事件,Component Synchronizer 會執行下列操作:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRectangle );
}
如果 Text Validator 觸發 OnSelectionChanged 事件,Component Synchronizer 會執行下列操作:
int symbolPos;
IEditorPosition* nextPosition;
position->get_Symbol( &symbolPos );
nextPosition->put_Symbol( symbolPos + length );
if( textEditor != 0 ) {
 textEditor->SetSelection( position, nextPosition );
}
如果 Text Validator 觸發 OnActivePageChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、TextEditor、DocumentViewer 屬性均已設定,則對應元件的 FRPage 或 ActivePage 屬性會設為文件中指定的頁面。
如果 Text Validator 觸發 OnDocumentChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、TextEditor、DocumentViewer 屬性均已設定:
  • DocumentViewer 物件的 FRDocument 屬性會設為新文件
  • ImageViewer、ZoomViewer 和 TextEditor 物件的 FRPage 屬性,以及 DocumentViewer 物件的 ActivePage 屬性,會設為新文件的第一頁
如果 Text Validator 觸發 OnOptionsChanged 事件,且 ComponentSynchronizer 物件的 ImageViewer、ZoomViewer、TextEditor、DocumentViewer 屬性均已設定,則會呼叫 ImageViewer、ZoomViewer、TextEditor、DocumentViewer 物件的 UpdateOptions 方法。

另請參閱

ComponentSynchronizer