Présentation de la VCL
Remonter à VCL
Cette section présente :
Sommaire
Architecture de la VCL
VCL est l'abréviation de Visual Component Library, un ensemble de composants visuels pour le développement rapide d'applications Windows en langage Delphi. La VCL contient une gamme étendue de classes utilitaires visuelles ou non visuelles pour des tâches comme la construction d'applications Windows, d'applications web, d'applications de bases de données et d'applications de consoles. Toutes les classes dérivent de .System::TObject. .System::TObject introduit des méthodes qui implémentent un comportement fondamental comme la construction, la destruction et la gestion des messages.
Composants VCL
Les composants forment un sous-ensemble de la bibliothèque de composants qui dérive de la classe System.Classes.TComponent. Vous pouvez placer les composants dans une fiche ou un module de données et les manipuler pendant la conception. En utilisant l'inspecteur d'objets, vous pouvez affecter les valeurs de propriétés sans écrire de code. La plupart des composants sont visuels ou non, selon qu'ils apparaissent ou non à l'exécution. Certains des composants apparaissent sur la palette des composants.
Composants visuels
Les composants visuels, comme Vcl.Forms.TForm ou Vcl.Buttons.TSpeedButton, sont appelés des contrôles et dérivent de Vcl.Controls.TControl. Les contrôles sont utilisés dans des applications à interface utilisateur graphique et ils apparaissent à l'utilisateur lors de l'exécution. Vcl.Controls.TControl fournit des propriétés qui spécifient les attributs visuels des contrôles, comme leur hauteur et leur largeur.
Composants non visuels
Les composants non visuels sont utilisés pour diverses tâches. Si, par exemple, vous écrivez une application qui se connecte à une base de données, vous pouvez placer un composant Data.DB.TDataSource sur une fiche pour connecter un contrôle et un ensemble de données utilisé par ce contrôle. Cette connexion étant invisible pour l'utilisateur, Data.DB.TDataSource est donc non visuel. A la conception, les composants non visuels sont représentés par une icône. Cela vous permet de manipuler leurs propriétés et événements comme un contrôle visuel.
Autres classes VCL
Les classes qui ne sont pas des composants (c'est-à-dire les classes qui dérivent de .System::TObject mais pas de System.Classes.TComponent) sont également utilisées pour plusieurs tâches. Généralement, ces classes sont utilisées pour l'accès aux objets système (tels qu'un fichier ou le Presse-papiers) ou pour les tâches transitoires (telles que le stockage des données dans une liste). Vous ne pouvez pas créer d'instances de ces classes lors de la conception, bien qu'elles soient quelquefois créées par les composants que vous ajoutez dans le Concepteur de fiches.
Utilisation des composants
De nombreux composants sont fournis par l'EDI dans la palette de composants. Vous sélectionnez des composants dans la palette de composants et les placez sur une fiche ou un module de données. Vous concevez l'interface utilisateur d'une application en disposant des composants visuels, boutons ou listes, sur une fiche. Vous pouvez également placer des composants non visuels, comme les composants d'accès aux données, dans une fiche ou un module de données. A première vue, les composants de Delphi ressemblent aux autres classes. Mais, il existe des différences entre les composants de Delphi et les hiérarchies de classes standard avec lesquelles travaillent de nombreux programmeurs. Voici certaines de ces différences :
- Tous les composants Delphi dérivent de System.Classes.TComponent.
- Les composants sont la plupart du temps utilisés tels quels. Ils sont modifiés par le biais de leurs propriétés, au lieu de servir de classes de base à sous-classer pour ajouter des fonctionnalités ou modifier celles qui existent. Quand un composant est dérivé, on ajoute généralement du code spécifique aux fonctions membres de gestion des événements existants.
- Les composants sont alloués uniquement sur le tas et non sur la pile.
- Les propriétés des composants contiennent des informations de type à l'exécution.
- Des composants peuvent être ajoutés à la palette de composants de l'EDI et manipulés sur une fiche.
Les composants offrent souvent un meilleur degré d'encapsulation que les classes standard. Considérez, par exemple, une boîte de dialogue contenant un bouton. Dans un programme Windows développé en utilisant les composants de la VCL, lorsqu'un utilisateur clique sur le bouton, le système génère un message WM_LBUTTONDOWN. Le programme doit intercepter ce message (généralement dans une instruction switch, une carte de messages ou une table de réponses) et l'envoyer à une routine qui s'exécutera en réponse au message. La plupart des messages Windows (applications VCL) sont gérés par les composants Delphi. Quand vous voulez répondre à un message ou événement système, il vous suffit de fournir un gestionnaire d'événement.
Utilisation des événements
L'essentiel du code que vous écrivez est exécuté, directement ou indirectement, en réponse à des événements. Un événement est un type particulier de propriété qui représente une situation à l'exécution, généralement une action de l'utilisateur. Le code qui répond directement à un événement, que l'on appelle un gestionnaire d'événement, est une procédure Delphi.
La page Evénements de l'inspecteur d'objets affiche tous les événements définis pour un composant donné. Un double-clic sur un événement dans l'inspecteur d'objets génère un squelette de la procédure de gestion de l'événement, que vous pouvez remplir de code pour répondre à cet événement. Certains composants n'ont pas d'événements définis.
Certains composants ont un événement par défaut, celui que le composant a le plus souvent besoin de gérer. Par exemple, l'événement par défaut d'un bouton est OnClick. Un double-clic sur un composant avec un événement par défaut dans le Concepteur de fiches générera un squelette de la procédure de gestion de l'événement pour l'événement par défaut.
Vous pouvez réutiliser le code en écrivant des gestionnaires d'événements qui gèrent plusieurs événements de composants. Par exemple, de nombreuses applications proposent des turboboutons qui sont l'équivalent de commandes de la barre des menus. Lorsqu'un bouton effectue la même action qu'une commande de menu, vous pouvez écrire un seul gestionnaire d'événement et l'affecter ensuite à l'événement OnClick du bouton et de l'élément de menu, en définissant dans l'inspecteur d'objets le gestionnaire pour les événements auxquels vous voulez répondre.
Il s'agit de la méthode la plus simple pour réutiliser les gestionnaires d'événements. Toutefois, les listes d'actions et, dans la VCL, les bandes d'actions, sont des outils puissants pour centraliser l'organisation du code répondant à des commandes utilisateur.
Initialisation des propriétés d'un composant
Les propriétés publiées peuvent être initialisées à la conception avec l'inspecteur d'objets ou, dans certains cas, avec des éditeurs de propriétés. Pour spécifier des propriétés à l'exécution, il suffit d'initialiser leur valeur dans le code source de votre application.
A la conception, quand vous sélectionnez un composant d'une fiche, l'inspecteur d'objets affiche ses propriétés publiées et vous permet, si c'est approprié, de les modifier.
Si plusieurs composants sont sélectionnés, l'inspecteur d'objets affiche toutes les propriétés, sauf Name, communes aux composants sélectionnés. Si la valeur d'une propriété partagée n'est pas la même pour tous les composants sélectionnés, l'inspecteur d'objets affiche soit la valeur par défaut, soit la valeur de la propriété pour le premier composant sélectionné. Quand vous modifiez une propriété partagée, la modification s'applique à tous les composants sélectionnés.
La modification de propriétés liées au code dans l'inspecteur d'objets, comme le nom d'un gestionnaire d'événement, modifie automatiquement le code source correspondant. De plus, les modifications du code source, comme le changement de nom d'une méthode de gestionnaire d'événement dans la déclaration de classe d'une fiche, se reflètent immédiatement dans l'inspecteur d'objets.