Pular para o conteúdo principal
Visual Components são implementados no FRE for Windows.
Component Synchronizer é um componente especial que implementa reações automáticas a diferentes eventos nos Visual Components. Você pode conectar vários Visual Components ao Synchronizer, e eles funcionarão como um único aplicativo. Você não precisa usar o Component Synchronizer com todo o conjunto de componentes conectados, mas apenas com aqueles que utiliza. Por exemplo, é possível conectar a ele apenas o Image Viewer por meio da propriedade ImageViewer e o Text Editor por meio da propriedade TextEditor. O Component Synchronizer não tem interface de usuário. Ele não usa nenhum recurso interno dos Visual Components; usa apenas a API COM dos componentes. O Component Synchronizer funciona conforme descrito abaixo.

Quando um componente é conectado ao Synchronizer por meio da API

Se um componente ou objeto for conectado ao Component Synchronizer por meio de:
Nesse caso, a propriedade IComponentSynchronizer::ImageViewer é definida para o objeto ImageViewer especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IImageViewer::ZoomRectEnabledTrue
IImageViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IImageViewer::FRPageA página em IComponentSynchronizer::Document no índice IComponentSynchronizer::PageIndex
Nesse caso, a propriedade IComponentSynchronizer::ZoomViewer é definida para o objeto ZoomViewer especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IZoomViewer::SymbolRectEnabledTrue
IZoomViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IZoomViewer::FRPageA página em IComponentSynchronizer::Document no índice IComponentSynchronizer::PageIndex
Nesse caso, a propriedade IComponentSynchronizer::TextEditor é definida para o objeto TextEditor especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
ITextEditor::SynthesisParamsForDocumentO valor da propriedade SynthesisParamsForDocument do objeto IComponentSynchronizer::DocumentProcessingParams
ITextEditor::FRPageA página em IComponentSynchronizer::Document no índice IComponentSynchronizer::PageIndex
Nesse caso, a propriedade IComponentSynchronizer::TextValidator é definida para o objeto TextValidator especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
ITextValidator::SynthesisParamsForDocumentO valor da propriedade SynthesisParamsForDocument do objeto IComponentSynchronizer::DocumentProcessingParams
ITextValidator::FRDocumentIComponentSynchronizer::Document
Nesse caso, a propriedade IComponentSynchronizer::DocumentViewer é definida para o objeto DocumentViewer especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IDocumentViewer::FRDocumentIComponentSynchronizer::Document
IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
IDocumentViewer::ActivePageA página em IComponentSynchronizer::Document no índice IComponentSynchronizer::PageIndex
Nesse caso, a propriedade IComponentSynchronizer::Document é definida para o objeto FRDocument especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageA primeira página em IComponentSynchronizer::Document
IComponentSynchronizer::PageIndex0
IDocumentViewer::FRDocument ITextValidator::FRDocumentIComponentSynchronizer::Document
Nesse caso, a propriedade IComponentSynchronizer::DocumentProcessingParams é definida para o objeto DocumentProcessingParams especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IImageViewer::DocumentProcessingParams IZoomViewer::DocumentProcessingParams IDocumentViewer::DocumentProcessingParamsIComponentSynchronizer::DocumentProcessingParams
ITextEditor::SynthesisParamsForDocument ITextValidator::SynthesisParamsForDocumentO valor da propriedade SynthesisParamsForDocument do objeto IComponentSynchronizer::DocumentProcessingParams
Nesse caso, a propriedade IComponentSynchronizer::PageIndex é definida para o valor especificado, e as seguintes operações são executadas:
A propriedadeRecebe o valor
IImageViewer::FRPage IZoomViewer::FRPage ITextEditor::FRPage IDocumentViewer::ActivePageA página em IComponentSynchronizer::Document no índice IComponentSynchronizer::PageIndex

Quando um componente conectado dispara um evento

Eventos do Image Viewer conectado:
Se o Image Viewer disparar o evento OnMouseButtonUp, o Component Synchronizer executa as seguintes operações:
if( mouseButton == MBU_LeftButton && ZoomViewer != 0 ) {
 int documentX = 0;
 int documentY = 0;
 ImageViewer->ScreenToDocument( x, y, &documentX, &documentY );
 ZoomViewer->CenterOnDocumentPoint( documentX, documentY );
}
Se o Image Viewer disparar o evento OnBlockSelectionChanged, o Component Synchronizer executa as seguintes operações:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
Se o Image Viewer disparar o evento OnTableCellsSelected, o Component Synchronizer chama o método ShowBlock do objeto TextEditor com o índice do bloco selecionado e o índice da célula inferior direita.
Se o Image Viewer disparar o evento OnAfterDblClick, o Component Synchronizer executa as seguintes operações:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
Se o Image Viewer disparar o evento OnActivePageChanged e as propriedades ZoomViewer, TextEditor e DocumentViewer do objeto ComponentSynchronizer já estiverem definidas, a propriedade FRPage ou ActivePage do componente correspondente será definida para a página especificada do documento.
Se o Image Viewer disparar o evento OnSelectTool, o Component Synchronizer executa as seguintes operações:
if( ZoomViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ZoomViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ZoomViewer->put_ActiveTool( selectedTool );
}
Se o Image Viewer disparar o evento OnOptionsChanged e as propriedades ZoomViewer, DocumentViewer, TextEditor e TextValidator do objeto ComponentSynchronizer já estiverem definidas, o método UpdateOptions dos objetos ZoomViewer, DocumentViewer, TextEditor e TextValidator será chamado.
Eventos do Zoom Viewer conectado:
Se o Zoom Viewer disparar o evento OnVisibleDocumentAreaChange, o Component Synchronizer executa as seguintes operações:
if( ImageViewer != 0 ) {
 ImageViewer->put_ZoomRect( visibleRect );
 if( isInFocus ) {
  ImageViewer->ShowDocumentArea( visibleRect );
 }
}
Se o Zoom Viewer disparar o evento OnBlockSelectionChanged, o Component Synchronizer executa as seguintes operações:
if( selected == VARIANT_TRUE ) {
 if( textEditor != 0 ) {
  textEditor->ShowBlock( blockIndex, NotFound );
 }
}
Se o Zoom Viewer disparar o evento OnTableCellsSelected, o Component Synchronizer chama o método ShowBlock do objeto TextEditor com o índice do bloco selecionado e o índice da célula inferior direita.
Se o Zoom Viewer gerar o evento OnAfterDblClick, o Component Synchronizer executará as seguintes operações:
if( textEditor != 0 ) {
 textEditor->ActivateOn( blockIndex, x, y );
}
Se o Zoom Viewer gerar o evento OnActivePageChanged e as propriedades ImageViewer, TextEditor e DocumentViewer do objeto ComponentSynchronizer já tiverem sido definidas, a propriedade FRPage ou ActivePage do componente correspondente será definida como a página especificada do documento.
Se o Zoom Viewer gerar o evento OnSelectTool, o Component Synchronizer executará as seguintes operações:
if( ImageViewer == 0 ) {
 return;
}
IFRPagePtr curPage;
ImageViewer->get_FRPage( &curPage );
if( curPage != 0 ) {
 ImageViewer->put_ActiveTool( selectedTool );
}
Se o Zoom Viewer gerar o evento OnOptionsChanged e as propriedades ImageViewer, DocumentViewer, TextEditor e TextValidator do objeto ComponentSynchronizer já tiverem sido definidas, o método UpdateOptions dos objetos ImageViewer, DocumentViewer, TextEditor e TextValidator será chamado.
Eventos do Document Viewer conectado:
Se o Document Viewer gerar o evento OnActivePageChanged e as propriedades ImageViewer, ZoomViewer e TextEditor do objeto ComponentSynchronizer já tiverem sido definidas, a propriedade FRPage do componente correspondente será definida como a página especificada do documento.
Se o Document Viewer gerar o evento OnDocumentChanged e as propriedades ImageViewer, ZoomViewer, TextEditor e TextValidator do objeto ComponentSynchronizer já tiverem sido definidas:
  • a propriedade FRDocument do objeto TextValidator será definida como o novo documento
  • as propriedades FRPage dos objetos ImageViewer, ZoomViewer e TextEditor, e a propriedade ActivePage do objeto DocumentViewer, serão definidas como a primeira página do novo documento
Se o Document Viewer gerar o evento OnOptionsChanged e as propriedades ImageViewer, ZoomViewer, TextEditor e TextValidator do objeto ComponentSynchronizer já tiverem sido definidas, o método UpdateOptions dos objetos ImageViewer, ZoomViewer, TextEditor e TextValidator será chamado.
Eventos do Text Editor conectado:
Se o Text Editor gerar o evento OnEditorBlockChanged, o ComponentSynchronizer executará as seguintes operações:
  1. Se as propriedades ImageViewer e ZoomViewer do objeto ComponentSynchronizer já tiverem sido definidas, o método SetSelectedBlocksIndices dos objetos ImageViewer e ZoomViewer será chamado para o bloco especificado.
  2. Se for um bloco de tabela, o método SetSelectedCells dos objetos ImageViewer e ZoomViewer será chamado para a célula selecionada.
  3. Em seguida, o método ShowDocumentArea dos objetos ImageViewer e ZoomViewer será chamado.
Se o Text Editor gerar o evento OnSymbolSelected, o Component Synchronizer executará as seguintes operações:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRect );
}
if( ImageViewer != 0 ) {
 ImageViewer->ShowDocumentArea( symbolRect );
}
if( ZoomViewer != 0 ) {
 ZoomViewer->ShowDocumentArea( symbolRect );
}
Se o Text Editor gerar o evento OnActivePageChanged e as propriedades ImageViewer, ZoomViewer e DocumentViewer do objeto ComponentSynchronizer já tiverem sido definidas, a propriedade FRPage ou ActivePage do componente correspondente será definida para a página especificada do documento.
Se o Text Editor gerar o evento OnOptionsChanged e as propriedades ImageViewer, ZoomViewer, DocumentViewer e TextValidator do objeto ComponentSynchronizer já tiverem sido definidas, o método UpdateOptions dos objetos ImageViewer, ZoomViewer, DocumentViewer e TextValidator será chamado.
Eventos do Text Validator conectado:
Se o Text Validator gerar o evento OnSymbolSelected, o Component Synchronizer executará as seguintes operações:
if( ZoomViewer != 0 ) {
 ZoomViewer->put_SymbolRect( symbolRectangle );
}
Se o Text Validator gerar o evento OnSelectionChanged, o Component Synchronizer executará as seguintes operações:
int symbolPos;
IEditorPosition* nextPosition;
position->get_Symbol( &symbolPos );
nextPosition->put_Symbol( symbolPos + length );
if( textEditor != 0 ) {
 textEditor->SetSelection( position, nextPosition );
}
Se o Text Validator gerar o evento OnActivePageChanged e as propriedades ImageViewer, ZoomViewer, TextEditor e DocumentViewer do objeto ComponentSynchronizer já tiverem sido definidas, a propriedade FRPage ou ActivePage do componente correspondente será definida para a página especificada do documento.
Se o Text Validator gerar o evento OnDocumentChanged e as propriedades ImageViewer, ZoomViewer, TextEditor e DocumentViewer do objeto ComponentSynchronizer já tiverem sido definidas:
  • a propriedade FRDocument do objeto DocumentViewer será definida para o novo documento
  • a propriedade FRPage dos objetos ImageViewer, ZoomViewer e TextEditor e a propriedade ActivePage do objeto DocumentViewer serão definidas para a primeira página do novo documento
Se o Text Validator gerar o evento OnOptionsChanged e as propriedades ImageViewer, ZoomViewer, TextEditor e DocumentViewer do objeto ComponentSynchronizer já tiverem sido definidas, o método UpdateOptions dos objetos ImageViewer, ZoomViewer, TextEditor e DocumentViewer será chamado.

Veja também

ComponentSynchronizer