1 Personnaliser un composant 1.1 Intérêt 1.2 Différence entre

Transcription

1 Personnaliser un composant 1.1 Intérêt 1.2 Différence entre
1 Personnaliser un composant
1.1 Intérêt
Qu’il s’agisse de créer un nouveau composant ou de personnaliser un composant déjà existant, c’est la
nature même du travail avec Delphi. Delphi est basé sur le concept de réemploi des composants. Plus les
composants sont gros et facilement interfaçables les uns avec les autres, plus vous construisez
rapidement votre application. Il devient rapidement utile de pouvoir mettre dans la palette de
composants ceux que vous utilisez souvent et que vous devez toujours personnaliser de la même façon.
De même, pour les composants qui nécessitent du code. Coder ces modifications dans un nouveau
composant permet un gain de temps dès la seconde réutilisation du composant. De plus, cela permet de
ne maintenir qu’un seul code.
1.2 Différence entre créer et personnaliser
Dans Delphi un composant est un objet qui a pour ancêtre TComponent. Un composant peut être
modifié via l’inspecteur d’objet. Cette opération consiste à partir d’un composant déjà existant en
modifiant certaines de ses propriétés ou événements au moment de sa création.
Créer un composant consiste à partir de zéro, c'est-à-dire créer une nouvelle classe héritant de la classe
Tcomponent. Alors que personnaliser consiste à hériter d’un composant déjà existant. Personnaliser un
composant est évidemment plus simple car il suffit d’initialiser les propriétés déjà existantes du
composant. L’avantage de personnaliser un composant déjà existant, c’est que vous n’avez pas besoin
de vous occuper de son comportement graphique, cette partie est déjà prise en compte par la classe dont
hérite votre composant.
1.3 Personnaliser les propriétés
Cela signifie que la seule action que vous allez faire est de changer la valeur de certaines propriétés du
nouveau composant. On appelle ces modifications : personnaliser les propriétés d’un composant. Cette
action s’effectue dans le constructeur du composant.
Le but est d’avoir dans la palette un composant OkBitBtn qui est un bouton OK avec l’icône check vert,
ainsi qu’un libellé Valider.
Dans le menu : Fichier/Nouveau/Autre/Projets Delphi / Fichiers Delphi / Composant.
Delphi XE7 – réalisation ALAIN WEBER
Page 1 / 9
Choisir TBitBtn comme ancêtre.
Renseignez les zones d’édition comme dans la figure ci-dessous. L'unité aura pour nom OKBitBtn, la
classe TokBitBtn et le fichier OKBitBtn.pas. Le répertoire D:\DATA\DCL\ contiendra tous vos
composants. Validez en cliquant sur le bouton Terminer.
C’est la partie de déclaration de la classe qui nous intéresse plus particulièrement.
TOkBitBtn = class(TBitBtn)
private
{ Déclarations privées }
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
published
{ Déclarations publiées }
end;
Delphi XE7 – réalisation ALAIN WEBER
Page 2 / 9
Dans cet exercice, personnaliser le composant BitBtn pour en faire un OkBitBtn consiste au moment de
sa création à modifier les propriétés Kind et Caption.
TOkBitBtn = class(TBitBtn)
private
{ Déclarations privées }
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
constructor Create( AOwner : TComponent ); override;
published
{ Déclarations publiées }
end;
Dans la partie implémentation définir la méthode Create :
constructor TOkBitBtn.Create( AOwner : TComponent );
begin
inherited Create( AOwner );
Kind := bkOk;
Caption := '&Valider';
end;
override
Redéfinit la méthode de construction.
inherited
Fait appel au constructeur de la classe ancêtre afin de ne pas avoir à refaire toutes les
initialisations propres à la classe. On ne gère ainsi que les modifications que l’on souhaite
apporter. Le reste est géré automatiquement.
Sauvegardez vos modification par
− Fichier / Enregistrer
Puis fermez la fiche
− Fichier / Fermer
Avant de créer le Package Delphi qui contiendra l'unité que nous venons de créer, nous allons modifier
certains paramètres :
− Outils > Options > Options d'environnement > Options Delphi > Bibliothèque
− Ajouter ';D:\Data\dcl\Win32\Debug' à Chemin des bibliothèques
Noter le répertoire de sortie des packages qui peut être modifié si besoin est
Delphi XE7 – réalisation ALAIN WEBER
Page 3 / 9
Nous allons maintenant créer un projet de type paquet (Package) Delphi qui contiendra l'unité que nous
venons de créer..
Nouveau / Package – Delphi
− Fichier / Enregistrer le projet sous : d:\Data\dcl\PkgDemo.dproj
− Projet / Ajouter au projet
Choisir OKBitBtn.pas
Répondre OUI au message suivant :
Cette action modifie la balise <FrameworkType> du fichier PkgDemo.dproj de format xml dont la
valeur passe de None à VCL
Dans la fenêtre Gestionnaire de projet :
− Cliquer avec le bouton droit de la souris sur PkgDemo.bpl
− Choisir Installer
Par défaut le fichier est enregistré sous (windows XP) :
C:\Documents and Settings\All Users\Docu
ments\RAD Studio\9.0\Bpl\ PkgDemo.bpl
Voir ci avant dans les options d'environnement pour modifier ce chemin.
Vous pouvez vérifier que le composant OkBitbtn se trouve bien dans la palette de composants sous la
rubrique Samples lorsqu'un projet vcl est activé. Vous pouvez faire quelques tests.
Delphi XE7 – réalisation ALAIN WEBER
Page 4 / 9
1.4 Création de l’icône du composant
L'éditeur d'image n'étant plus fourni en standard, Nous utilisons donc celui qu'Embarcadero conseille en
FreeWare : http://www.wilsonc.demon.co.uk/d10resourceeditor.htm (xn_resourceeditor_setup.exe)
Lancer le programme XN Ressource Editor.
− File/New
− Ressource/Add Ressource/Bitmap
− Renommer 1 en TOKBITBTN
− Passer l'image en 24 x 24 pixels avec Pixel Format à 4 bit
− Dessiner l'image
−
−
−
−
Sauvegarder l'image dans le même répertoire que l'unité
File/Save As
D:\Data\Dcl\OKBitBtn.dcr
Fermer le programme XN Ressource Editor
Dans Delphi
− Si besoin rouvrir le projet PkgDemo
− Projet/ Voir le source
− Ajouter la ligne {$R 'OKBitBtn.dcr'} à l'endroit précisé dans l'extrait montré ci -dessous
package PkgDemo;
{$R *.res}
{$R 'OKBitBtn.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
…
Dans la fenêtre Gestionnaire de projet :
− Cliquer avec le bouton droit de la souris sur PkgDemo.bpl
− Choisir Désinstaller
− Cliquer avec le bouton droit de la souris sur PkgDemo.bpl
− Choisir Installer
Delphi XE7 – réalisation ALAIN WEBER
Page 5 / 9
1.5 Personnaliser les événements
Nous avons vu la délégation qui est le système utilisé par Delphi pour passer la main à l’utilisateur en
réponse à un événement. Lorsque ce code est répétitif, il est possible de l’encapsuler pour pouvoir le
réutiliser sans être obligé à chaque fois de le réécrire. C’est le cas du composant DragDropImage que
nous allons créer. Ce composant comme son nom l’indique permet via une opération de Drag and Drop
d’afficher une image. L'objectif est de glisser le nom d'un fichier image BMP sur un composant Image
et que celui-ci soit chargé et affiché automatiquement. Ceci sera possible en surchargeant les
événements "drag & drop". C’est une opération que l’on va effectuer en deux temps. On commence par
vérifier le comportement du composant dans un projet. Ensuite on va créer ce composant en reprenant le
code écrit dans ce projet.
COMPOSANTS
TForm1
PROPRIETES
OnActivate = FormActivate
COMMENTAIRES
TFileListBox
Name = FileListBox1
DragMode = dmAutomatic
Mask = '*.BMP'
TDirectoryListBox
FileList = FileListBox1
Relie les composants DirectoryListBox et FileListBox
TImage
Width = 240
Height = 240
Stretch = True
OnDragDrop = Image1DragDrop
OnDragOver = Image1DragOver
Ces propriétés ne sont justifiées que pour les images
exemples fournies par Embarcadero d'un format de 120
x 120
CODE
procedure TForm1.FormActivate(Sender: TObject);
begin
DirectoryListBox1.Directory := 'D:\' ;
end;
DESCRIPTION
Déclenché à l'activation de la fiche pour initialiser une
propriété inaccessible en conception
procedure TForm1.Image1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TFileListBox;
end;
procedure TForm1.Image1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
(Sender as Timage).Picture.LoadFromFile
((Source as TFileListBox).FileName );
end;
En donnant à Accept la valeur True ou False, on décide
ou non d’accepter le lâcher sur le composant. Ici on
indique que le lâcher est autorisé sur Image1 uniquement
si le composant source est un composant TfileListBox.
Vous êtes prêts à exécuter votre programme. Pour vérifier qu’il fonctionne bien, il faut prendre un
fichier ‘BMP’ depuis le composant FileListBox1 et, en maintenant le bouton gauche de la souris
appuyé, déplacer ce fichier sur le composant Image1, puis relâcher le bouton de la souris. Vous devez
voir apparaître votre image dans le composant Image.
Création du composant : La méthode est similaire à la création de notre premier composant.
Delphi XE7 – réalisation ALAIN WEBER
Page 6 / 9
Dans le menu : Fichier/Nouveau/Autre/Projets Delphi / Fichiers Delphi / Composant.
Choisir TImage comme ancêtre.
L'unité aura pour nom DragDropImage, la classe TDragDropImage et
DragDropImage.pas. Le répertoire est toujours D:\DATA\DCL\
le
fichier
Le type ancêtre est TImage, le squelette de notre composant est comme suit :
CODE
TDragDropImage = class(TImage)
private
{ Déclarations privées }
protected
{ Déclarations protégées }
procedure DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DragDrop(Sender, Source: TObject; X, Y: Integer);
public
{ Déclarations publiques }
constructor Create( AOwner : TComponent ); override;
published
{ Déclarations publiées }
end;
L’en-tête des fonctions DragOver et DragDrop ont été reprises depuis le projet précédent dans la
déclaration de la classe Tform1 en modifiant leur nom Image1DragDrop en DragDrop et
Image1DragOver en DragOver. Le constructeur Create devra aussi être redéfini.
Dans la partie implémentation il faut définir les méthodes Create, DragOver et DragDrop, sachant que le
corps de fonction des méthodes DragOver et DragDrop a déjà été écrit correctement dans la classe
Tform1. Il suffit d'effectuer quelques modifications. Penser à inclure l'unité Vcl.FileCtrl qui contient la
classe TFileListBox
CODE
Uses
Vcl.FileCtrl
….
COMMENTAIRES
TfileListBox est décrit dans Vcl.FileCtrl
constructor TDragDropImage.Create( AOwner : TComponent );
begin
inherited Create( AOwner );
OnDragOver := DragOver;
OnDragDrop := DragDrop;
Stretch := True;
end;
procedure TDragDropImage.DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TFileListBox;
end;
procedure TDragDropImage.DragDrop(Sender, Source:
TObject; X, Y: Integer);
begin
Picture.LoadFromFile((Source as TFileListBox).FileName );
end;
Delphi XE7 – réalisation ALAIN WEBER
Page 7 / 9
Sauvegardez vos modification et fermez la fiche par
− Fichier / Enregistrer
− Fichier / Fermer
Rouvrir le projet PkgDemo
− Projet / Voir le source
− Projet / Ajouter au projet
Choisir DragDropImage.pas
Dans la fenêtre Gestionnaire de projet :
− Cliquer avec le bouton droit de la souris sur PkgDemo.bpl
− Choisir Désinstaller
− Cliquer avec le bouton droit de la souris sur PkgDemo.bpl
− Choisir Installer
Pour tester le composant, reprenez la fiche principale du projet précédent, et remplacez le composant
Image par le composant DragDropImage que vous venez de créer.
1.6 La procédure d'enregistrement
Attention! Bien que Delphi soit un langage qui ne tient pas compte de la distinction
minuscules/majuscules, la procédure Register en tient compte et doit être orthographiée avec un
R majuscule.
La procedure Register constitue le point d’entrée qui permet d’enregistrer auprès de Delphi les
composants, éditeurs de propriétés et éditeurs de composants.
Exemple :
procedure Register;
begin
RegisterComponents('Samples', [TDragDropImage]);
end;
On peut trouver à l’intérieur de la procédure Register trois méthodes que nous allons décrire plus
longuement :
RegisterComponents
RegisterPropertyEditor
RegisterComponentEditor
Delphi XE7 – réalisation ALAIN WEBER
Page 8 / 9
Delphi XE7 – réalisation ALAIN WEBER
Page 9 / 9

Documents pareils

Débuter en Delphi - Delphipage

Débuter en Delphi - Delphipage On va passer à la partie programmation du projet. Chaque composant Delphi possède des évènements qui lui est propre (on trouve évidemment des points communs entre composants). Lorsque l'on va cliqu...

Plus en détail

Cours Delphi de BOUNCEUR Ahcène

Cours Delphi de BOUNCEUR Ahcène Renvoie le caractère correspondant à une valeur ASCII spécifiée. Calcule le cosinus d’un angle donné. Convertit une variable monétaire en chaîne. Renvoie la date en cours. Convertit une variable de...

Plus en détail