Difference between revisions of "Colors/fi"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Colors}} <br> = Värit = <br> LCL:ssä TColor on vakiovärityyppi. Se on yhteensopiva Delphin TColorin kanssa. TColor voi edustaa joko RGB (3x8bit) arvoa tai järjeste...")
 
Line 1: Line 1:
 
{{Colors}}
 
{{Colors}}
<br>
 
= Värit =
 
<br>
 
  
 +
==Overview==
  
[[LCL]]:ssä TColor on vakiovärityyppi. Se on yhteensopiva Delphin TColorin kanssa. TColor voi edustaa joko RGB (3x8bit) arvoa tai järjestelmän väriä kuten clDefault. LCL voi toimia myös fpImage-järjestelmän kanssa, joka käyttää TFPColor-tyyppiä (joka on RGBA (4x16bit), ei RGB (3x8bit) kuten TColor).
+
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).
  
== Muunnokset TColor- ja RGB-arvojen välillä ==
+
===Conversions between TColor and RGB values===
  
'''Graphics''' käännösyksikkö tarjoaa seuraavat toiminnot:
+
The '''Graphics''' [[Unit|unit]] provides the following [[Function|functions]]:
  
<syntaxhighlight>function Blue(rgb: TColor): BYTE; // does not work on system color
+
<syntaxhighlight lang="pascal">function Blue(rgb: TColor): BYTE; // does not work on system color
 
function Green(rgb: TColor): BYTE; // does not work on system color
 
function Green(rgb: TColor): BYTE; // does not work on system color
 
function Red(rgb: TColor): BYTE; // does not work on system color
 
function Red(rgb: TColor): BYTE; // does not work on system color
Line 20: Line 18:
 
function IsSysColor(AColor: TColorRef): Boolean;</syntaxhighlight>
 
function IsSysColor(AColor: TColorRef): Boolean;</syntaxhighlight>
  
 
+
===Convert TColor to/from string===
== TColor:n muunto merkkijonoksi ja päinvastoin ==
+
Functions to convert strings like "25500" or "[[Dollar_sign|$]]AA0088" or "clNavy" to TColor:
 
 
Seuraavat funktiot muuntaa merkkijonot kuten "25500", "$AA0088" tai "clNavy" TColoriksi:
 
  
 
* StringToColor
 
* StringToColor
 
* StringToColorDef
 
* StringToColorDef
  
Voit muuntaa TColorin arvon merkkijonoksi kuten "clNavy" tai "$AA0002":
+
To convert TColor to a nice string like "clNavy" or "$AA0002":
  
* ColorToString  
+
* ColorToString
  
== Muunna TColor HTML-merkkijonoksi #rrggbb ==
+
===Convert TColor to/from HTML string #rrggbb===
  
Katso koodi kohdasta [[Convert color to/from HTML]].
+
See code in [[Convert color to/from HTML]].
  
== Taulukko vakioväreistä ==
+
==Table of standard colors==
  
Tarjotaan noin 20 ennalta määritettyä värivakiota, jotka ovat [[Delphi]]-yhteensopivia:
+
About 20 predefined color [[Constant|constants]] are provided, which are Delphi-compatible:
 +
<!--<syntaxhighlight lang="pascal">  // 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"
 
|-
 
|-
! Värivakio
+
! Colour constant
! Merkitys
+
! Meaning
! [[Hexadecimal/fi|Heksadesimaalinen]] arvo käytettäväksi TColor:n kanssa
+
! [[Hexadecimal]] value for use with TColor
! Esimerkki
+
! Example
 
|-
 
|-
 
| clBlack
 
| clBlack
Line 140: Line 155:
 
| Cream
 
| Cream
 
| TColor($F0FBFF);
 
| TColor($F0FBFF);
| style="background: #FFFBF0;" | Lazarus 1.2 ja uudemmat
+
| style="background: #FFFBF0;" | Lazarus 1.2 and newer
 
|-
 
|-
 
| clMedGray   
 
| clMedGray   
 
| Medium Grey
 
| Medium Grey
 
| TColor($A4A0A0);
 
| TColor($A4A0A0);
| style="background: #A0A0A4;" | Lazarus 1.2 ja uudemmat
+
| style="background: #A0A0A4;" | Lazarus 1.2 and newer
 
|-
 
|-
 
| clMoneyGreen   
 
| clMoneyGreen   
 
| Mint Green
 
| Mint Green
 
| TColor($C0DCC0);
 
| TColor($C0DCC0);
| style="background: #C0DCC0;" | Lazarus 1.2 ja uudemmat
+
| style="background: #C0DCC0;" | Lazarus 1.2 and newer
 
|-
 
|-
 
| clSkyBlue   
 
| clSkyBlue   
 
| Sky Blue
 
| Sky Blue
 
| TColor($F0CAA6);
 
| TColor($F0CAA6);
| style="background: #A6CAF0;" | Lazarus 1.2 ja uudemmat
+
| style="background: #A6CAF0;" | Lazarus 1.2 and newer
 
|}
 
|}
  
== Järjestelmän värit ==
+
==System colors==
=== Esimerkki: clInfoBk, clInfoText ===
+
 
 +
===Example: clInfoBk, clInfoText===
  
Järjestelmävärit ovat värivakioita, joilla on erityinen merkitys. Niiden todellinen arvo riippuu kontekstista ja teemasta. Ne eivät ole yksinkertaisia ​​värejä. Esimerkiksi '''clInfoBk''':
+
System colors are color constants with a special meaning. Their real value depends on the context and theme. They are not simple colors.
 +
For example '''clInfoBk''':
  
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk;  // // käytä vihje-ikkunan oletustaustaväriä
+
<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:
  
Vihje-ikkunassa MS Windowsissa voi olla valkoinen tausta, joten yllä oleva piirtää valkoisella. Linuxissa / gtk2: ssa se voi olla metallinen tekstuuri, joten yllä oleva kuvioi kyseisellä tekstuurilla. Jos haluat laittaa tekstiä tähän, tarvitset vastaavan värin kuin '''clInfoText''', muuten teksti voi olla käyttäjän kannalta lukukelvoton. Esimerkiksi:
+
<syntaxhighlight lang="pascal">Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
 
 
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk;  // käytä vihje-ikkunan oletustaustaväriä
 
 
Form1.Canvas.FillRect(10,10,50,50);
 
Form1.Canvas.FillRect(10,10,50,50);
Form1.Canvas.Font.Color:=clInfoText;  // käytä vihjeikkunan oletustekstiväriä
+
Form1.Canvas.Font.Color:=clInfoText;  // use the default text color of a hint window
 
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.
 +
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.
  
Järjestelmän väriä '''clInfoBk''' ei voi käyttää Pen.Color:lla eikä Font.Color:lla. Jos näin tehdään, tulos on määrittelemätön ja riippuu widgetet- ja käyttäjäteemasta.
+
===Theme changes===
Sama koskee myös väriä '''clInfoText''': Sitä voidaan käyttää vain Font.Color:na. Sen käyttö Brush.Color:na ei ehkä toimi. Tällä hetkellä kaikki widgetit sallivat sen käytön myös Pen.Color:na.
 
  
=== Teeman muutokset ===
+
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:
  
Kun käyttäjä vaihtaa teeman, järjestelmän värit muuttuvat. Väri '''clInfoBk''' saattaa muuttua valkoisesta siniseksi tai yhtenäisestä väristä tekstuuriksi. Tämä muutos tapahtuu, kun jaat uuden Brush Handle. Muista, että yksinkertainen tehtävä Brush.Color:=clInfoBk ei jaa Brush Handle. Brush Handle on jaettu käyttöön. Esimerkiksi:
+
<syntaxhighlight lang="pascal">Form1.Canvas.Brush.Color:=clInfoBk; // this will not create a new brush handle
 
+
Form1.Canvas.FillRect(10,10,50,50); // this will create the brush handle with the currently active theme brush for hint windows
<syntaxhighlight>Form1.Canvas.Brush.Color:=clInfoBk; // tämä ei luo uutta brush handle:a
 
Form1.Canvas.FillRect(10,10,50,50); // tämä luo brush handletällä hetkellä aktiivisen teeman brush vihjeikkunoita varten
 
 
...
 
...
 +
// if the theme changes in this moment the Brush.Handle is still allocated with the old values
 
...
 
...
// jos teema muuttuu niin tällä hetkellä Brush.Handle on edelleen varattu vanhojen arvojen kanssa
+
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
...
+
Form1.Canvas.Brush.Color:=clInfoBk; // assigning the old value will not create a new brush handle
Form1.Canvas.FillRect(10,10,50,50); // tämä maalaa vanhan teeman brush:lla
+
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
Form1.Canvas.Brush.Color:=clInfoBk; // vanhan arvon liittäminen ei luo uutta brush handle:a
+
Form1.Canvas.Brush.Color:=clRed;    // assigning a new color, old Handle invalid
Form1.Canvas.FillRect(10,10,50,50); // tämä maalaa vanhan teeman brush:lla
+
Form1.Canvas.Brush.Color:=clInfoBk; // assigning a new color, old Handle invalid
Form1.Canvas.Brush.Color:=clRed;    // uuden värin määrittäminen, vanha Handle ei kelpaa
+
Form1.Canvas.FillRect(10,10,50,50); // this will create a new handle and paint with the new theme</syntaxhighlight>
Form1.Canvas.Brush.Color:=clInfoBk; // uuden värin määrittäminen, vanha Handle ei kelpaa
 
Form1.Canvas.FillRect(10,10,50,50); // tämä luo uuden handlen ja maalaa uuden teeman avulla
 
</syntaxhighlight>
 
 
 
  
== Taulukko järjestelmän väreistä ==
+
===Table of system colors===
  
Seuraavassa taulukossa luetellaan järjestelmän värit ja niiden merkitys. Niiden käyttäminen määritelmän soveltamisalan ulkopuolella on määrittelemätön ja tulos riippuu widgetetistä ja teemasta.  
+
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'''.
Esimerkiksi '''clDefault''' on normaali taustaväri on käytetyn laitteen taustakuvio. Jos halutaan maalata painikkeita omilla mukautetuilla ohjaimilla, käytä yksikön '''Themes''' piirustusfunktioita.
 
  
 
{| class="wikitable"
 
{| class="wikitable"
! Vakio !! LCL määrittely !! Delphi huomiot !! Tuetut Widgetsets
+
! Constant !! LCL definition !! Delphi notes !! Supported Widgetsets
 
|----
 
|----
|clNone||Ilmaisee "ei piirretä". Sen käyttäminen kontrollin värinä on määrittelemätön. kontrolli ei tule läpinäkyväksi.|| - || kaikki
+
|clNone||Indicates "do not paint". Using it as Control's color is undefined. The control will not get transparent.|| - || all
 
|----
 
|----
|clDefault|| Käyttämällä sitä Brush-värinä niin käytetään tavallisen device context (DC, laitteen konteksti) normaalia taustaväriä
+
|clDefault||Using it for Brush will use the normal background brush of the target DC (device context).
* Lomakkeen canvas:ssa ''FillRect'' maalaa suorakulmaisen alueen, joka on täynnä normaalin ikkunan normaalia taustaa. Tämä on mitä widgetset ja teema määrittelevät. Tämä voi olla harmaa, liukuväri tai kuva.
+
* 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.  
* Käyttämällä clDefault TListBoxin canvasiin niin maalataan se normaalilla taustalla, joka on yleensä valkoinen Windowsissa. Joten TListBox clDefault on sama kuin clWindow.
+
* 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.  
* Käyttämällä sitä Pen color:na niin se on laitteeen oletusarvoinen viivan väri.  
+
* Using it as Pen color will use the default line color for the device context.  
* Käyttämällä sitä Font color:na niin se on laitteeen oletusarvoinen tekstin väri.  
+
* Using it as Font color will use the normal text color of the device context.  
|| - || kaikki
+
|| - || all
 
|----
 
|----
|clScrollBar|| Vierityspalkin (Scrollbar) runko || - || kaikki
+
|clScrollBar|| Scrollbar body || - || all
 
|----
 
|----
|clBackground|| Työpöydän taustaväri || - || kaikki
+
|clBackground|| Desktop background color || - || all
 
|----
 
|----
|clActiveCaption|| Aktiivinen ikkunan otsikkorivi || - || ei mikään
+
|clActiveCaption|| Active window titlebar || - || none
 
|----
 
|----
|clInactiveCaption|| Ei-aktiivinen ikkunan otsikkorivi || - || ei mikään
+
|clInactiveCaption|| Inactive window titlebar || - || none
 
|----
 
|----
|clMenu|| vakio valikkokohdan taustaväri || - || ei mikään
+
|clMenu|| Regular menu item background color || - || none
 
|----
 
|----
|clWindow|| Valitsemattoman tekstin normaali taustaväri. Määritetty kontrolleille, kuten TEdit, TComboBox, TMemo, TListBox, TTreeView.|| - || ei mikään
+
|clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| - || none
 
|----
 
|----
|clWindowFrame|| Kehyksen väri ikkunan ympärillä || - || ei mikään
+
|clWindowFrame|| Color of frame around the window || - || none
 
|----
 
|----
|clMenuText|| Fontin väri, jota käytetään yhdessä clMenu:n kanssa || - || ei mikään
+
|clMenuText|| The font color to use together with clMenu || - || none
 
|----
 
|----
|clWindowText|| Fontin väri, jota käytetään yhdessä clWindow:n kanssa || - || ei mikään
+
|clWindowText|| Font color to use together with clWindow || - || none
 
|----
 
|----
|clCaptionText|| Aktiivisen ikkunan otsikkorivin tekstin väri || - || ei mikään
+
|clCaptionText|| Active window titlebar text color || - || none
 
|----
 
|----
|clActiveBorder||?|| - || ei mikään
+
|clActiveBorder||?|| - || none
 
|----
 
|----
|clInactiveBorder||?|| - || ei mikään
+
|clInactiveBorder||?|| - || none
 
|----
 
|----
|clAppWorkspace|| MDIMain lomakkeen taustaväri || - || ei mikään
+
|clAppWorkspace|| MDIMain form background || - || none
 
|----
 
|----
|clHighlight|| brush color kun elementti on valittu || - || ei mikään
+
|clHighlight|| The brush color of selected element || - || none
 
|----
 
|----
|clHighlightText|| Font color kun teksti on valittu (käytetään clHighligh kanssa). || - || ei mikään
+
|clHighlightText|| Font color of selected text (to use together with clHighligh). || - || none
 
|----
 
|----
|clBtnFace|| Painikkeen taustaväri || - || ei mikään
+
|clBtnFace|| Button background || - || none
 
|----
 
|----
|clBtnShadow|| Painikkeen varjostusväri (Bottom Right) käytetään 3D-efektin saavuttamiseen || - || ei mikään
+
|clBtnShadow|| Button shadow color (bottom right) used to achieve 3D effect || - || none
 
|----
 
|----
|clGrayText|| font color kielletyillä elementeillä || - || ei mikään
+
|clGrayText|| The font color of disabled element || - || none
 
|----
 
|----
|clBtnText|| Painikkeen font color käytetään clBtnFace:n kanssa || - || ei mikään
+
|clBtnText|| Button font color to use together with clBtnFace || - || none
 
|----
 
|----
|clInactiveCaptionText|| Ei-aktiivinen ikkunan otsikkorivin tekstin väri || - || ei mikään
+
|clInactiveCaptionText|| Inactive window titlebar text color || - || none
 
|----
 
|----
|clBtnHighlight|| BPainikkeen korostusväri (Top Left) käytetään 3D-efektin saavuttamiseen || - || ei mikään
+
|clBtnHighlight|| Button highlight color (top left) used to achieve 3D effect || - || none
 
|----
 
|----
|cl3DDkShadow||?|| - || ei mikään
+
|cl3DDkShadow||?|| - || none
 
|----
 
|----
|cl3DLight||?|| - || ei mikään
+
|cl3DLight||?|| - || none
 
|----
 
|----
|clInfoText|| Vihjeiden fontin väri. Käytä yhdessä clInfoBk:n kanssa  || - || kaikki
+
|clInfoText|| Font color for hints. Use together with clInfoBk || - || all
 
|----
 
|----
|clInfoBk|| Brush väri vihjeitä varten. Käytä yhdessä clInfoText:n kanssa || - || kaikki
+
|clInfoBk|| Brush color for hints. Use together with clInfoText || - || all
 
|----
 
|----
|clHotLight||?|| - || ei mikään
+
|clHotLight||?|| - || none
 
|----
 
|----
|clGradientActiveCaption|| Toinen väri, jota käytetään aktiivisen ikkunan otsikkorivin gradientin tekemiseen || - || ei mikään
+
|clGradientActiveCaption|| The second color used to make gradient of active window titlebar || - || none
 
|----
 
|----
|clGradientInactiveCaption|| Toinen väri, jota käytetään ei-aktiivisen ikkunan otsikkorivin gradientin tekemiseen || - || ei mikään
+
|clGradientInactiveCaption|| The second color used to make gradient for inactive window titlebar || - || none
 
|----
 
|----
|clMenuHighlight|| Valitun valikkokohdan taustaväri || - || ei mikään
+
|clMenuHighlight|| The background color of selected menu item || - || none
 
|----
 
|----
|clMenuBar|| Valikkokohdan taustaväri || - || ei mikään
+
|clMenuBar|| The Backround color of menu bar || - || none
 
|----
 
|----
|clForm||?|| - || ei mikään
+
|clForm||?|| - || none
 
|----
 
|----
|clColorDesktop||?|| - || ei mikään
+
|clColorDesktop||?|| - || none
 
|----
 
|----
|cl3DFace||?|| - || ei mikään
+
|cl3DFace||?|| - || none
 
|----
 
|----
|cl3DShadow||?|| - || ei mikään
+
|cl3DShadow||?|| - || none
 
|----
 
|----
|cl3DHiLight||?|| - || ei mikään
+
|cl3DHiLight||?|| - || none
 
|----
 
|----
|clBtnHiLight|| Sama kuin clBtnHighlight || - || ei mikään
+
|clBtnHiLight|| Same as clBtnHighlight || - || none
 
|}
 
|}
  
== Järjestelmävärin rgb-arvojen löytäminen ==
+
=== Finding the rgb values of a system color ===
Käytä funktiota <tt>ColorToRGB</tt> (in unit <tt>Graphics</tt> ) järjestelmän värin rgb-komponenttien määrittämiseksi.  
+
Use the function <tt>ColorToRGB</tt> (in unit <tt>Graphics</tt> to determine the rgb components of a system color. This functions detects whether a color is a system color and, if this is true, looks up the system color in the themes color. The returned [[Longint]] can be understood as a normal color:
Tämä funktio havaitsee, onko väri värijärjestelmä, ja jos tämän arvo on true, näyttää palauttaa järjestelmän värin teeman värissä.
+
<syntaxhighlight lang="pascal">// This example has a TColorBox on a form and uses this OnChange handler for the TColorbox:
Palautettu [[Longint]] voidaan ymmärtää tavalliseksi väriksi:
 
<syntaxhighlight>// Tässä esimerkissä on TColorBox lomakkeellaa ja käyttää tämän OnChange-käsittelijää
 
 
procedure TForm1.ColorBox1Change(Sender: TObject);
 
procedure TForm1.ColorBox1Change(Sender: TObject);
 
var
 
var
Line 300: Line 309:
 
end; </syntaxhighlight>
 
end; </syntaxhighlight>
  
==Piirrä teeman elementtejä mukautetuissa ohjauksissa (custom controls)==
+
==Drawing theme elements on your custom controls==
  
Käännösyksikkö (unit) '''Themes''' tarjoaa funktioita, joilla piirretään standardinhallinnan yksittäisiä elementtejä. Esimerkiksi piirtomerkin piirtäminen kuten [[TTreeView]] käyttää seuraavaa koodia:
+
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:
  
<syntaxhighlight>uses Themes;
+
<syntaxhighlight lang="pascal">uses Themes;
  
 
...
 
...

Revision as of 15:55, 20 July 2019

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

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

Conversions between TColor and RGB values

The Graphics unit provides the following functions:

function Blue(rgb: TColor): BYTE; // does not work on system color
function Green(rgb: TColor): BYTE; // does not work on system color
function Red(rgb: TColor): BYTE; // does not work on system color
function RGBToColor(R, G, B: Byte): TColor;
procedure RedGreenBlue(rgb: TColor; out Red, Green, Blue: Byte); // does not work on system color
function FPColorToTColor(const FPColor: TFPColor): TColor;
function TColorToFPColor(const c: TColor): TFPColor; // does not work on system color
function IsSysColor(AColor: TColorRef): Boolean;

Convert TColor to/from string

Functions to convert strings like "25500" or "$AA0088" or "clNavy" to TColor:

  • StringToColor
  • StringToColorDef

To convert TColor to a nice string like "clNavy" or "$AA0002":

  • ColorToString

Convert TColor to/from HTML string #rrggbb

See code in Convert color to/from HTML.

Table of standard colors

About 20 predefined color constants are provided, which are Delphi-compatible:

Colour constant Meaning Hexadecimal value for use with TColor Example
clBlack Black TColor($000000);
clMaroon Maroon TColor($000080);
clGreen Green TColor($008000);
clOlive Olive Green TColor($008080);
clNavy Navy Blue TColor($800000);
clPurple Purple TColor($800080);
clTeal Teal TColor($808000);
clGray Grey TColor($808080);
clSilver Silver TColor($C0C0C0);
clRed Red TColor($0000FF);
clLime Lime Green TColor($00FF00);
clYellow Yellow TColor($00FFFF);
clBlue Blue TColor($FF0000);
clFuchsia Fuchsia TColor($FF00FF);
clAqua Aqua TColor($FFFF00);
clLtGray Light Grey TColor($C0C0C0); clSilver alias
clDkGray Dark Grey TColor($808080); clGray alias
clWhite White TColor($FFFFFF);
clCream Cream TColor($F0FBFF); Lazarus 1.2 and newer
clMedGray Medium Grey TColor($A4A0A0); Lazarus 1.2 and newer
clMoneyGreen Mint Green TColor($C0DCC0); Lazarus 1.2 and newer
clSkyBlue Sky Blue TColor($F0CAA6); Lazarus 1.2 and newer

System colors

Example: 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. For example clInfoBk:

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

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:

Form1.Canvas.Brush.Color:=clInfoBk;  // use the default background brush of a hint window
Form1.Canvas.FillRect(10,10,50,50);
Form1.Canvas.Font.Color:=clInfoText;  // use the default text color of a hint window
Form1.Canvas.TextOut(10,10,'Hint');

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

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:

Form1.Canvas.Brush.Color:=clInfoBk; // this will not create a new brush handle
Form1.Canvas.FillRect(10,10,50,50); // this will create the brush handle with the currently active theme brush for hint windows
...
// if the theme changes in this moment the Brush.Handle is still allocated with the old values
...
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
Form1.Canvas.Brush.Color:=clInfoBk; // assigning the old value will not create a new brush handle
Form1.Canvas.FillRect(10,10,50,50); // this will paint with the old theme brush
Form1.Canvas.Brush.Color:=clRed;    // assigning a new color, old Handle invalid
Form1.Canvas.Brush.Color:=clInfoBk; // assigning a new color, old Handle invalid
Form1.Canvas.FillRect(10,10,50,50); // this will create a new handle and paint with the new theme

Table of system colors

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.

Constant LCL definition Delphi notes Supported Widgetsets
clNone Indicates "do not paint". Using it as Control's color is undefined. The control will not get transparent. - all
clDefault Using it for Brush will use the normal background brush of the target DC (device context).
  • 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.
  • 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.
  • Using it as Pen color will use the default line color for the device context.
  • Using it as Font color will use the normal text color of the device context.
- all
clScrollBar Scrollbar body - all
clBackground Desktop background color - all
clActiveCaption Active window titlebar - none
clInactiveCaption Inactive window titlebar - none
clMenu Regular menu item background color - none
clWindow The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView. - none
clWindowFrame Color of frame around the window - none
clMenuText The font color to use together with clMenu - none
clWindowText Font color to use together with clWindow - none
clCaptionText Active window titlebar text color - none
clActiveBorder ? - none
clInactiveBorder ? - none
clAppWorkspace MDIMain form background - none
clHighlight The brush color of selected element - none
clHighlightText Font color of selected text (to use together with clHighligh). - none
clBtnFace Button background - none
clBtnShadow Button shadow color (bottom right) used to achieve 3D effect - none
clGrayText The font color of disabled element - none
clBtnText Button font color to use together with clBtnFace - none
clInactiveCaptionText Inactive window titlebar text color - none
clBtnHighlight Button highlight color (top left) used to achieve 3D effect - none
cl3DDkShadow ? - none
cl3DLight ? - none
clInfoText Font color for hints. Use together with clInfoBk - all
clInfoBk Brush color for hints. Use together with clInfoText - all
clHotLight ? - none
clGradientActiveCaption The second color used to make gradient of active window titlebar - none
clGradientInactiveCaption The second color used to make gradient for inactive window titlebar - none
clMenuHighlight The background color of selected menu item - none
clMenuBar The Backround color of menu bar - none
clForm ? - none
clColorDesktop ? - none
cl3DFace ? - none
cl3DShadow ? - none
cl3DHiLight ? - none
clBtnHiLight Same as clBtnHighlight - none

Finding the rgb values of a system color

Use the function ColorToRGB (in unit Graphics to determine the rgb components of a system color. This functions detects whether a color is a system color and, if this is true, looks up the system color in the themes color. The returned Longint can be understood as a normal color:

// This example has a TColorBox on a form and uses this OnChange handler for the TColorbox:
procedure TForm1.ColorBox1Change(Sender: TObject);
var
  c: TColor;
begin
  c := ColorToRGB(ColorBox1.Selected);
  Caption := Format('R%d G%d B%d', [Red(c), Green(c), Blue(c)]);
end;

Drawing theme elements on your custom controls

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:

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
  ...
  //draw a themed expand sign.
  Details := ThemeServices.GetElementDetails(PlusMinusDetail[False, Collapse]);
  R := Rect(ALeft, ATop, ARight + 1, ABottom + 1);
  ThemeServices.DrawElement(Canvas.Handle, Details, R, nil);
  ...
end;