Partie I : Composants non-visuels


précédentsommairesuivant

Introduction

Pour commencer, nous allons découvrir comment créer des composants non-visuels. Ces composants n'apparaissent qu'en mode design sous forme de petit carré avec une icône. Un exemple très utilisé de composant non-visuels est le TMainMenu.

Certains se diront, en apprenant que l'on va commencer par les composants non-visuels, que cette partie va être très ennuyeuse et auront envie de passer directement à la suivante.
À ceux-là, je répondrai que les composants non-visuels sont aussi utiles que les composants visuels, et qu'ils facilitent souvent des tâches d'une grande complexité. Vous pouvez prendre à titre d'exemple la bibliothèque Indy, dont tous les composants sont non-visuels. Cette bibliothèque est une suite de composants encapsulant des API réseaux.

On s'aperçoit donc que la notion de composant n'est pas liée à la notion de graphisme, puisqu'un composant non-visuel ne dessine rien.

Vous voyez que vous ne vous ennuierez pas durant cette partie, et au contraire, vous découvrirez, peut-être avec enthousiasme, les portes que Delphi nous ouvre vers la souplesse de la création de composants.

I. Qu'est-ce qu'un composant exactement ?

Premièrement, il semble important de faire le point sur ce sujet.

I-A. Définition

Un composant, au sens où on l'entend généralement, est un objet (au sens commun du terme, et non au sens de la POO) que l'on peut placer sur une fiche Delphi. En théorie, un composant est un descendant (direct ou non) de la classe de base TComponent.

TComponent descend de la classe TPersistent, elle-même descendante de TObject.

I-B. Héritage de TPersistent

TPersistent encapsule le comportement commun à tous les objets pouvant être affectés à d'autres objets et pouvant lire ou écrire leurs propriétés dans un fichier de fiche (fichier .dfm ou .xfm). Cela signifie que les descendants de cette classe seront capables de se recopier via la méthode Assign et également de s'enregistrer dans un flux (stream). Bien entendu, pour que ces capacités soient supportées, il faut implémenter certaines choses.

I-C. Héritage de TComponent

La classe TComponent est l'ancêtre partagé de chaque composant de la VCL. TComponent implémente directement l'une de ces capacités, à savoir le fait qu'il peut être enregistré dans un flux. Nous pouvons remercier Borland de cela, car sinon nous devrions effectuer un travail considérable à chaque fois que l'on créerait un nouveau composant !

Ainsi, tout composant enregistre automatiquement toutes ses propriétés déclarées published (nous verrons plus loin ce que cela signifie ; pour l'instant, contentez-vous de savoir que c'est une directive au même titre que public).

I-D. Possession et composition

TComponent apporte également d'autres fonctionnalités, telles que le fait que tout descendant de TComponent possède un propriétaire (owner) qui se chargera de le détruire lorsque lui-même sera détruit.

On peut effectuer ici un parallèle avec les Lego : il existe des blocs de base avec lesquels on peut en créer de plus complexes.

On retrouve ici la notion de composition de UML. Le propriétaire désigne la relation particulière entre un composant maître et plusieurs objets le constituant. Le propriétaire étant responsable de la libération des parties qui le composent. Les composants ont donc une existence dépendante du composé.
Exemple : Une fenêtre Windows est composée de menus, d'ascenseurs, de boutons... Si la fenêtre est détruite alors tous les composants (menus, ascenseurs, boutons...) sont également détruits.

Chaque objet peut être propriétaire de 0 ou n autres objets. Par contre, il est impossible de créer un cycle de prossession : si, à partir d'un objet donné, on remonte chaque fois à son propriétaire, on ne pourra jamais retrouver le premier objet.

Sachez, pour en terminer à propos de la possession, que tout composant placé sur une fiche a pour propriétaire cette fiche.

I-E. Réutilisation des composants

Le principal atout de la POO est la réutilisation du code.

Les composants n'échappent pas à cette règle, aussi peut-on, à partir d'un composant, l'améliorer facilement en dérivant un nouveau composant de celui-ci.

I-F. Différences entre développement de composants et d'applications

Extrait de la documentation de Delphi 6 sur les classes et composants

Comme les composants sont des classes, les créateurs de composants manipulent les objets à un niveau différent de celui des développeurs d'applications. La création de nouveaux composants nécessite de dériver de nouvelles classes.

Brièvement, il existe deux différences principales entre la création des composants et leur utilisation dans des applications. Pour la création de composants, vous avez accès à des parties de la classe qui sont inaccessibles aux programmeurs d'applications. Vous ajoutez de nouvelles parties (des propriétés, par exemple) aux composants. A cause de ces différences, il faut prendre en compte un plus grand nombre de conventions, et réfléchir à la manière dont les développeurs d'applications vont utiliser les composants.

I-G. Conclusion

Bref, les composants permettent à tous les développeurs d'augmenter les possibilités de Delphi, et donc de simplifier le développement d'applications.

Vous savez désormais ce qu'est un composant au sens premier du terme. Nous allons maintenant entrer dans le vif du sujet : la création de votre premier composant !


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Tutoriels
Les génériques avec Delphi 2009 Win32 (English version) - également disponible en espagnol et en russe
Réaliser un plug-in comportant un composant
Construire une procédure pointant sur une méthode
Création de composants - en 4 parties
Refactoring avec Delphi 2007
Prise en main de Delphi 2005
Analyseurs syntaxiques - Leur fonctionnement par l'exemple
Créer un fichier d'aide HLP
Pourquoi un paramètre const change-t-il mystérieusement de valeur ?
Sources
SJRDUnits - Routines et classes diverses
SJRDComps - Quelques composants
Projet Sepi
Présentation
FAQ Sepi
Programmes
FunLabyrinthe - Jeu de labyrinthe très spécial et très fun
TrickTakingGame - Jeux de cartes à plis en ligne
MultiAgenda - Agenda multi-répertoires
DecodeFormulaires - Décode les formulaires
Excel --> HTML - Convertisseur de tableaux Excel en HTML
AddressLinks - Lie les adresses Internet et e-mail d'un document HTML
Vipion - Tic Tac Toe sur 4x4 cases avec jeu de l'ordinateur
BigCalc - Calculatrice de haut niveau
Espace paroissial Astérion de Watermael-Boitsfort
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 Sébastien Doeraene. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.