Ajout des propriétés

De RAD Studio
Aller à : navigation, rechercher

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


La classe enveloppe ActiveX implémente les propriétés dans son interface en utilisant des méthodes d'accès en lecture et en écriture. C'est-à-dire que la classe enveloppe a des propriétés COM qui apparaissent sur une interface comme des méthodes accesseur en lecture et/ou écriture. A la différence des propriétés VCL, vous ne voyez pas une déclaration de propriété sur l'interface des propriétés COM. Vous ne voyez que les méthodes qui sont indiquées comme méthodes d'accès à la propriété. Quand vous ajoutez une propriété à l'interface par défaut du contrôle ActiveX, la définition de la classe enveloppe (qui apparaît dans l'unité _TLB mise à jour par l'éditeur de bibliothèques de types) est augmentée d'une ou deux nouvelles méthodes (méthodes accesseur en lecture et/ou écriture) que vous devez implémenter, comme lorsque vous ajoutez une méthode à l'interface, la classe enveloppe est augmentée d'une méthode correspondante que vous devez implémenter. L'ajout de propriétés à l'interface de la classe enveloppe revient donc à ajouter des méthodes : la définition de la classe enveloppe est augmentée de nouvelles implémentations de méthodes squelette à compléter.

Remarque : Pour obtenir des détails sur ce qui apparaît dans l'unité _TLB générée, voir Code généré par l'importation des informations d'une bibliothèque de types.

Par exemple, soit une propriété Caption de type TCaption dans l'objet VCL sous-jacent.

Pour ajouter cette propriété à l'interface de l'objet, entrez ce qui suit quand vous ajoutez une propriété à l'interface via l'éditeur de bibliothèques de types :

 property Caption: TCaption read Get_Caption write Set_Caption;

Delphi ajoute les déclarations suivantes à la classe enveloppe :

 function Get_Caption: WideString; safecall;
 procedure Set_Caption(const Value: WideString); safecall;

De plus, il ajoute les implémentations de méthodes squelette que vous devez compléter :

 function TButtonX.Get_Caption: WideString;
 begin
 end;
 procedure TButtonX.Set_Caption(Value: WideString);
 begin
 end;

Lorsque vous ajoutez cette propriété dans l'éditeur de bibliothèques de types, C++Builder ajoute les déclarations suivantes à la classe enveloppe :

 STDMETHOD(get_Caption(BSTR* Value));
 STDMETHOD(set_Caption(BSTR Value));

C++Builder ajoute également les implémentations de méthodes squelette que vous devez compléter :

 STDMETHODIMP TButtonXImpl::get_Caption(BSTR* Value)
 {
   try
   {
   }
   catch(Exception &e)
   {
     return Error(e.Message.c_str(), IID_IButtonX);
   }
   return S_OK;
 };
 STDMETHODIMP TButtonXImpl::set_Caption(BSTR Value)
 {
   try
   {
   }
   catch(Exception &e)
   {
     return Error(e.Message.c_str(), IID_IButtonX);
   }
   return S_OK;
 };

Typiquement, vous pouvez implémenter ces méthodes par simple délégation au contrôle VCL associé, auquel vous avez accès en utilisant le membre FDelphiControl ou m_VclCtl de la classe enveloppe :

 function TButtonX.Get_Caption: WideString;
 begin
    Result := WideString(FDelphiControl.Caption);
 end;
 
 procedure TButtonX.Set_Caption(const Value: WideString);
 begin
    FDelphiControl.Caption := TCaption(Value);
 end;
 STDMETHODIMP TButtonXImpl::get_Caption(BSTR* Value)
 {
 try
 {
 *Value = WideString(m_VclCtl->Caption).Copy();
 }
 catch(Exception &e)
 {
 return Error(e.Message.c_str(), IID_IButtonX);
 }
 return S_OK;
 };
 STDMETHODIMP TButtonXImpl::set_Caption(BSTR Value)
 {
   try
   {
     m_VclCtl->Caption = AnsiString(Value);
   }
   catch(Exception &e)
   {
     return Error(e.Message.c_str(), IID_IButtonX);
   }
   return S_OK;
 };

Dans certains cas, vous avez besoin d'ajouter du code pour convertir les types de données COM en types natifs. L'exemple précédent le fait en utilisant le transtypage.

Remarque : Comme les méthodes d'une interface Automation sont déclarées safecall, vous n'avez pas besoin d'implémenter le code d'exception COM pour ces méthodes. Le compilateur Delphi gère cela pour vous en générant autour du corps des méthodes safecall le code permettant d'intercepter les exceptions Delphi et de les convertir en structures d'information et en codes de retour des erreurs COM.

Voir aussi