====== TControlStyle ====== ===== TControlStyle ===== TControlStyle = set of TControlStyleType; Le rôle de ''TControlStyle'' en Free Pascal est de spécifier les comportements et les caractéristiques d'un contrôle graphique dans une application. Il s'agit d'un ensemble de styles (''set'') basé sur l'énumération ''TControlStyleType'' (voir ci-dessous). ==== Rôle ==== ''TControlStyle'' permet aux développeurs de définir et de modifier le comportement d'un contrôle à un niveau plus granulaire. En fonction des styles qui sont inclus dans cet ensemble, un contrôle pourra ou non : - **Gérer certains types d'événements** (comme les clics, les doubles clics, etc.). - **Être interactif dans l'interface de conception** (ce qui est utile pour les développeurs lorsqu'ils utilisent des outils de conception visuelle). - **Contrôler son apparence** (comme être opaque, avoir un cadre, etc.). - **Fixer certaines contraintes** (comme une largeur ou hauteur fixe). - **Intégrer des fonctionnalités spécifiques** (comme afficher une image pendant une opération de glisser-déposer ou afficher un clavier virtuel lorsque le contrôle reçoit le focus). ==== Exemple ==== Lors de la création ou de la personnalisation d'un contrôle personnalisé, un développeur peut ajuster ''ControlStyle'' pour adapter le comportement du contrôle à ses besoins. Par exemple : MyControl.ControlStyle := MyControl.ControlStyle + [csOpaque, csDoubleClicks]; Dans cet exemple, ''MyControl'' est un contrôle personnalisé et l'on ajoute les styles ''csOpaque'' et ''csDoubleClicks'' à son ''ControlStyle''. Cela signifie que le contrôle peindra entièrement sa zone (pas de transparence) et qu'il comprendra les double-clics de la souris. ===== TControlStyleType ===== Le type énuméré ''TControlStyleType'' est utilisé pour décrire divers comportements et attributs possibles pour un contrôle visuel dans une interface utilisateur graphique (GUI). Chaque élément de l'énumération représente une fonctionnalité ou une caractéristique particulière qu'un contrôle peut avoir. ==== Code ==== TControlStyleType = ( csAcceptsControls, // can have children in the designer csCaptureMouse, // auto capture mouse when clicked csDesignInteractive, // wants mouse events in design mode csClickEvents, // handles mouse events csFramed, // not implemented, has 3d frame csSetCaption, // if Name=Caption, changing the Name changes the Caption csOpaque, // the control paints its area completely csDoubleClicks, // understands mouse double clicks csTripleClicks, // understands mouse triple clicks csQuadClicks, // understands mouse quad clicks csFixedWidth, // cannot change its width csFixedHeight, // cannot change its height (for example combobox) csNoDesignVisible, // is invisible in the designer csReplicatable, // PaintTo works csNoStdEvents, // standard events such as mouse, key, and click events are ignored. csDisplayDragImage, // display images from dragimagelist during drag operation over control csReflector, // not implemented, the controls respond to size, focus and dlg messages - it can be used as ActiveX control under Windows csActionClient, // Action is set csMenuEvents, // not implemented csNoFocus, // control will not take focus when clicked with mouse. csNeedsBorderPaint, // not implemented csParentBackground, // tells WinXP to paint the theme background of parent on controls background csDesignNoSmoothResize, // when resizing control in the designer do not SetBounds while dragging csDesignFixedBounds, // can not be moved nor resized in designer csHasDefaultAction, // implements useful ExecuteDefaultAction csHasCancelAction, // implements useful ExecuteCancelAction csNoDesignSelectable, // can not be selected at design time csOwnedChildrenNotSelectable, // child controls owned by this control are NOT selectable in the designer csAutoSize0x0, // if the preferred size is 0x0 then control is shrinked to 0x0, default is minimum 1x1 csAutoSizeKeepChildLeft, // when AutoSize=true do not move children horizontally csAutoSizeKeepChildTop, // when AutoSize=true do not move children vertically csRequiresKeyboardInput // If the device has no physical keyboard then show the virtual keyboard when this control gets focus (therefore available only to TWinControl descendents) ); ==== Membres ==== Voici une explication détaillée de chaque valeur dans cette énumération : === csAcceptsControls === Le contrôle peut avoir des sous-contrôles (enfants) dans l'interface de conception (designer). === csCaptureMouse === Le contrôle capture automatiquement la souris lorsqu'il est cliqué, c'est-à-dire qu'il recevra tous les événements de la souris tant qu'il est cliqué, même si le curseur est déplacé en dehors de ses limites. === csDesignInteractive === Le contrôle souhaite recevoir des événements de la souris lorsqu'il est en mode design (c'est-à-dire lorsqu'on le modifie dans l'interface de conception). === csClickEvents === Le contrôle gère les événements de clic de la souris. === csFramed === Non implémenté. Le contrôle aurait un cadre en 3D (utilisé pour indiquer une bordure visuelle). === csSetCaption === Si le nom du contrôle est identique à sa légende (Caption), changer le nom changera automatiquement la légende. === csOpaque === Le contrôle peint complètement sa zone (aucune transparence n'est laissée). === csDoubleClicks === Le contrôle comprend les double-clics de la souris. === csTripleClicks === Le contrôle comprend les triple-clics de la souris. === csQuadClicks === Le contrôle comprend les quadruple-clics de la souris. === csFixedWidth === Le contrôle a une largeur fixe, c'est-à-dire qu'il ne peut pas changer de largeur. === csFixedHeight === Le contrôle a une hauteur fixe, c'est-à-dire qu'il ne peut pas changer de hauteur. Par exemple, cela peut s'appliquer à une `TComboBox`. === csNoDesignVisible === Le contrôle est invisible dans l'interface de conception. === csReplicatable === La méthode `PaintTo` fonctionne, ce qui signifie que le contrôle peut se peindre sur un autre canevas (utilisé pour les captures d'écran ou les rendus externes). === csNoStdEvents === Les événements standard comme ceux de la souris, des touches ou des clics sont ignorés par le contrôle. === csDisplayDragImage === Pendant une opération de glisser-déposer, des images provenant d'une liste d'images de glisser-déposer (`dragimagelist`) sont affichées au-dessus du contrôle. === csReflector === Non implémenté. Indique que le contrôle répond aux messages de taille, de focus et de dialogue. Il peut être utilisé comme un contrôle ActiveX sous Windows. === csActionClient === Une action est définie pour ce contrôle, ce qui signifie que le contrôle est lié à une action (un concept qui permet de lier des événements ou des commandes à des composants GUI). === csMenuEvents === Non implémenté. Supposé gérer les événements de menu. === csNoFocus === Le contrôle ne prendra pas le focus lorsqu'il est cliqué avec la souris. === csNeedsBorderPaint === Non implémenté. Supposé indiquer que le contrôle nécessite une peinture de bordure. === csParentBackground === Sous Windows XP, ce style demande au système de peindre le fond du parent du contrôle sur le fond du contrôle, permettant une meilleure intégration visuelle avec les thèmes. === csDesignNoSmoothResize === Lors du redimensionnement du contrôle dans l'interface de conception, ne pas appeler `SetBounds` pendant le redimensionnement (réduisant les mises à jour visuelles). === csDesignFixedBounds === Le contrôle ne peut pas être déplacé ni redimensionné dans l'interface de conception. === csHasDefaultAction === Le contrôle implémente une action par défaut utile (utilisé par exemple pour l'action de validation sur un bouton). === csHasCancelAction === Le contrôle implémente une action d'annulation utile (utilisé par exemple pour l'action d'annulation sur un bouton). === csNoDesignSelectable === Le contrôle ne peut pas être sélectionné dans l'interface de conception. === csOwnedChildrenNotSelectable === Les sous-contrôles appartenant à ce contrôle ne sont pas sélectionnables dans l'interface de conception. === csAutoSize0x0 === Si la taille préférée du contrôle est `0x0`, le contrôle sera réduit à `0x0`, la taille minimale par défaut étant généralement `1x1`. === csAutoSizeKeepChildLeft === Lorsque `AutoSize` est activé, les sous-contrôles ne sont pas déplacés horizontalement. === csAutoSizeKeepChildTop === Lorsque `AutoSize` est activé, les sous-contrôles ne sont pas déplacés verticalement. === csRequiresKeyboardInput === Si l'appareil n'a pas de clavier physique, cela indique qu'un clavier virtuel doit être affiché lorsque le contrôle reçoit le focus. Cela ne s'applique qu'aux descendants de `TWinControl`. Ces différents styles sont généralement combinés en utilisant des opérateurs binaires pour former un ensemble (`set`) qui décrit les capacités et les comportements spécifiques d'un contrôle.