Ajout des événements

De RAD Studio
Aller à : navigation, rechercher

Remonter à Ajout de propriétés, méthodes et événements supplémentaires


Le contrôle ActiveX peut déclencher des événements dans son conteneur de la même manière qu'un objet automation déclenche des événements dans les clients. Ce mécanisme est décrit dans Gestion des événements dans un objet Automation.

Si le contrôle VCL que vous utilisez comme base de votre contrôle ActiveX a des événements publiés, les experts ajoutent automatiquement le support nécessaire à la gestion d'une liste de récepteurs d'événements client à votre classe enveloppe ActiveX et définissent la dispinterface de sortie que les clients doivent implémenter pour répondre aux événements.

Vous ajoutez des événements à cette dispinterface de sortie. Pour ajouter un événement dans l'éditeur de bibliothèques de types, sélectionnez l'interface d'événement et cliquez sur l'icône méthode. Ajoutez ensuite manuellement la liste de paramètres que vous voulez inclure par le biais de la page des paramètres.

Déclarez ensuite une méthode dans votre classe enveloppe qui soit de même type que le gestionnaire de l'événement dans le contrôle VCL sous-jacent. Cela n'est pas généré automatiquement car Delphi ne sait pas quel gestionnaire d'événement vous utilisez :

 procedure KeyPressEvent(Sender: TObject; var Key: Char);

Implémentez cette méthode pour utiliser le récepteur d'événements de l'application hôte, qui est stocké dans le membre FEvents de la classe enveloppe :

 procedure TButtonX.KeyPressEvent(Sender: TObject; var Key: Char);
 var
   TempKey: Smallint;
 begin
     TempKey := Smallint(Key); {cast to an OleAutomation compatible type }
     if FEvents <> nil then
       FEvents.OnKeyPress(TempKey)
     Key := Char(TempKey);
   end;
 void __fastcall TButtonXImpl::KeyPressEvent(TObject *Sender, char &Key)
 {
 short TempKey;
 TempKey = (short)Key;
 Fire_OnKeyPress(&TempKey);
 Key = (short)TempKey;
 };

Remarque : Lors du déclenchement d'événements dans un contrôle ActiveX, vous n'avez pas besoin de parcourir une liste de récepteurs d'événements car le contrôle n'a qu'une seule application hôte. Le processus est plus simple qu'avec la plupart des serveurs Automation.

Enfin, vous devez assigner ce gestionnaire d'événement au contrôle VCL sous-jacent afin qu'il soit appelé quand l'événement se produit. Vous effectuez cette affectation dans la méthode InitializeControl :

 procedure TButtonX.InitializeControl;
 begin
   FDelphiControl := Control as TButton;
   FDelphiControl.OnClick := ClickEvent;
   FDelphiControl.OnKeyPress := KeyPressEvent;
 end;
 void InitializeControl()
 {
   m_VclCtl->OnClick = ClickEvent;
   m_VclCtl->OnKeyPress = KeyPressEvent;
 }

Voir aussi