Passer au contenu principal
Il s’agit d’une interface de rappel utilisée pour transmettre les événements de l’objet FRDocument aux écouteurs. Cette interface est implémentée côté client. Consultez les conseils d’implémentation détaillés pour votre outil de développement dans utilisation des objets connectables. Une brève description est donnée ci-dessous :
  • Les utilisateurs de C++ devront implémenter l’interface IFRDocumentEvents, obtenir un point de connexion (Windows) et « advise » l’objet implémentant l’interface à l’objet FRDocument. Comme l’interface dérive de l’interface IUnknown, l’objet client doit également implémenter les méthodes d’IUnknown.
  • Les utilisateurs de Visual Basic qui souhaitent recevoir des notifications de l’objet FRDocument doivent le déclarer avec WithEvents et implémenter des procédures semblables à celles-ci :
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
Un objet recevant des notifications via les méthodes de cette interface peut effectuer les opérations suivantes dans l’implémentation de ces méthodes :
  • Signaler le pourcentage de chargement de l’image, d’analyse de documents, de reconnaissance, de synthèse et d’export effectués.
  • Signaler des informations sur l’analyse de documents, la reconnaissance, la synthèse et l’export terminés.
  • Sous Windows : traiter les messages système afin d’éviter que l’application ne paraisse ne plus répondre pendant les opérations longues. Cela peut être utile dans les applications dotées d’une interface utilisateur.

Méthodes

NomDescription
OnPageProcessedFournit au client des informations sur l’achèvement du traitement de la page.
OnProgressFournit au client des informations sur le pourcentage approximatif de l’opération en cours (chargement de l’image, analyse, reconnaissance, etc.).
OnWarningFournit au client des conseils et des avertissements survenus pendant le traitement.

Exemples

Cet exemple C++ pour Windows montre comment implémenter un temporisateur qui interrompt le traitement si un appel de méthode prend trop de temps.
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // Implémente les méthodes 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;
};
 
// Appelez la méthode FlushTimer pour réinitialiser startTime
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// Ce callback peut être utilisé dans d'autres méthodes, 
// définissez donc shouldTrackTime sur FALSE si vous ne voulez plus utiliser le délai d'expiration
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// Si la différence entre l'heure actuelle et "startTime" dépasse un certain seuil, 
// le traitement sera interrompu
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;
}
Cet objet est utilisé dans les exemples de code suivants : EventsHandling (Windows et Linux).

Remarques

Sous Linux, cette interface ne fonctionne pas si l’objet Engine est chargé comme serveur hors processus.

Voir aussi

FRDocument Utilisation des objets connectables