EventSinkImp v2.0

Laurent Dardenne

EventSinkImp est un utilitaire gratuit (fourni 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. ♪

- Titre : EventSinkImp v2.0

- Auteur : Laurent Dardenne

- Parution : 11 juin 2004

- Public visé :

- Licence : 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Â Â».

Sommaire

- I. Avant-propos

- II. Générer un composant

- III. Détail des options

- IV. Gestion du code généré

- IV-A. Connect (const Source: IUnknown)

- IV-B. Disconnect

- V. Programme source de démonstration

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.

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

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 incluses 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 :

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 :

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.