Saltar al contenido principal
Visual Components están implementados en FRE para Windows.
Component Synchronizer es un componente especial que implementa una respuesta automática a distintos eventos en los Visual Components. Puede conectar varios Visual Components al Synchronizer y funcionarán como una sola aplicación. No es necesario usar Component Synchronizer con todo el conjunto de componentes conectados; conecte solo los que utilice. Por ejemplo, puede conectar únicamente Image Viewer mediante la propiedad ImageViewer y Text Editor mediante la propiedad TextEditor. Component Synchronizer no tiene interfaz de usuario. No utiliza ninguna funcionalidad interna de los Visual Components; usa únicamente la API COM de los componentes. Component Synchronizer funciona como se describe a continuación.

Cuando un componente se conecta al Synchronizer a través de la API

Si un componente o un objeto se conecta a Component Synchronizer a través de:
En este caso, la propiedad IComponentSynchronizer::ImageViewer se establece en el objeto ImageViewer especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IImageViewer::ZoomRectEnabledTrue
IImageViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IImageViewer::FRPageLa página de IComponentSynchronizer::Document con el índice IComponentSynchronizer::PageIndex
En este caso, la propiedad IComponentSynchronizer::ZoomViewer se establece en el objeto ZoomViewer especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IZoomViewer::SymbolRectEnabledTrue
IZoomViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IZoomViewer::FRPageLa página de IComponentSynchronizer::Document con el índice IComponentSynchronizer::PageIndex
En este caso, la propiedad IComponentSynchronizer::TextEditor se establece en el objeto TextEditor especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
ITextEditor::SynthesisParamsForDocumentEl valor de la propiedad SynthesisParamsForDocument del objeto IComponentSynchronizer::DocumentProcessingParams
ITextEditor::FRPageLa página de IComponentSynchronizer::Document con el índice IComponentSynchronizer::PageIndex
En este caso, la propiedad IComponentSynchronizer::TextValidator se establece en el objeto TextValidator especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
ITextValidator::SynthesisParamsForDocumentEl valor de la propiedad SynthesisParamsForDocument del objeto IComponentSynchronizer::DocumentProcessingParams
ITextValidator::FRDocumentIComponentSynchronizer::Document
En este caso, la propiedad IComponentSynchronizer::DocumentViewer se establece en el objeto DocumentViewer especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IDocumentViewer::FRDocumentIComponentSynchronizer::Document
IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IDocumentViewer::ActivePageLa página de IComponentSynchronizer::Document con el índice IComponentSynchronizer::PageIndex
En este caso, la propiedad IComponentSynchronizer::Document se establece en el objeto FRDocument especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageLa primera página de IComponentSynchronizer::Document
IComponentSynchronizer::PageIndex0
IDocumentViewer::FRDocument ITextValidator::FRDocumentIComponentSynchronizer::Document
En este caso, la propiedad IComponentSynchronizer::DocumentProcessingParams se establece en el objeto DocumentProcessingParams especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IImageViewer::DocumentProcessingParams IZoomViewer::DocumentProcessingParams IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
ITextEditor::SynthesisParamsForDocument ITextValidator::SynthesisParamsForDocumentEl valor de la propiedad SynthesisParamsForDocument del objeto IComponentSynchronizer::DocumentProcessingParams
En este caso, la propiedad IComponentSynchronizer::PageIndex se establece en el valor especificado, y luego se realizan las siguientes operaciones:
La propiedadSe establece en
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageLa página de IComponentSynchronizer::Document con el índice IComponentSynchronizer::PageIndex

Cuando un componente conectado genera un evento

Eventos del Image Viewer conectado:
Si Image Viewer genera el evento OnMouseButtonUp, Component Synchronizer realiza las siguientes operaciones:
if( mouseButton == MBU_LeftButton && ZoomViewer != 0 ) {
 int documentX = 0;
 int documentY = 0;
 ImageViewer->ScreenToDocument( x, y, &documentX, &documentY );
 ZoomViewer->CenterOnDocumentPoint( documentX, documentY );
}
Si Image Viewer genera el evento OnBlockSelectionChanged, Component Synchronizer realiza las siguientes operaciones:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
Si Image Viewer genera el evento OnTableCellsSelected, Component Synchronizer llama al método ShowBlock del objeto TextEditor con el índice del bloque seleccionado y el índice de la celda de la esquina inferior derecha.
Si Image Viewer genera el evento OnAfterDblClick, Component Synchronizer realiza las siguientes operaciones:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
Si Image Viewer genera el evento OnActivePageChanged y las Propiedades ZoomViewer, TextEditor y DocumentViewer del objeto ComponentSynchronizer ya se han establecido, la propiedad FRPage o ActivePage del componente correspondiente se establece en la página especificada del documento.
Si Image Viewer genera el evento OnSelectTool, Component Synchronizer realiza las siguientes operaciones:
if( ZoomViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ZoomViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ZoomViewer->put_ActiveTool( selectedTool );
}
Si Image Viewer genera el evento OnOptionsChanged y las Propiedades ZoomViewer, DocumentViewer, TextEditor y TextValidator del objeto ComponentSynchronizer ya se han establecido, se llama al método UpdateOptions de los objetos ZoomViewer, DocumentViewer, TextEditor y TextValidator.
Eventos del Zoom Viewer conectado:
Si Zoom Viewer genera el evento OnVisibleDocumentAreaChange, Component Synchronizer realiza las siguientes operaciones:
if( ImageViewer != 0 ) {
 ImageViewer->put_ZoomRect( visibleRect );
 if( isInFocus ) {
  ImageViewer->ShowDocumentArea( visibleRect );
 }
}
Si Zoom Viewer genera el evento OnBlockSelectionChanged, Component Synchronizer realiza las siguientes operaciones:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
Si Zoom Viewer genera el evento OnTableCellsSelected, Component Synchronizer llama al método ShowBlock del objeto TextEditor con el índice del bloque seleccionado y el índice de la celda de la esquina inferior derecha.
Si Zoom Viewer genera el evento OnAfterDblClick, Component Synchronizer realiza las siguientes operaciones:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
Si Zoom Viewer genera el evento OnActivePageChanged y las propiedades ImageViewer, TextEditor y DocumentViewer del objeto ComponentSynchronizer ya se han establecido, la propiedad FRPage o ActivePage del componente correspondiente se establece en la página especificada del documento.
Si Zoom Viewer genera el evento OnSelectTool, Component Synchronizer realiza las siguientes operaciones:
if( ImageViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ImageViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ImageViewer->put_ActiveTool( selectedTool );
}
Si Zoom Viewer genera el evento OnOptionsChanged y las propiedades ImageViewer, DocumentViewer, TextEditor y TextValidator del objeto ComponentSynchronizer ya se han establecido, se llama al método UpdateOptions de los objetos ImageViewer, DocumentViewer, TextEditor y TextValidator.
Eventos del Document Viewer conectado:
Si Document Viewer genera el evento OnActivePageChanged y las propiedades ImageViewer, ZoomViewer y TextEditor del objeto ComponentSynchronizer ya se han establecido, la propiedad FRPage del componente correspondiente se establece en la página especificada del documento.
Si Document Viewer genera el evento OnDocumentChanged y las propiedades ImageViewer, ZoomViewer, TextEditor y TextValidator del objeto ComponentSynchronizer ya se han establecido:
  • la propiedad FRDocument del objeto TextValidator se establece en el nuevo documento
  • las propiedades FRPage de los objetos ImageViewer, ZoomViewer y TextEditor, y la propiedad ActivePage del objeto DocumentViewer, se establecen en la primera página del nuevo documento
Si Document Viewer genera el evento OnOptionsChanged y las propiedades ImageViewer, ZoomViewer, TextEditor y TextValidator del objeto ComponentSynchronizer ya se han establecido, se llama al método UpdateOptions de los objetos ImageViewer, ZoomViewer, TextEditor y TextValidator.
Eventos del Text Editor conectado:
Si Text Editor genera el evento OnEditorBlockChanged, ComponentSynchronizer realiza las siguientes operaciones:
  1. Si las propiedades ImageViewer y ZoomViewer del objeto ComponentSynchronizer ya se han establecido, se llama al método SetSelectedBlocksIndices de los objetos ImageViewer y ZoomViewer para el bloque especificado.
  2. Si es un bloque de la tabla, se llama al método SetSelectedCells de los objetos ImageViewer y ZoomViewer para la celda seleccionada.
  3. A continuación, se llama al método ShowDocumentArea de los objetos ImageViewer y ZoomViewer.
Si Text Editor genera el evento OnSymbolSelected, Component Synchronizer realiza las siguientes operaciones:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRect );
}
if( ImageViewer != 0 ) {
 ImageViewer->ShowDocumentArea( symbolRect );
}
if( ZoomViewer != 0 ) {
 ZoomViewer->ShowDocumentArea( symbolRect );
}
Si el Text Editor genera el evento OnActivePageChanged y las propiedades ImageViewer, ZoomViewer y DocumentViewer del objeto ComponentSynchronizer ya están establecidas, la propiedad FRPage o ActivePage del componente correspondiente se establece en la página especificada del documento.
Si el Text Editor genera el evento OnOptionsChanged y las propiedades ImageViewer, ZoomViewer, DocumentViewer y TextValidator del objeto ComponentSynchronizer ya están establecidas, se llama al método UpdateOptions de los objetos ImageViewer, ZoomViewer, DocumentViewer y TextValidator.
Eventos del Text Validator conectado:
Si el Text Validator genera el evento OnSymbolSelected, Component Synchronizer realiza las siguientes operaciones:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRectangle );
}
Si el Text Validator genera el evento OnSelectionChanged, Component Synchronizer realiza las siguientes operaciones:
int symbolPos;
IEditorPosition* nextPosition;
position->get_Symbol( &symbolPos );
nextPosition->put_Symbol( symbolPos + length );
if( textEditor != 0 ) {
 textEditor->SetSelection( position, nextPosition );
}
Si el Text Validator genera el evento OnActivePageChanged y las propiedades ImageViewer, ZoomViewer, TextEditor y DocumentViewer del objeto ComponentSynchronizer ya están establecidas, la propiedad FRPage o ActivePage del componente correspondiente se establece en la página especificada del documento.
Si el Text Validator genera el evento OnDocumentChanged y las propiedades ImageViewer, ZoomViewer, TextEditor y DocumentViewer del objeto ComponentSynchronizer ya están establecidas:
  • la propiedad FRDocument del objeto DocumentViewer se establece en el nuevo documento
  • la propiedad FRPage de los objetos ImageViewer, ZoomViewer y TextEditor, y la propiedad ActivePage del objeto DocumentViewer, se establecen en la primera página del nuevo documento
Si el Text Validator genera el evento OnOptionsChanged y las propiedades ImageViewer, ZoomViewer, TextEditor y DocumentViewer del objeto ComponentSynchronizer ya están establecidas, se llama al método UpdateOptions de los objetos ImageViewer, ZoomViewer, TextEditor y DocumentViewer.

Consulte también

ComponentSynchronizer