Difference between revisions of "Colors/fr"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{Colors}} <br> <br> =Overview= In the LCL TColor is the standard color type. It is compatible with Delphi's TColor. TColor can represent ''either'' an RGB (3x8bit) value, ''...")
 
m (Fixed syntax highlighting; removed hidden content)
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{Colors}}
 
{{Colors}}
<br>
 
<br>
 
=Overview=
 
  
In the LCL TColor is the standard color type. It is compatible with Delphi's TColor. TColor can represent ''either'' an RGB (3x8bit) value, ''or'' a '''system''' color like '''clDefault'''. The LCL can also work with the fpImage system which uses the TFPColor type (which is RGBA (4x16bit), not RGB (3x8bit) like TColor).
+
=Vue d'ensemble=
  
==Conversions between TColor and RGB values==
+
Dans la LCL, '''TColor''' est le type couleur standard. Il est compatible avec le '''TColor''' de Delphi. '''TColor''' peut représenter ''soit'' une valeur RGB (3x8bits), ''soit'' une couleur ''système'' comme ''crDefault''. La LCL peut aussi travailler avec le système fpImage qui emploie le type '''TFPColor''' qui est du RGBA (4x16bits), et non du RGB (3x8bits comme '''TColor''').
  
The '''Graphics''' unit provides the following functions:
+
==Conversions entre '''TColor''' et une valeur RGB==
  
<syntaxhighlight>function Blue(rgb: TColor): BYTE; // does not work on system color
+
L'unité '''Graphics''' fournit les fonctions suivantes  :
function Green(rgb: TColor): BYTE; // does not work on system color
+
 
function Red(rgb: TColor): BYTE; // does not work on system color
+
<syntaxhighlight lang=pascal>
 +
function Blue(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
 +
function Green(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
 +
function Red(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
 
function RGBToColor(R, G, B: Byte): TColor;
 
function RGBToColor(R, G, B: Byte): TColor;
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // does not work on system color
+
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // ne fonctionne pas avec les couleurs système
 
function FPColorToTColor(const FPColor: TFPColor): TColor;
 
function FPColorToTColor(const FPColor: TFPColor): TColor;
function TColorToFPColor(const c: TColor): TFPColor; // does not work on system color
+
function TColorToFPColor(const c: TColor): TFPColor; // ne fonctionne pas avec les couleurs système
 
function IsSysColor(AColor: TColorRef): Boolean;</syntaxhighlight>
 
function IsSysColor(AColor: TColorRef): Boolean;</syntaxhighlight>
  
==Convert TColor to/from string==
+
==Conversion entre '''TColor''' et une chaîne de caractères==
Functions to convert strings like "25500" or "$AA0088" or "clNavy" to TColor:
+
Fonctions pour convertir des chaînes comme "25500" ou "$AA0088" ou "clNavy" vers le type '''TColor''':
  
 
* StringToColor
 
* StringToColor
 
* StringToColorDef
 
* StringToColorDef
  
To convert TColor to a nice string:
+
Pour convertir '''TColor''' vers une chaîne qui peut être adaptée à la langue de travail:
  
 
* ColorToString
 
* ColorToString
  
=Table of standard colors=
+
=Table des couleurs standard=
  
About 20 predefined color constants are provided, which are Delphi-compatible:
+
Environ une vingtaine de constantes de couleur prédéfinies sont fournies. Elles sont compatibles avec Delphi:
<!--<syntaxhighlight>  // standard colors
 
  clBlack  = TColor($000000);
 
  clMaroon  = TColor($000080);
 
  clGreen  = TColor($008000);
 
  clOlive  = TColor($008080);
 
  clNavy    = TColor($800000);
 
  clPurple  = TColor($800080);
 
  clTeal    = TColor($808000);
 
  clGray    = TColor($808080);
 
  clSilver  = TColor($C0C0C0);
 
  clRed    = TColor($0000FF);
 
  clLime    = TColor($00FF00);
 
  clYellow  = TColor($00FFFF);
 
  clBlue    = TColor($FF0000);
 
  clFuchsia = TColor($FF00FF);
 
  clAqua    = TColor($FFFF00);
 
  clLtGray  = TColor($C0C0C0); // clSilver alias
 
  clDkGray  = TColor($808080); // clGray alias
 
  clWhite  = TColor($FFFFFF);</syntaxhighlight>-->
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Colour constant
+
! Constante de couleur
! Meaning
+
! Signification
! Hexadecimal value for use with TColor
+
! Valeur hexadécimale pour emploi avec '''TColor'''
! Example
+
! Exemple
 
|-
 
|-
 
| clBlack
 
| clBlack
| Black
+
| Noir
 
| TColor($000000);
 
| TColor($000000);
 
| style="background: #000000" |
 
| style="background: #000000" |
 
|-
 
|-
 
| clMaroon
 
| clMaroon
| Maroon
+
| Marron
 
| TColor($000080);
 
| TColor($000080);
 
| style="background: #800000" |
 
| style="background: #800000" |
 
|-
 
|-
 
| clGreen   
 
| clGreen   
| Green
+
| Vert
 
| TColor($008000);
 
| TColor($008000);
 
| style="background: #008000" |
 
| style="background: #008000" |
 
|-
 
|-
 
| clOlive   
 
| clOlive   
| Olive Green
+
| Vert Olive
 
| TColor($008080);
 
| TColor($008080);
 
| style="background: #808000" |
 
| style="background: #808000" |
 
|-
 
|-
 
| clNavy   
 
| clNavy   
| Navy Blue
+
| Bleu marine
 
| TColor($800000);
 
| TColor($800000);
 
| style="background: #000080" |
 
| style="background: #000080" |
 
|-
 
|-
 
| clPurple  
 
| clPurple  
| Purple
+
| Violet
 
| TColor($800080);
 
| TColor($800080);
 
| style="background: #800080" |
 
| style="background: #800080" |
 
|-
 
|-
 
| clTeal   
 
| clTeal   
| Teal
+
| Bleu canard
 
| TColor($808000);
 
| TColor($808000);
 
| style="background: #008080" |
 
| style="background: #008080" |
 
|-
 
|-
 
| clGray   
 
| clGray   
| Grey
+
| Gris
 
| TColor($808080);
 
| TColor($808080);
 
| style="background: #808080" |
 
| style="background: #808080" |
 
|-
 
|-
 
| clSilver  
 
| clSilver  
| Silver
+
| Argent
 
| TColor($C0C0C0);
 
| TColor($C0C0C0);
 
| style="background: #C0C0C0" |
 
| style="background: #C0C0C0" |
 
|-
 
|-
 
| clRed     
 
| clRed     
| Red
+
| Rouge
 
| TColor($0000FF);
 
| TColor($0000FF);
 
| style="background: #FF0000" |
 
| style="background: #FF0000" |
 
|-
 
|-
 
| clLime   
 
| clLime   
| Lime Green
+
| Vert Citron
 
| TColor($00FF00);
 
| TColor($00FF00);
 
| style="background: #00FF00" |
 
| style="background: #00FF00" |
 
|-
 
|-
 
| clYellow  
 
| clYellow  
| Yellow
+
| Jaune
 
| TColor($00FFFF);
 
| TColor($00FFFF);
 
| style="background: #FFFF00" |
 
| style="background: #FFFF00" |
 
|-
 
|-
 
| clBlue   
 
| clBlue   
| Blue
+
| Bleu
 
| TColor($FF0000);
 
| TColor($FF0000);
 
| style="background: #0000FF" |
 
| style="background: #0000FF" |
Line 130: Line 111:
 
|-
 
|-
 
| clAqua   
 
| clAqua   
| Aqua
+
| Bleu vert
 
| TColor($FFFF00);
 
| TColor($FFFF00);
 
| style="background: #00FFFF" |
 
| style="background: #00FFFF" |
 
|-
 
|-
 
| clLtGray  
 
| clLtGray  
| Light Grey
+
| Gris clair
 
| TColor($C0C0C0);
 
| TColor($C0C0C0);
| style="background: #D3D3D3" | clSilver alias
+
| style="background: #D3D3D3" | alias de clSilver
 
|-
 
|-
 
| clDkGray  
 
| clDkGray  
| Dark Grey
+
| Gris foncé
 
| TColor($808080);
 
| TColor($808080);
| style="background: #808080; color: white;" | clGray alias
+
| style="background: #808080; color: white;" | alias de clGray
 
|-
 
|-
 
| clWhite   
 
| clWhite   
| White
+
| Blanc
 
| TColor($FFFFFF);
 
| TColor($FFFFFF);
 
| style="background: #FFFFFF" |
 
| style="background: #FFFFFF" |
 
|-
 
|-
 
| clCream   
 
| clCream   
| Cream
+
| Crème
 
| TColor($F0FBFF);
 
| TColor($F0FBFF);
| style="background: #FFFBF0;" | Lazarus 1.2 and newer
+
| style="background: #FFFBF0;" |  
 
|-
 
|-
 
| clMedGray   
 
| clMedGray   
| Medium Grey
+
| Gris Moyen
 
| TColor($A4A0A0);
 
| TColor($A4A0A0);
| style="background: #A0A0A4;" | Lazarus 1.2 and newer
+
| style="background: #A0A0A4;" |  
 
|-
 
|-
 
| clMoneyGreen   
 
| clMoneyGreen   
| Mint Green
+
| Vert menthe
 
| TColor($C0DCC0);
 
| TColor($C0DCC0);
| style="background: #C0DCC0;" | Lazarus 1.2 and newer
+
| style="background: #C0DCC0;" |  
 
|-
 
|-
 
| clSkyBlue   
 
| clSkyBlue   
| Sky Blue
+
| Bleu ciel
 
| TColor($F0CAA6);
 
| TColor($F0CAA6);
| style="background: #A6CAF0;" | Lazarus 1.2 and newer
+
| style="background: #A6CAF0;" |  
 
|}
 
|}
  
=System colors=
+
=Couleurs système=
  
==Example: clInfoBk, clInfoText==
+
==Exemples : clInfoBk, clInfoText==
  
System colors are color constants with a special meaning. Their real value depends on the context and theme. They are not simple colors.
+
Les couleurs système sont des constantes avec une signification particulière. Leur valeur réelle dépend du contexte et du thème. Ce ne sont pas de simples couleurs. Par exemple '''clInfoBk''':
For example '''clInfoBk''':
 
  
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
+
<syntaxhighlight lang=pascal>Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
 
Form1.Canvas.FillRect(10,10,50,50);</syntaxhighlight>
 
Form1.Canvas.FillRect(10,10,50,50);</syntaxhighlight>
  
A hint window on MS Windows might have a white background so the above will draw white. On Linux/gtk2 it might be a metallic texture, so the above will draw the texture. If you want to put some text onto this you need a corresponding color like '''clInfoText''', otherwise your text might be unreadable for the user. For example:
+
Une bulle d'aide dans MS Windows ayant un fond blanc, le code ci-dessus va dessiner en blanc. Dans Linux/gtk2, ce code pouvant correspondre à une texture métallique, le code va dessiner la texture. Si vous voulez placer du texte dessus, vous avez besoin d'une couleur correspondante comme '''clInfoText''', sinon votre texte sera illisible pour l'utilisateur. Par exemple:
  
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
+
<syntaxhighlight lang=pascal>
 +
Form1.Canvas.Brush.Color:=clInfoBk;  // utilise le fond par défaut d'une bulle d'aide
 
Form1.Canvas.FillRect(10,10,50,50);
 
Form1.Canvas.FillRect(10,10,50,50);
Form1.Canvas.Font.Color:=clInfoText;  // use the default text color of a hint window
+
Form1.Canvas.Font.Color:=clInfoText;  // utilise la couleur du ttexte par défaut d'une bulle d'aide
 
Form1.Canvas.TextOut(10,10,'Hint');</syntaxhighlight>
 
Form1.Canvas.TextOut(10,10,'Hint');</syntaxhighlight>
  
The system color '''clInfoBk''' can not be used for Pen.Color and not for Font.Color. If you do so the result is undefined and depends on the widgetset and user theme.
+
La couleur système '''clInfoBk''' ne peut pas être utilisée avec Pen.Color ni pour Font.Color. Si vous faites ainsi, le résultat est indéfini et dépend du widgetset et du thème de l'utilisateur.
The same for '''clInfoText''': It can only be used as a Font.Color. Using it as Brush.Color may not work. At the moment all widgetsets allow to use it as Pen.Color too.
 
  
==Theme changes==
+
Idem pour '''clInfoText''': il ne peut être utilisé que comme une Font.Color. L'utiliser comme Brush.Color peut ne pas convenir. Actuellement, tous les widgetsets permettent de l'utiliser comme Pen.Color aussi.
  
When the user switches the theme the system colors changes. A '''clInfoBk''' might change from white to blue or from a color to a texture. This change will happen when you allocate a new Brush handle. Keep in mind that a simple assignment Brush.Color:=clInfoBk does not allocate a Brush Handle. The Brush Handle is allocated on use. For example:
+
==Changements de thème==
  
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk; // this will not create a new brush handle
+
Quand l'utilisateur bascule le thème, les couleurs système changent. Une '''clInfoBk''' peut passer du blanc au vert ou d'une couleur à une texture. Ce changement surgira quand vous  allouerez une nouveau handle de brosse. Gardez à l'esprit que la simple affectation Brush.Color:=clInfoBk n'alloue pas un handle de brosse. Le handle est alloué à l'utilisation. Par exemple:
Form1.Canvas.FillRect(10,10,50,50); // this will create the brush handle with the currently active theme brush for hint windows
+
 
 +
<syntaxhighlight lang=pascal>
 +
Form1.Canvas.Brush.Color:=clInfoBk; // Cela ne créera pas une nouveau handle de brosse
 +
Form1.Canvas.FillRect(10,10,50,50); // Cela va le créer avec la brosse du thème actif pour les bulles d'aide
 
...
 
...
// if the theme changes in this moment the Brush.Handle is still allocated with the old values
+
// Si le thème change maintenant, le Brush.Handle est toujours alloué avec les anciennes valeurs
 
...
 
...
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
+
Form1.Canvas.FillRect(10,10,50,50); // cela va peindre avec la brosse de l'ancien thème
Form1.Canvas.Brush.Color:=clInfoBk; // assigning the old value will not create a new brush handle
+
Form1.Canvas.Brush.Color:=clInfoBk; // affecter l'ancienne valeur ne créera pas un nouveau handle de brosse
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
+
Form1.Canvas.FillRect(10,10,50,50); // cela va peindre avec la brosse de l'ancien thème
Form1.Canvas.Brush.Color:=clRed;    // assigning a new color, old Handle invalid
+
Form1.Canvas.Brush.Color:=clRed;    // affectant une nouvelle couleur, l'ancien handle est invalide
Form1.Canvas.Brush.Color:=clInfoBk; // assigning a new color, old Handle invalid
+
Form1.Canvas.Brush.Color:=clInfoBk; // affectant une nouvelle couleur, l'ancien handle est invalide
Form1.Canvas.FillRect(10,10,50,50); // this will create a new handle and paint with the new theme</syntaxhighlight>
+
Form1.Canvas.FillRect(10,10,50,50); // cela créera un nouveau handle et peindra avec le nouveau thème
 +
</syntaxhighlight>
  
==Table of system colors==
+
==Table des couleurs système==
  
The following table lists the system colors and their meaning. Using them outside the scope of the definition is undefined and the result depends on the widgetset and theme. For example '''clDefault''' is the normal background brush of the used device context. If you want to paint button elements on your own custom controls use the drawing functions of the unit '''Themes'''.
+
La table suivante liste les couleurs système et leur sens. Les employer en dehors du champ de leur définition est indéfini et le résultat dépend du widgetset et du thème. Par exemple, '''clDefault''' est la brosse du fond normale du contexte de périphérique utilisé. Si vous voulez peindre des éléments de boutons sur vos contrôles personnalisés, employez les fonctions de dessin de l'unité '''Themes'''.
  
 
{| class="wikitable"
 
{| class="wikitable"
! Constant !! LCL definition !! Delphi notes !! Supported Widgetsets
+
! Constante !! Définition LCL !! Notes Delphi !! Widgetset supporté
 
|----
 
|----
|clNone||Indicates "do not paint". Using it as Control's color is undefined. The control will not get transparent.|| - || all
+
|clNone||Indique "ne pas peindre". L'employer comme couleur de contrôle est indéfini. Le contrôle ne deviendra pas transparent.|| - || Tous
 
|----
 
|----
|clDefault||Using it for Brush will use the normal background brush of the target DC (device context).  
+
|clDefault||L'employer pour une brosse revient à employer la couleur de fond normal pour le contexte de périphérique cible.
* On a Form's canvas a ''FillRect'' will paint a rectangular area filled with the normal background of a standard window. This is whatever the widgetset and theme defines. This might be the color gray or a gradient or a picture.  
+
* Sur le canevas d'une fiche, un ''FillRect'' peindra une surface rectangulaire remplie avec le fond normal d'une fenêtre standard. Cela quelque puissent définir le widgetset et le thème. Cela peut être la couleur grise, un dégradé ou une image.
* Using clDefault on the Canvas of a TListBox will paint with the normal background, which is normally white on Windows. So in a TListBox clDefault is the same as clWindow.  
+
* Sur le canevas d'une TListBox, cela peindra avec le fond normal, qui est souvent blanc dans Windows. Ainsi, pour une TListBox, clDefault est identique à clWindow.  
* Using it as Pen color will use the default line color for the device context.  
+
* L'utiliser comme couleur de crayon utilisera la couleur de ligne par défaut pour le contexte de périphérique.  
* Using it as Font color will use the normal text color of the device context.  
+
* L'utiliser comme couleur de fonte utilisera la couleur de texte par défaut pour le contexte de périphérique.  
|| - || all
+
|| - || Tous
 
|----
 
|----
|clScrollBar|| Scrollbar body || - || all
+
|clScrollBar|| Couleur du corps de barre de défilement || - || Tous
 
|----
 
|----
|clBackground|| ? || - || all
+
|clBackground|| ? || - || Tous
 
|----
 
|----
|clActiveCaption|| Active window titlebar || - || none
+
|clActiveCaption|| Barre de titre de la fenêtre active || - || Aucun
 
|----
 
|----
|clInactiveCaption|| Inactive window titlebar || - || none
+
|clInactiveCaption|| Barre de titre de fenêtre inactive || - || Aucun
 
|----
 
|----
|clMenu|| Regular menu item background color || - || none
+
|clMenu|| Couleur de fond d'article de menu ordinaire || - || Aucun
 
|----
 
|----
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| - || none
+
|clWindow|| La brosse de fond normal d'un texte non sélectionné. Défini pour des contrôles comme TEdit, TComboBox, TMemo, TListBox, TTreeView.|| - || Aucun
 
|----
 
|----
|clWindowFrame|| Color of frame around the window || - || none
+
|clWindowFrame|| Couleur du cadre autour de la fenêtre || - || Aucun
 
|----
 
|----
|clMenuText|| The font color to use together with clMenu || - || none
+
|clMenuText|| Couleur de police pour les menus à employer avec clMenu || - || Aucun
 
|----
 
|----
|clWindowText|| Font color to use together with clWindow || - || none
+
|clWindowText|| Couleur de police d'un texte non sélectionné à employer avec clWindow || - || Aucun
 
|----
 
|----
|clCaptionText|| Active window titlebar text color || - || none
+
|clCaptionText|| Couleur de texte de la barre de titre de la fenêtre active || - || Aucun
 
|----
 
|----
|clActiveBorder||?|| - || none
+
|clActiveBorder||?|| - || Aucun
 
|----
 
|----
|clInactiveBorder||?|| - || none
+
|clInactiveBorder||?|| - || Aucun
 
|----
 
|----
|clAppWorkspace|| MDIMain form background || - || none
+
|clAppWorkspace|| Fond de la fenêtre principale en MDI || - || Aucun
 
|----
 
|----
|clHighlight|| The brush color of selected element || - || none
+
|clHighlight|| La couleur de brosse d'un élement sélectionné || - || Aucun
 
|----
 
|----
|clHighlightText|| Font color of selected text (to use together with clHighligh). || - || none
+
|clHighlightText|| Couleur de police de texte sélectionné (à employer avec clHighligh). || - || Aucun
 
|----
 
|----
|clBtnFace|| Button background || - || none
+
|clBtnFace|| Fond de bouton || - || Aucun
 
|----
 
|----
|clBtnShadow|| Button shadow color (bottom right) used to achieve 3D effect || - || none
+
|clBtnShadow|| Couleur de l'ombre d'un bouton (en bas à droite) utilisé pour réaliser un effet 3D || - || Aucun
 
|----
 
|----
|clGrayText|| The font color of disabled element || - || none
+
|clGrayText|| Couleur de police d'un élément désactivé || - || Aucun
 
|----
 
|----
|clBtnText|| Button font color to use together with clBtnFace || - || none
+
|clBtnText|| Couleur de police de bouton à utiliser avec clBtnFace || - || Aucun
 
|----
 
|----
|clInactiveCaptionText|| Inactive window titlebar text color || - || none
+
|clInactiveCaptionText|| Couleur de texte du titre d'une fenêtre inactive || - || Aucun
 
|----
 
|----
|clBtnHighlight|| Button highlight color (top left) used to achieve 3D effect || - || none
+
|clBtnHighlight|| Couleur de surlignement de bouton (en haut à gauche) utilisé pour réaliser un effet 3D || - || Aucun
 
|----
 
|----
|cl3DDkShadow||?|| - || none
+
|cl3DDkShadow||?|| - || Aucun
 
|----
 
|----
|cl3DLight||?|| - || none
+
|cl3DLight||?|| - || Aucun
 
|----
 
|----
|clInfoText|| Font color for hints. Use together with clInfoBk || - || all
+
|clInfoText|| Couleur de police pour les bulles d'aide. A employer avec clInfoBk || - || Tous
 
|----
 
|----
|clInfoBk|| Brush color for hints. Use together with clInfoText || - || all
+
|clInfoBk|| Couleur de police pour les bulles d'aide. A employer avec clInfoText || - || Tous
 
|----
 
|----
|clHotLight||?|| - || none
+
|clHotLight||?|| - || Aucun
 
|----
 
|----
|clGradientActiveCaption|| The second color used to make gradient of active window titlebar || - || none
+
|clGradientActiveCaption|| La seconde couleur utilisée pour faire le dégradé de la barre de titre de la fenêtre active || - || Aucun
 
|----
 
|----
|clGradientInactiveCaption|| The second color used to make gradient for inactive window titlebar || - || none
+
|clGradientInactiveCaption|| La seconde couleur utilisée pour faire le dégradé de la barre de titre de fenêtre inactive || - || Aucun
 
|----
 
|----
|clMenuHighlight|| The background color of selected menu item || - || none
+
|clMenuHighlight|| La couleur de fond d'un article de menu sélectionné || - || Aucun
 
|----
 
|----
|clMenuBar|| The Backround color of menu bar || - || none
+
|clMenuBar|| Couleur de fond d'une barre de menu || - || Aucun
 
|----
 
|----
|clForm||?|| - || none
+
|clForm||?|| - || Aucun
 
|----
 
|----
|clColorDesktop||?|| - || none
+
|clColorDesktop||?|| - || Aucun
 
|----
 
|----
|cl3DFace||?|| - || none
+
|cl3DFace||?|| - || Aucun
 
|----
 
|----
|cl3DShadow||?|| - || none
+
|cl3DShadow||?|| - || Aucun
 
|----
 
|----
|cl3DHiLight||?|| - || none
+
|cl3DHiLight||?|| - || Aucun
 
|----
 
|----
|clBtnHiLight|| Same as clBtnHighlight || - || none
+
|clBtnHiLight|| Comme clBtnHighlight || - || Aucun
 
|}
 
|}
  
=Drawing theme elements on your custom controls=
+
=Dessin d'élément de thème sur vos contrôles personnalisés=
  
The unit '''Themes''' provides functions to draw single elements of standard controls. For example to draw an expand sign like a TTreeView use the following code:
+
L'unité '''Themes''' fournit des fonctions pour dessiner des éléments particuliers de contrôles standard. Par exemple, pour dessiner un signe d'expansion comme un '''TTreeView''' on utilise :
  
<syntaxhighlight>uses Themes;
+
<syntaxhighlight lang=pascal>
 +
uses Themes;
  
 
...
 
...
Line 316: Line 301:
 
begin
 
begin
 
   ...
 
   ...
   //draw a themed expand sign.
+
   //dessine un signe d'expansion selon le thème.
 
   Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);
 
   Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);
 
   R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);
 
   R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);
Line 322: Line 307:
 
   ...
 
   ...
 
end;</syntaxhighlight>
 
end;</syntaxhighlight>
 
[[Category:Graphics]]
 

Latest revision as of 06:58, 11 February 2020

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) русский (ru) 中文(中国大陆)‎ (zh_CN)

Vue d'ensemble

Dans la LCL, TColor est le type couleur standard. Il est compatible avec le TColor de Delphi. TColor peut représenter soit une valeur RGB (3x8bits), soit une couleur système comme crDefault. La LCL peut aussi travailler avec le système fpImage qui emploie le type TFPColor qui est du RGBA (4x16bits), et non du RGB (3x8bits comme TColor).

Conversions entre TColor et une valeur RGB

L'unité Graphics fournit les fonctions suivantes :

function Blue(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
function Green(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
function Red(rgb: TColor): BYTE; // ne fonctionne pas avec les couleurs système
function RGBToColor(R, G, B: Byte): TColor;
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // ne fonctionne pas avec les couleurs système
function FPColorToTColor(const FPColor: TFPColor): TColor;
function TColorToFPColor(const c: TColor): TFPColor; // ne fonctionne pas avec les couleurs système
function IsSysColor(AColor: TColorRef): Boolean;

Conversion entre TColor et une chaîne de caractères

Fonctions pour convertir des chaînes comme "25500" ou "$AA0088" ou "clNavy" vers le type TColor:

  • StringToColor
  • StringToColorDef

Pour convertir TColor vers une chaîne qui peut être adaptée à la langue de travail:

  • ColorToString

Table des couleurs standard

Environ une vingtaine de constantes de couleur prédéfinies sont fournies. Elles sont compatibles avec Delphi:

Constante de couleur Signification Valeur hexadécimale pour emploi avec TColor Exemple
clBlack Noir TColor($000000);
clMaroon Marron TColor($000080);
clGreen Vert TColor($008000);
clOlive Vert Olive TColor($008080);
clNavy Bleu marine TColor($800000);
clPurple Violet TColor($800080);
clTeal Bleu canard TColor($808000);
clGray Gris TColor($808080);
clSilver Argent TColor($C0C0C0);
clRed Rouge TColor($0000FF);
clLime Vert Citron TColor($00FF00);
clYellow Jaune TColor($00FFFF);
clBlue Bleu TColor($FF0000);
clFuchsia Fuchsia TColor($FF00FF);
clAqua Bleu vert TColor($FFFF00);
clLtGray Gris clair TColor($C0C0C0); alias de clSilver
clDkGray Gris foncé TColor($808080); alias de clGray
clWhite Blanc TColor($FFFFFF);
clCream Crème TColor($F0FBFF);
clMedGray Gris Moyen TColor($A4A0A0);
clMoneyGreen Vert menthe TColor($C0DCC0);
clSkyBlue Bleu ciel TColor($F0CAA6);

Couleurs système

Exemples : clInfoBk, clInfoText

Les couleurs système sont des constantes avec une signification particulière. Leur valeur réelle dépend du contexte et du thème. Ce ne sont pas de simples couleurs. Par exemple clInfoBk:

Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
Form1.Canvas.FillRect(10,10,50,50);

Une bulle d'aide dans MS Windows ayant un fond blanc, le code ci-dessus va dessiner en blanc. Dans Linux/gtk2, ce code pouvant correspondre à une texture métallique, le code va dessiner la texture. Si vous voulez placer du texte dessus, vous avez besoin d'une couleur correspondante comme clInfoText, sinon votre texte sera illisible pour l'utilisateur. Par exemple:

Form1.Canvas.Brush.Color:=clInfoBk;  // utilise le fond par défaut d'une bulle d'aide
Form1.Canvas.FillRect(10,10,50,50);
Form1.Canvas.Font.Color:=clInfoText;  // utilise la couleur du ttexte par défaut d'une bulle d'aide
Form1.Canvas.TextOut(10,10,'Hint');

La couleur système clInfoBk ne peut pas être utilisée avec Pen.Color ni pour Font.Color. Si vous faites ainsi, le résultat est indéfini et dépend du widgetset et du thème de l'utilisateur.

Idem pour clInfoText: il ne peut être utilisé que comme une Font.Color. L'utiliser comme Brush.Color peut ne pas convenir. Actuellement, tous les widgetsets permettent de l'utiliser comme Pen.Color aussi.

Changements de thème

Quand l'utilisateur bascule le thème, les couleurs système changent. Une clInfoBk peut passer du blanc au vert ou d'une couleur à une texture. Ce changement surgira quand vous allouerez une nouveau handle de brosse. Gardez à l'esprit que la simple affectation Brush.Color:=clInfoBk n'alloue pas un handle de brosse. Le handle est alloué à l'utilisation. Par exemple:

Form1.Canvas.Brush.Color:=clInfoBk; // Cela ne créera pas une nouveau handle de brosse
Form1.Canvas.FillRect(10,10,50,50); // Cela va le créer avec la brosse du thème actif pour les bulles d'aide
...
// Si le thème change maintenant, le Brush.Handle est toujours alloué avec les anciennes valeurs
...
Form1.Canvas.FillRect(10,10,50,50); // cela va peindre avec la brosse de l'ancien thème
Form1.Canvas.Brush.Color:=clInfoBk; // affecter l'ancienne valeur ne créera pas un nouveau handle de brosse
Form1.Canvas.FillRect(10,10,50,50); // cela va peindre avec la brosse de l'ancien thème
Form1.Canvas.Brush.Color:=clRed;    // affectant une nouvelle couleur, l'ancien handle est invalide
Form1.Canvas.Brush.Color:=clInfoBk; // affectant une nouvelle couleur, l'ancien handle est invalide
Form1.Canvas.FillRect(10,10,50,50); // cela créera un nouveau handle et peindra avec le nouveau thème

Table des couleurs système

La table suivante liste les couleurs système et leur sens. Les employer en dehors du champ de leur définition est indéfini et le résultat dépend du widgetset et du thème. Par exemple, clDefault est la brosse du fond normale du contexte de périphérique utilisé. Si vous voulez peindre des éléments de boutons sur vos contrôles personnalisés, employez les fonctions de dessin de l'unité Themes.

Constante Définition LCL Notes Delphi Widgetset supporté
clNone Indique "ne pas peindre". L'employer comme couleur de contrôle est indéfini. Le contrôle ne deviendra pas transparent. - Tous
clDefault L'employer pour une brosse revient à employer la couleur de fond normal pour le contexte de périphérique cible.
  • Sur le canevas d'une fiche, un FillRect peindra une surface rectangulaire remplie avec le fond normal d'une fenêtre standard. Cela quelque puissent définir le widgetset et le thème. Cela peut être la couleur grise, un dégradé ou une image.
  • Sur le canevas d'une TListBox, cela peindra avec le fond normal, qui est souvent blanc dans Windows. Ainsi, pour une TListBox, clDefault est identique à clWindow.
  • L'utiliser comme couleur de crayon utilisera la couleur de ligne par défaut pour le contexte de périphérique.
  • L'utiliser comme couleur de fonte utilisera la couleur de texte par défaut pour le contexte de périphérique.
- Tous
clScrollBar Couleur du corps de barre de défilement - Tous
clBackground ? - Tous
clActiveCaption Barre de titre de la fenêtre active - Aucun
clInactiveCaption Barre de titre de fenêtre inactive - Aucun
clMenu Couleur de fond d'article de menu ordinaire - Aucun
clWindow La brosse de fond normal d'un texte non sélectionné. Défini pour des contrôles comme TEdit, TComboBox, TMemo, TListBox, TTreeView. - Aucun
clWindowFrame Couleur du cadre autour de la fenêtre - Aucun
clMenuText Couleur de police pour les menus à employer avec clMenu - Aucun
clWindowText Couleur de police d'un texte non sélectionné à employer avec clWindow - Aucun
clCaptionText Couleur de texte de la barre de titre de la fenêtre active - Aucun
clActiveBorder ? - Aucun
clInactiveBorder ? - Aucun
clAppWorkspace Fond de la fenêtre principale en MDI - Aucun
clHighlight La couleur de brosse d'un élement sélectionné - Aucun
clHighlightText Couleur de police de texte sélectionné (à employer avec clHighligh). - Aucun
clBtnFace Fond de bouton - Aucun
clBtnShadow Couleur de l'ombre d'un bouton (en bas à droite) utilisé pour réaliser un effet 3D - Aucun
clGrayText Couleur de police d'un élément désactivé - Aucun
clBtnText Couleur de police de bouton à utiliser avec clBtnFace - Aucun
clInactiveCaptionText Couleur de texte du titre d'une fenêtre inactive - Aucun
clBtnHighlight Couleur de surlignement de bouton (en haut à gauche) utilisé pour réaliser un effet 3D - Aucun
cl3DDkShadow ? - Aucun
cl3DLight ? - Aucun
clInfoText Couleur de police pour les bulles d'aide. A employer avec clInfoBk - Tous
clInfoBk Couleur de police pour les bulles d'aide. A employer avec clInfoText - Tous
clHotLight ? - Aucun
clGradientActiveCaption La seconde couleur utilisée pour faire le dégradé de la barre de titre de la fenêtre active - Aucun
clGradientInactiveCaption La seconde couleur utilisée pour faire le dégradé de la barre de titre de fenêtre inactive - Aucun
clMenuHighlight La couleur de fond d'un article de menu sélectionné - Aucun
clMenuBar Couleur de fond d'une barre de menu - Aucun
clForm ? - Aucun
clColorDesktop ? - Aucun
cl3DFace ? - Aucun
cl3DShadow ? - Aucun
cl3DHiLight ? - Aucun
clBtnHiLight Comme clBtnHighlight - Aucun

Dessin d'élément de thème sur vos contrôles personnalisés

L'unité Themes fournit des fonctions pour dessiner des éléments particuliers de contrôles standard. Par exemple, pour dessiner un signe d'expansion comme un TTreeView on utilise :

uses Themes;

...

procedure TYourCustomControl.Paint;
const
  PlusMinusDetail: array[Boolean {Hot}, Boolean {Expanded}] of TThemedTreeview =
  (
    (ttGlyphClosed, ttGlyphOpened),
    (ttHotGlyphClosed, ttHotGlyphOpened)
  );
var
  Details: TThemedElementDetails;
  R: TRect;
  Collapse: boolean;
begin
  ...
  //dessine un signe d'expansion selon le thème.
  Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);
  R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);
  ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);
  ...
end;