Difference between revisions of "Colors"
Paul Ishenin (talk | contribs) |
Paul Ishenin (talk | contribs) |
||
Line 64: | Line 64: | ||
|clInactiveCaption|| Inactive window titlebar || - || none | |clInactiveCaption|| Inactive window titlebar || - || none | ||
|---- | |---- | ||
− | |clMenu|| | + | |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 | |clWindow|| The normal background brush of unselected text. Defined for controls like TEdit, TComboBox, TMemo, TListBox, TTreeView.|| - || none |
Revision as of 04:58, 2 May 2010
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 | Scrollbar body | - | all |
clBackground | ? | - | 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 |
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>