Colors
Overview
The standard color in the LCL is TColor, which is compatible to Delphi's TColor. TColor can be an RGB, 3x8bit, value or a system color like clDefault. The LCL can work together with the fpImage system which uses the TFPColor (RGBA, 4x16bit).
Convert TColor to RGB and back
The unit Graphics provide the following functions:
<Delphi> 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 </Delphi>
There are some predefined color constants:
<Delphi>
// 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);
</Delphi>
System colors
System colors are color constants with a special meaning. Their real value depends on the context and theme. 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 clBackground 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 | drawsnothing. 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 | ? | - | all |
clBackground | Using it for Brush will use the normal background brush of the target DC (device context). See clDefault. Can not be used for Pen nor Font. | - | all |
clActiveCaption | Font color for selected text. Defined for controls with editable text like TEdit, TComboBox, TMemo, TListBox, TTreeView. | - | none |
clInactiveCaption | ? | - | none |
clMenu | ? | - | none |
clWindow | the normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView. | - | none |
clWindowFrame | ? | - | none |
clMenuText | ? | - | none |
clWindowText | ? | - | none |
clCaptionText | ? | - | none |
clActiveBorder | ? | - | none |
clInactiveBorder | ? | - | none |
clAppWorkspace | ? | - | none |
clHighlight | ? | - | none |
clHighlightText | Font color of selected text. | - | none |
clBtnFace | ? | - | none |
clBtnShadow | ? | - | none |
clGrayText | ? | - | none |
clBtnText | ? | - | none |
clInactiveCaptionText | ? | - | none |
clBtnHighlight | ? | - | 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 | ? | - | none |
clGradientInactiveCaption | ? | - | none |
clMenuHighlight | ? | - | none |
clMenuBar | ? | - | none |
clForm | ? | - | none |
clColorDesktop | ? | - | none |
cl3DFace | ? | - | none |
cl3DShadow | ? | - | none |
cl3DHiLight | ? | - | none |
clBtnHiLight | ? | - | none |
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:
<Delphi> 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; </Delphi>