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