Pular para o conteúdo principal
Esta é uma interface de callback usada para reportar eventos do objeto FRDocument aos listeners. Esta interface é implementada no lado do cliente. Consulte as orientações detalhadas de implementação para sua ferramenta de desenvolvimento em Trabalhando com objetos conectáveis. A seguir, há uma breve descrição:
  • Os usuários de C++ precisarão implementar a interface IFRDocumentEvents, obter um connection point (Windows) e fazer o “advise” do objeto que implementa a interface para o objeto FRDocument. Como a interface deriva da interface IUnknown, o objeto cliente também deve implementar os métodos de IUnknown.
  • Os usuários de Visual Basic que quiserem receber notificações do objeto FRDocument devem declará-lo com WithEvents e implementar procedimentos semelhantes aos seguintes:
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
Um objeto que recebe notificações por meio dos métodos desta interface pode fazer o seguinte na implementação desses métodos:
  • Informar o percentual de carregamento da imagem, de análise de documentos, de reconhecimento, de síntese e de exportação já realizado.
  • Informar sobre a conclusão da análise de documentos, do reconhecimento, da síntese e da exportação.
  • No Windows: processar quaisquer mensagens do sistema para ajudar a evitar que o aplicativo pareça não responder durante operações longas. Isso pode ser útil em aplicativos com interface do usuário.

Métodos

NomeDescrição
OnPageProcessedFornece ao cliente informações sobre a conclusão do processamento de uma página.
OnProgressFornece ao cliente informações sobre a porcentagem aproximada da operação atual (carregamento de imagem, análise, reconhecimento etc.).
OnWarningFornece ao cliente dicas e avisos gerados durante o processamento.

Exemplos

Este exemplo de C++ para Windows mostra como implementar um temporizador que interrompe o processamento se uma chamada de método estiver demorando demais.
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // Implementa os métodos de 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;
};
 
// Chame o método FlushTimer para redefinir startTime
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// Esse callback pode ser usado em outros métodos, 
// portanto, defina shouldTrackTime como FALSE se não quiser mais usar o tempo limite
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// Se a diferença entre a hora atual e "startTime" exceder um determinado limite, 
// o processo será interrompido
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;
}
Este objeto é usado nos exemplos de código a seguir: EventsHandling (Windows e Linux).

Observações

No Linux, esta interface não funciona se o objeto Engine for carregado como servidor em processo separado.

Veja também

FRDocument Trabalhando com objetos conectáveis