Classe ECLScreenReco

La classe ECLScreenReco est le moteur du système de reconnaissance d'écran de la bibliothèque de classes Host Access. Elle contient les méthodes d'ajout et de suppression de descriptions d'écrans. Elle contient également la logique permettant de reconnaître ces écrans et de rappeler de manière asynchrone votre code de descripteur pour ces écrans.

Considérez un objet de la classe ECLScreenReco comme un ensemble de reconnaissance unique. L'objet peut avoir plusieurs objets ECLPS qu'il surveille pour les écrans, plusieurs écrans à rechercher et plusieurs points de rappel à appeler lorsqu'il voit un écran dans l'un des objets ECLPS.

Tout ce que vous avez à faire est de configurer vos objets ECLScreenReco au démarrage de votre application, et lorsqu'un écran apparaît dans un ECLPS que vous souhaitez surveiller, votre code sera appelé par ECLScreenReco. Vous n'avez absolument aucune démarche à faire pour surveiller les écrans !

Voici un exemple d'implémentation courante :

class MyApp { ECLPS myECLPS('A'); // My main HACL PS object ECLScreenReco myScreenReco(); // My screen reco object ECLScreenDesc myScreenDesc(); // My screen descriptor MyRecoCallback myCallback(); // My GUI handler MyApp() { // Save the number of fields for below ECLFieldList *fl = myECLPS.GetFieldList() Fl->Refresh(); int numFields = fl->GetFieldCount(); // Set up my HACL screen description object. Say the screen // is identified by a cursor position, a key word, and the // number of fields myScreenDesc.AddCursorPos(23,1); myScreenDesc.AddString("LOGON"); myScreenDesc.AddNumFields(numFields); 
 // Set up HACL screen reco object, it will begin monitoring here myScreenReco.AddPS(myECLPS); myScreenReco.RegisterScreen(&myScreenDesc, &myCallback); } MyApp() { myScreenReco.UnregisterScreen(&myScreenDesc, &myCallback); myScreenReco.RemovePS(&eclPS); } public void showMainGUI() { // Show the main application GUI, this is just a simple example } // ECLRecoNotify-derived inner class (the "callback" code) class MyRecoCallback public: ECLRecoNotify { public: void NotifyEvent(ECLScreenDesc *sd, ECLPS *ps) { // GUI code here for the specific screen // Maybe fire a dialog that front ends the screen } public void NotifyError(ECLScreenDesc *sd, ECLPS *ps, ECLErr e) { // Error handling } 
public void NotifyStop(ECLScreenDesc *sd, ECLPS *ps, int Reason) { // Possible stop monitoring, not essential } } } int main() { MyApp app = new MyApp(); app.showMainGUI(); }