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.