|
|
Delphi possède de nombreux composants pour vous aider à accomplir des tâches plus facilement et plus rapidement. Parfois, vous serez amener à conçevoir un composant Delphi pour la simple raison que la tâche que vous voulez effecuter n'existe pas dans un composant standard de Delphi. Il sera nécessaire alors pour vous de le créer. Bien entendu, vous pouvez réaliser cette tâche par programmation mais il est parfois plus pratique et plus simple de créer son propre composant. Un autre avantage est que vous pourrez utiliser votre composant de manière visuelle grâce à l'inspecteur d'objet de Delphi.
Dans notre exemple, nous allons créer ou plutôt modifer un composant de type label. Le nom de la classe de notre composant s'appellera TLabelLien. Son but sera de lancer soit le navigateur par défaut soit le logiciel de messagerie par défaut. Le composant ressemblera a un lien hypertexte.
Pour commencer allez dans le menu "Composant" de Delphi puis cliquez sur "Nouveau composant...". Cette fenêtre apparait : Vous devez choisir le type de l'ancêtre, le nom de la classe et la page de la palette (palette de composants) où le composant sera placé. Choix de la classe de base Dans un premier temps, il faut choisir la classe de base, c'est à dire le type de l'ancêtre. Pour bien comprendre et bien choisir, revenons sur ce qu'est un composant. En Delphi, le terme "composant" est employé pour désigner une classe objet qui hérite de la classe TComponent. On peut donc créer un composant Delphi grâce à l'héritage ("héritage" : qui descend de... ou qui dérive de ...). L'ensemble des composants (visuels ou non) Delphi est appelé VCL pour Visual Component Library. Le choix de la classe doit se faire en fonction de la nature du composant que l'on veut créer. La classe que l'on va choisir pour créer un composant doit donc se rapprocher le plus possible d'une classe existante. Si vous voulez créer un composant complètement, c'est à dire qu'il n'existe pas de composant similaire, vous devez tout de même choisir une classe selon ce que qu vous voulez créer. Pour un composant non visuel, vous utiliserez la classe TComponent, pour un composant visuel, utilisez la classe TCustomControl et pour un composant visuel sans ressources Windows, utilisez TGraphicControl. Nous allons choisir la classe TLabel pour le type de l'ancêtre. Vous pouvez remarquer qu'il existe également la classe TCustomLabel. La classe TCustomLabel est la classe de base pour TLabel. Une classe commençant par TCustom possède les propriétés susceptibles d'être utilisées mais celles-ci ne sont pas publiées. Cela signifie que si vous voulez utiliser telle ou telle propriété vous devez les redéclarer dans la partie "published". L'intêret d'utiliser une classe TCustom est d'avoir le choix de mettre ou de ne pas mettre une ou plusieurs propriétés pour un composant. Par exemple, en utilisant comme classe de base TLabel, vous ne pouvez pas "dépublier" (enlever) une ou plusieurs propriétés d'où l'intéret dan ce cas d'utiliser un classe TCustomLabel. Pour le nom de la classe de notre nouveau composant, on choisira TLabelLien. Indiquez le nom de la classe dans la fenêtre ci-dessus. Pour "Page de la palette", mettez par exemple "Delphipage". Puis cliquez sur le bouton "OK". L'éditeur de code s'ouvre alors.
Recencement du composant Pour que l'EDI de Delphi puisse afficher un bouton dans la palette de composants, il lui faut quelques paramètres fournit par la procedure "Register". Celle-ci fait appelle à "RegisterComponents" qui permet de recencer un ou plusieurs (séparer par des virgules) composants.
Dans notre exemple, le composant s'ajoutera dans l'onglet "Delphipage" de la palette de composants Delphi sous le nom de "TLabelLien". Les particularités du code Les différentes parties "private", "protected", "public" et "published" sont appelés contrôle d'accès, appelé également visibilité. La visibilité détermine quel code peut accéder à quelles parties de la classe. En spécifiant la visibilité, vous définissez l’interface de vos composants.
Dans la partie "private", de manière générale, nous mettrons, toutes les variables que l'on a besoin à la réalisation du composant. La partie "protected" sert à modifier la façon dont fonctionne une classe sans rendre apparents ces détails aux développeurs d’applications. La partie "public" permet de déclarer des éléments qui sont sans signification ou inappropriés au moment de la conception, comme les propriétés contenant des informations uniquement disponibles à l’exécution ou accessibles uniquement en lecture. Les propriétés et les événements de l'inspecteur d'objets seront donc déclarés dans la partie "published". Après avoir vu les particularités essentielles du code, Nous allons passer maintenant à la partie programmation de notre composant. Redéfinition du constructeur Lorsque un composant est placé dans une fiche, le constructeur définit les valeurs des propriétés. Lorsque vous redéfinissez un constructeur, le nouveau constructeur doit appeler le constructeur reçu en héritage avant toute autre action. C'est le rôle de "inherited". Ensuite, nous définissons quelques particularités (couleur, style, curseur) à notre composant.
Créer une nouvelle propriété (de type simple) Une propriété permet de définir lors de la phase de conception d'un programme les spécificitées (couleur, taille,...) d'un composant grâce à l'inspecteur d'objets. Il existe plusieurs types de propriétés (simple, énuméré, ensemble, objet, interface et tableau). Pour commencer, nous allons créer une propriété de type simple, c'est à dire que l'utilisateur peut modifier directement cette valeur. Cette propriété sera dans notre cas de type "string" (chaine de caractères) et s'appelera "Adresse". Le rôle de cette propriété est de définir l'adresse (URL ou MAIL) qui sera lancée.
Une propriété n'est pas une variable et ne peut donc pas stocké de données. Il faut alors passer par une variable. Par convention, pour la variable, on ajoute la lettre "F" devant le nom de la propriété. La méthode "read" d'une propriété permet de lire la valeur de la propriété. La méthode "write" d'une propriété permet d'affecter la valeur de la propriété. "nodefault" affecte aucune valeur par défaut à la propriété. Créer une propriété de type énumérée Une propriété de type énumérée apparait comme une liste déroulante montrant toutes les valeurs possibles. Le type de la propriété doit être déclaré avant la classe qui inclut cette propriété.
"default" indique la valeur de la propriété par défaut. Modifier un événement Pour modifier la façon dont un événement agit, il suffit de redéfinir la méthode protégée "Click" (et non l'événement "OnClick").
Créer un bitmap pour le bouton du composant Pour créer un bitmap pour le bouton qui apparaitra dans la palette de composants Delphi, il suffit d'utiliser par exemple l'éditeur d'image de Delphi. Par défaut, c'est à dire lorsque vous ne creez pas de bitmap spécifique à votre composant, Delphi met ce bitmap : Vous devez créer un fichier au format DCR contenant un bitmap au nom du composant (en majuscule) et de dimension 24 X 24 pixels. L'option VGA (16 couleurs) doit être coché. La couleur transparente est la couleur du pixel en bas à gauche. Enregistrez le fichier DCR dans le même chemin que le fichier source du composant. Si votre fichier DCR ne porte pas le même nom que le fichier PAS, vous devez insérer cette ligne de code dans votre fichier PAS après "Implementation" :
Pour distribuez votre composant, vous devez forunir soit le fichier PAS soit le fichier DCU (fichier PAS compilé) ainsi que le fichier DCR. Lorsque vous voulez distribuer plusieurs composants, il est alors plus pratique pour l'installation de ceux-ci de créer un paquet.
|
Tous droits réservés - Contacts |