Utilisation des composants enveloppe

De RAD Studio
Aller à : navigation, rechercher

Remonter à Contrôle d'un objet importé


Si vous avez généré un composant enveloppe pour l'objet serveur, l'écriture de l'application COM n'est pas très différente de celle d'une application contenant des composants VCL. Les événements de l'objet serveur sont déjà encapsulés dans le composant VCL. Il vous suffit juste d'affecter des gestionnaires d'événements, de définir des valeurs de propriétés et d'appeler des méthodes.

Pour utiliser les propriétés, méthodes et événements de l'objet, voir la documentation de l'objet serveur. Le composant enveloppe fournit automatiquement une interface double quand c'est possible. Delphi détermine la forme de la VTable à partir des informations de la bibliothèque de types.

De plus, le nouveau composant hérite de sa classe de base des propriétés et méthodes importantes.

Enveloppes ActiveX

Vous devez toujours utiliser un composant enveloppe pour accueillir des contrôles ActiveX car le composant enveloppe intègre la fenêtre du contrôle dans le modèle VCL.

Le contrôle ActiveX hérite de olectrls.TOleControl des propriétés et méthodes qui vous permettent d'accéder à l'interface sous-jacente ou d'obtenir des informations sur le contrôle. Cependant, la plupart des applications n'en n'ont pas besoin. Vous utilisez à la place le contrôle importé comme vous utiliseriez tout autre contrôle VCL.

Généralement, les contrôles ActiveX proposent une page de propriétés qui vous permet de définir leurs propriétés. Les pages de propriétés sont similaires aux éditeurs que certains composants affichent quand vous double-cliquez dessus dans le concepteur de fiche. Pour afficher la page de propriétés d'un contrôle ActiveX, cliquez dessus avec le bouton droit de la souris et choisissez Propriétés.

La manière dont vous utilisez les contrôles ActiveX importés est déterminée par l'application serveur. Cependant, les contrôles ActiveX utilisent un ensemble standard de notifications quand ils représentent les données d'un champ de base de données. Pour davantage d'informations sur la manière d'accueillir des contrôles ActiveX orientés données, voir olectrls.TOleControl.

Enveloppes des objets Automation

Les enveloppes des objets Automation vous permettent de contrôler comment vous voulez constituer la connexion avec l'objet serveur :

La propriété ConnectKind indique si le serveur est local ou distant et si vous voulez vous connecter avec un serveur en cours d'exécution ou si une nouvelle instance doit être lancée. Pour se connecter avec un serveur distant, vous devez spécifier le nom de la machine en utilisant la propriété RemoteMachineName.

Deuxièmement, une fois la valeur de ConnectKind spécifiée, il y a trois manières de connecter le composant au serveur :

  • Une connexion explicite au serveur en appelant la méthode Connect du composant.
  • Vous pouvez indiquer au composant de se connecter automatiquement avec le serveur au démarrage de votre application en initialisant la propriété AutoConnect à true.
  • Vous n'avez pas besoin de vous connecter explicitement au serveur. Le composant crée automatiquement une connexion quand vous utilisez l'une des propriétés et méthodes du serveur par le biais du composant.

Vous appelez les méthodes ou utilisez les propriétés comme pour tout autre composant :

TServerComponent1.DoSomething;
TServerComponent1->DoSomething();

Il est facile de gérer les événements car vous pouvez utiliser l'inspecteur d'objets pour écrire des gestionnaires d'événements. Toutefois, vous devez faire attention car les gestionnaires d'événements de votre composant ont des paramètres légèrement différents de ceux définis pour les événements de la bibliothèque de types. Plus précisément, les types pointeurs (paramètres var et pointeur d'interface) sont changés en Variants. Vous devez explicitement transtyper les paramètres var dans le type sous-jacent avant de leur affecter une valeur. Les pointeurs d'interface peuvent être convertis au type d'interface approprié en utilisant l'opérateur as.

Par exemple, l'exemple de code suivant est un gestionnaire d'événement pour l'événement OnNewWorkBook de ExcelApplication. Le gestionnaire d'événement a un paramètre qui fournit l'interface d'une autre CoClasse (ExcelWorkbook). Cependant, l'interface n'est pas transmise comme un pointeur d'interface ExcelWorkBook, mais comme un OleVariant.

procedure TForm1.XLappNewWorkbook(Sender: TObject; var Wb:OleVariant);
begin
  { Note how the OleVariant for the interface must be cast to the correct type }
  ExcelWorkbook1.ConnectTo((iUnknown(wb) as ExcelWorkbook));
end;
void _fastcall TForm1::XLappNewWorkbook(TObject *Sender, ExcelWorkbookPtr Wb)
{
ExcelWorkbook1->ConnectTo(Wb);
}

Dans cet exemple, le gestionnaire d'événement affecte le classeur à un composant ExcelWorkbook (ExcelWorkbook1). Cela illustre la manière de connecter un composant enveloppe à une interface existante en utilisant la méthode ConnectTo. La méthode ConnectTo est ajoutée au code généré du composant enveloppe.

Les serveurs qui ont un objet application exposent une méthode Quit pour cet objet afin de permettre aux clients de terminer la connexion. Généralement Quit expose des fonctionnalités équivalentes à l'utilisation du menu Fichier pour la sortie de l'application. Du code pour l'appel de la méthode Quit est généré dans la méthode Disconnect de votre composant. Il est possible d'appeler la méthode Quit sans paramètre. Le composant enveloppe a également une propriété AutoQuit. AutoQuit oblige le contrôleur à appeler Quit quand le composant est libéré. Si vous voulez déconnecter à un autre moment, ou si la méthode Quit nécessite des paramètres, vous devez l'appeler explicitement. Quit apparaît comme méthode publique du composant généré.

Voir aussi