EventSinkImp v2.0

EventSinkImp est un utilitaire gratuit (fournit avec le code source) qui permet l'import d'interfaces d'événement basées sur des points de connexion COM afin de faciliter leur utilisation dans des applications Delphi.

EventSinkImp crée les classes et les composants de base proposant des méthodes d'événement en tant qu'événements natifs de Delphi, vous pourrez ainsi facilement écrire des applications devant capturer des événements provenant de serveur COM.

Si vous êtes familier avec VB, EventSinkImp vous permet de réaliser l'équivalent du mécanisme VB Dim WithEvents.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Avant-propos

Testé avec Delphi 5 sous XP pro.
Pour télécharger le logiciel freeware EventSinkImp

version 1.0
Dernière mise à jour, le 11/06/2004

II. Générer un composant

Une fois son installation terminée et avant de l'exécuter, vérifiez le point suivant :
Si vous utilisez une librairie de type que vous avez déjà importé sous Delphi, le fichier xxxx_TLB.pas qui sera créé par EventSinkImp peut être différent de celui créé par Delphi. Certains fichiers peuvent donc ne pas contenir les objets Txxx encapsulant les interfaces. Vous pouvez donc un premier temps effectuer une copie de sauvegarde des fichiers du répertoire Imports de Delphi si toutefois vous utilisez ce nom de répertoire lors de la génération.

Image non disponible

Sélectionnez une librairie de type puis modifiez si nécessaire le chemin d'exports 'Output Folder'. Cochez les événements que vous souhaitez gérer, par défaut le logiciel les sélectionne tous.

III. Détail des options

Image non disponible

L'option Sink References indique comment EventSinkImp fusionne la bibliothèque de type avec les classes d'événement. Vous avez le choix pour fusionner la bibliothèque de type directement dans le module de classe d'événement ou la lier en employant la clause uses.

L'option Sink Component Page indique dans quel onglet de la palette de composants de Delphi sera inséré le nouveau composant généré. Et ce lors de l'installation d'un nouveau composant sous Delphi. EventSinkImp ne prend pas en charge cette opération.

L'option Sink Component Naming indique : La première option enlève le caractère underscore précédant le nom de classe. C'est particulièrement utile lorsque vous importez des interfaces d'événement réalisées en VB. La deuxième option ajoute le nom de serveur au nom des classes d'événement. C'est utile pour éviter que les multiples classes d'événement portent le même nom.

L'option TLibImp Location indique l'emplacement de l'utilitaire TLibImp.exe. Auto Find permet à EventSinkImp de localiser automatiquement le dernier fichier de TLibImp.exe sur votre système. L'ordre de recherche commence par la dernière version de Delphi installée suivie par la version la plus antérieure récente. Décochez Auto Find si vous voulez employer une version spécifique de TLibImp.exe.

L'option User Defined Uses vous permet d'indiquer les unités qui seront automatiquement inclus dans les clauses uses des fichiers de classe collecteur d'événements générés.

L'option Sink Template File indique le template de code désiré que EventSinkImp emploie pour produire des classes d'événement :

  • SinkComponent.pas
    Définit une classe d'événement basée sur TComponent. Il peut donc être installé dans la barre de composant de Delphi. Il vous faut juste ajouter un créer un fichier .dcr contenant l'icône du composant avant de l'installer.
  • SinkObject.pas
    Définit une classe d'événement basée sur TObject. Ceci est habituellement employé dans du code sans interface utilisateur qui prévoit de capturer des événements COM.
  • SinkComponentAsync.pas
    Semblable au template SinkComponentAsync.pas mais permet de recevoir des événements COM d'une façon asynchrone. Ce template produit une classe d'événement qui dispatche des événements COM en utilisant un Thread secondaire permettant un récepteur d'événement non-bloquant.

Une fois ces options renseignées, cliquez sur Ok pour revenir à la fenêtre principale. Et enfin cliquez sur imports, puis terminez l'application par Close.

Vérifiez les fichiers créés dans le répertoire de génération avec ceux précédemment sauvegardés.

IV. Gestion du code généré

Chaque classe collectrice d'événements fournit deux méthodes simples utilisées pour capturer des événements des composants COM :

IV-A. Connect (const Source: IUnknown)

Cette méthode vous connecte au serveur et autorise la classe d'événement à recevoir des événements. Le paramètre Source doit être renseigné avec une référence d'IUnknown valide pointant sur un composant COM instancié.

Si les composants COM instanciés utilisent l'édition des liens à la compilation (early binding), employez la syntaxe suivante pour vous connecter :

 
Sélectionnez
var ServerObj: IObject;
begin
 //crée le composant serveur
 ServerObj := CoObject.Create;

 //Démarre la réception d'événements
 SinkComponent.Connect (ServerObj);
end;

Si les composants COM instanciés utilisent l'édition des liens tardive (late binding), employez la syntaxe suivante pour vous connecter :

 
Sélectionnez
var ServerObj: OleVariant;  //ou Variant
begin
 //crée le composant serveur
 ServerObj := CreateOleObject ('Server.Class');

 //Démarre la réception d'événements
 SinkComponent.Connect (IUnknown(ServerObj));
end;

IV-B. Disconnect

Cette méthode vous déconnecte, i.e. le programme arrête de recevoir des événements du composant serveur. Souvenez-vous que vous n'avez pas besoin d'appeler la méthode Disconnect car la déconnexion se fait automatiquement lorsque votre composant collecteur est détruit par la méthode .Free.

Vous pouvez cependant, appeler cette méthode explicitement si vous voulez contrôler le moment où vous souhaitez ou non recevoir des événements du composant serveur.

V. Programme source de démonstration

Vous trouverez quelque démonstration de cet outil ici

Voir aussi l'article, mise en œuvre et utilisation dans une application Delphi de la gestion d'événements d'un serveur COM.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de www.developpez.com et reste la propriété exclusive de son auteur. La licence d'utilisation Open Content (http://opencontent.org/opl.shtml) vous permet d'utiliser librement les documents publiés sur mon espace personnel à condition de mentionner clairement le nom de son auteur avec un lien sur mon espace personnel de ce site et de garder son caractère « Open Content ».