====== TControl, TWinControl et TCustomControl ====== Dans l'environnement de développement Lazarus (utilisant le langage Pascal et la bibliothèque LCL), les classes [[prog:lazarus:classes:tcontrols:tcontrol|TControl]], [[prog:lazarus:classes:tcontrols:twincontrol|TWinControl]] et [[prog:lazarus:classes:tcontrols:tcustomcontrol|TCustomControl]] sont des éléments de base pour la création d'interfaces graphiques. Elles héritent les unes des autres et permettent de gérer des composants visuels. TCustomControl = class(TWinControl) TWinControl = class(TControl) TControl = class(TLCLComponent) ===== TControl ===== ''TControl'' est la classe de base pour tous les contrôles visuels dans Lazarus. Elle fournit les fonctionnalités de base pour afficher un composant à l'écran et interagir avec les événements utilisateur (comme les clics de souris ou les pressions sur les touches). ** Caractéristiques ** * **Propriétés communes** : Position (''Left'', ''Top''), Taille (''Width'', ''Height''), visibilité (''Visible''), couleur de fond (''Color''), etc. * **Événements** : Gestion des événements de base comme ''OnClick'', ''OnMouseMove'', ''OnKeyDown'', etc. * **Dessin** : ''TControl'' ne dessine pas son contenu lui-même. Cette classe est plutôt utilisée pour encapsuler les propriétés et comportements généraux des composants. * **Aucun support de conteneur** : ''TControl'' ne peut pas contenir d'autres contrôles visuels. * [[prog:lazarus:classes:tcontrols:tcontrol_dragdrop|Gestion du Drag & Drop]] ===== TWinControl ===== ''TWinControl'' est une classe qui hérite de ''TControl'' et qui ajoute des capacités pour gérer les contrôles ayant une "fenêtre" Windows (c'est-à-dire une handle de fenêtre).\\ Cela signifie qu'elle peut recevoir des messages Windows directement et servir de conteneur pour d'autres contrôles. ** Caractéristiques ** * **Conteneur de contrôles** : **TWinControl** peut contenir d'autres contrôles visuels (enfants) et gère leur affichage, leur positionnement, etc. * **Gestion des focus** : Les instances de **TWinControl** peuvent recevoir le focus de la fenêtre (ce qui signifie qu'elles peuvent être activées pour la saisie clavier). * **Gestion des messages Windows** : Grâce à la présence d'un handle de fenêtre, **TWinControl** peut intercepter et traiter directement les messages Windows (comme **WM_PAINT**, **WM_LBUTTONDOWN**, etc.). * **Support des fenêtres natives** : Les instances de **TWinControl** sont capables d'interagir avec les API Windows, ce qui est essentiel pour les contrôles complexes. ===== TCustomControl ===== ''TCustomControl'' hérite de ''TWinControl'' et est conçu pour servir de base à la création de contrôles personnalisés. Contrairement à ''TWinControl'', ''TCustomControl'' est une classe qui expose le processus de dessin pour que les développeurs puissent définir la manière dont le contrôle se dessine à l'écran. ** Caractéristiques ** * **Dessin personnalisé** : **TCustomControl** introduit la méthode **Paint**, que les développeurs peuvent surcharger pour dessiner leur propre contenu à l'intérieur du contrôle. * **Flexibilité élevée** : En héritant de **TCustomControl**, vous pouvez créer des composants graphiques totalement personnalisés avec des comportements spécifiques. * **Conteneur de contrôles** : Comme il hérite de **TWinControl**, **TCustomControl** peut également contenir d'autres contrôles visuels. ===== Tableau comparatif ===== ^ Caractéristique ^ TControl ^ TWinControl ^ TCustomControl ^ | Classe de base | Oui | Non | Non | | Dessin personnalisé | Non | Non | Oui | | Conteneur de contrôles | Non | Oui | Oui | | Gestion du focus | Non | Oui | Oui | | Gestion des messages Windows | Non | Oui | Oui | ===== En résumé ===== * **TControl** est la classe de base pour tous les composants visuels, mais elle ne gère pas le dessin ou les enfants. * **TWinControl** est utilisée pour les contrôles qui doivent gérer des enfants et interagir directement avec l'API Windows. * **TCustomControl** est parfaite pour créer des contrôles visuels personnalisés avec un rendu graphique spécifique tout en ayant la capacité de contenir d'autres contrôles. Ces classes sont souvent utilisées ensemble dans Lazarus pour créer des applications GUI riches et personnalisées. ===== Sources & Ressources =====