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