Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Créer un composant

Pourquoi créer un composant ?

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.


Présentation du composant

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.


Créer votre propre composant pour Delphi

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.


unit LabelLien;

interface


uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;


type

TLabelLien = class(TLabel)
private
{ Déclarations privées }
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
published
{ Déclarations publiées }
end;
procedure Register; implementation procedure Register;
begin
RegisterComponents('Delphipage', [TLabelLien]);
end;
end.

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.

procedure Register;
begin
RegisterComponents('Delphipage', [TLabelLien]);
end;

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.

Visibilité
Description
Rôle
Private
Accessible uniquement au code de l’unité où est définie la classe. Masquer les détails
d’implémentation.
Protected
Accessible au code d'une ou des unités où sont définis la classe et ses descendants. Définition de l’interface avec le concepteur des composants.
Public
Accessible à tout le code. Définition de l’interface d’exécution.
Published
Accessible à tout le code et accessible depuis l’inspecteur d’objets. Enregistré dans un fichier fiche. Définition de l’interface de
conception.

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.

public
{ Déclarations publiques }
constructor
Create(AOwner:TComponent); override;
...

constructor
TLabelLien.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
Font.Color:=clBlue;
Font.Style:=[fsUnderline];
Cursor:=crHandPoint;
end;

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.

private
{ Déclarations privées }
FAdresse:string;
published
{ Déclarations publiées }
property Adresse:string read FAdresse write FAdresse nodefault;
end;

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é.

type
TTypeLien = (URL,MAIL);
TLabelLien = class(TLabel)
private
{ Déclarations privées }
FTypeLien:TTypeLien;
...
published
{ Déclarations publiées }
property TypeLien:TTypeLien read FTypeLien write FTypeLien default URL;
end;


"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").

protected
{ Déclarations protégées }
procedure Click; override;
...

procedure TLabelLien.Click;
var St:string;
begin
inherited;
case TypeLien of
URL: St:=FAdresse;
MAIL: St:='mailto:'+FAdresse;
end;
ShellExecute(GetDesktopWindow,'open',PChar(St),nil,nil,SW_SHOWNORMAL);
end;

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

{$R 'monfichier.dcr'}


Distribuer votre composant

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.

Créer un composant    [ 01-01-2004 ]
 Exemple de création d'un composant TLabelLien.
Télécharger :  [1 Ko] [Télécharger tlabellien.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Tous droits réservés - Contacts
Haut de la page