Vordefinierte Farben in Lazarus

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Vordefinierte Farben in Lazarus

Beitrag von photor »

Hallo Forum,

ich habe gerade erfreut die Entdeckung gemacht, dass sich die Farben in meinem Programm mit TAChart, die ich nicht selbst definiert habe, mit der Umstellung des Gnome-Farbschemas vom normalen (hellen) auf das dunkle Thema, geändert/angepasst haben.
Farben, die ich z.B. so im Code definiert habe, bleiben natürlich wie definiert

Code: Alles auswählen

ChartAccel.Title.Font.Color:= clSilver;

der Titel in diesem Fall Silber(grau). Die nicht definierte (Schrift-)Farben haben sich aber z.B. von schwarz (auf hellem Hintergrund) auf hell (auf dunkelgrauem Hintergrund) geändert. Das gilt übrigens auch (bis auf wenige Ausnahmen) für die Lazarus-IDE.

Gibt es irgendwo eine Aufstellung, welche System-Farben z.B. für Fonts definiert sind, und wie ich diese selbst irgendwelchen Objekten (Schriften, Hintergrund, Linien im TAChart) zuweisen kann? Irgendwo müssen diese ja auch definiert worden sein - und zwar so, dass der eigentliche Farbwert von System vergeben wird.

Ciao,
Photor

PS: es kann sein, dass das spezifisch für Linux ist

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vordefinierte Farben in Lazarus

Beitrag von wp_xyz »

Ich denke, du meinst die Systemfarben: das sind die Farben, die in der Color-Combobox im Object-Inspector nach clNone kommen - diese passen sich dem Theme der Anwendung an. Du kannst die natürlich genauso in einem TAChart-Font einsetzen wie die "fest verdrahteten": Chart.Title.Font.Color := clCaptionText (statt clBlue im Default).

Aus Graphics.pas:

Code: Alles auswählen

const
  // The following colors match the predefined Delphi Colors
 
  // 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);
  StandardColorsCount = 16;
 
  // extended colors
  clMoneyGreen = TColor($C0DCC0);
  clSkyBlue    = TColor($F0CAA6);
  clCream      = TColor($F0FBFF);
  clMedGray    = TColor($A4A0A0);
  ExtendedColorCount = 4;
 
  // special colors
  clNone    = TColor($1FFFFFFF);
  clDefault = TColor($20000000);
 
  // system colors
  clScrollBar               = TColor(SYS_COLOR_BASE or COLOR_SCROLLBAR);
  clBackground              = TColor(SYS_COLOR_BASE or COLOR_BACKGROUND);
  clActiveCaption           = TColor(SYS_COLOR_BASE or COLOR_ACTIVECAPTION);
  clInactiveCaption         = TColor(SYS_COLOR_BASE or COLOR_INACTIVECAPTION);
  clMenu                    = TColor(SYS_COLOR_BASE or COLOR_MENU);
  clWindow                  = TColor(SYS_COLOR_BASE or COLOR_WINDOW);
  clWindowFrame             = TColor(SYS_COLOR_BASE or COLOR_WINDOWFRAME);
  clMenuText                = TColor(SYS_COLOR_BASE or COLOR_MENUTEXT);
  clWindowText              = TColor(SYS_COLOR_BASE or COLOR_WINDOWTEXT);
  clCaptionText             = TColor(SYS_COLOR_BASE or COLOR_CAPTIONTEXT);
  clActiveBorder            = TColor(SYS_COLOR_BASE or COLOR_ACTIVEBORDER);
  clInactiveBorder          = TColor(SYS_COLOR_BASE or COLOR_INACTIVEBORDER);
  clAppWorkspace            = TColor(SYS_COLOR_BASE or COLOR_APPWORKSPACE);
  clHighlight               = TColor(SYS_COLOR_BASE or COLOR_HIGHLIGHT);
  clHighlightText           = TColor(SYS_COLOR_BASE or COLOR_HIGHLIGHTTEXT);
  clBtnFace                 = TColor(SYS_COLOR_BASE or COLOR_BTNFACE);
  clBtnShadow               = TColor(SYS_COLOR_BASE or COLOR_BTNSHADOW);
  clGrayText                = TColor(SYS_COLOR_BASE or COLOR_GRAYTEXT);
  clBtnText                 = TColor(SYS_COLOR_BASE or COLOR_BTNTEXT);
  clInactiveCaptionText     = TColor(SYS_COLOR_BASE or COLOR_INACTIVECAPTIONTEXT);
  clBtnHighlight            = TColor(SYS_COLOR_BASE or COLOR_BTNHIGHLIGHT);
  cl3DDkShadow              = TColor(SYS_COLOR_BASE or COLOR_3DDKSHADOW);
  cl3DLight                 = TColor(SYS_COLOR_BASE or COLOR_3DLIGHT);
  clInfoText                = TColor(SYS_COLOR_BASE or COLOR_INFOTEXT);
  clInfoBk                  = TColor(SYS_COLOR_BASE or COLOR_INFOBK);
 
  clHotLight                = TColor(SYS_COLOR_BASE or COLOR_HOTLIGHT);
  clGradientActiveCaption   = TColor(SYS_COLOR_BASE or COLOR_GRADIENTACTIVECAPTION);
  clGradientInactiveCaption = TColor(SYS_COLOR_BASE or COLOR_GRADIENTINACTIVECAPTION);
  clMenuHighlight           = TColor(SYS_COLOR_BASE or COLOR_MENUHILIGHT);
  clMenuBar                 = TColor(SYS_COLOR_BASE or COLOR_MENUBAR);
  clForm                    = TColor(SYS_COLOR_BASE or COLOR_FORM);
 
  // synonyms: do not show them in color lists
  clColorDesktop            = TColor(SYS_COLOR_BASE or COLOR_DESKTOP);
  cl3DFace                  = TColor(SYS_COLOR_BASE or COLOR_3DFACE);
  cl3DShadow                = TColor(SYS_COLOR_BASE or COLOR_3DSHADOW);
  cl3DHiLight               = TColor(SYS_COLOR_BASE or COLOR_3DHIGHLIGHT);
  clBtnHiLight              = TColor(SYS_COLOR_BASE or COLOR_BTNHILIGHT);
 
  clFirstSpecialColor = clBtnHiLight;
 
  clMask = clWhite;
  clDontMask = clBlack;

Welcher RGB-Wert sich hinter einer Systemfarbe versteckt, kriegst du mit ColorToRGB(AColor) heraus (Unit Graphics).

In der Anwendung solltest du darauf achten, dass du die Farben mit "Caption" oder "Text" im Namen für die Schrift und die entsprechenden ohne diesen Zusatz für den Hintergrund verwendest (oder umgekehrt), denn das Farbschema der Anwendung ist so ausgelegt, dass diese Pärchen immer gut sichtbar sind. also

Code: Alles auswählen

Chart1.Title.Font.Color := clMenuText;
Chart1.Title.Brush.Color := clMenu;
Chart1.Color := clWindow;
chart1.BottomAxis.Title.Font.Color := clWindowText;
Chart1.LeftAxis.Title.Font.Color := clWindowText;
Chart1.BottomAxis.Marks.LabelFont.Color := clWindowText;
// etc

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Vordefinierte Farben in Lazarus

Beitrag von photor »

Moin wp_xyz,

Das ist ziemlich genau, was ich gesucht habe! Danke. Wusste halt nicht, wo suchen
Werde mich mal näher damit beschäftigen.

Merci,
Photor

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Vordefinierte Farben in Lazarus

Beitrag von photor »

Moin,

kurze Nachfrage: die Datei Graphics.{pas,inc} finde ich auf meinem ArchLinux-System nicht. Installiert sind die Source von fpc:

Code: Alles auswählen

[photor@Picard ~]$ pacaur -Ss lazarus
community/fpc-src 3.0.4-1 [Installiert]
    Sources for the FreePascal compiler (required by the Lazarus IDE)
community/lazarus 1.6.4-1 [Installiert]
    Delphi-like IDE for FreePascal common files
community/lazarus-gtk2 1.6.4-1 [Installiert]
    Delphi-like IDE for FreePascal gtk2 version
community/lazarus-qt 1.6.4-1
    Delphi-like IDE for FreePascal qt version
[ ... AUR-Pakete ...]

Wo kann ich die Datei (auch aus externen Quellen, SVN evtl.) finden? Ich würde gerne ein bisschen stöbern, um das ganze besser zu verstehen.

Ciao,
Photor

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vordefinierte Farben in Lazarus

Beitrag von wp_xyz »

Du schreibst einfach "Graphics" in die uses-Zeile und fährst mit der Maus darüber. Dann erscheint ein Hint-Fenster mit dem Pfad zu Graphics als Link; auf dem Link kann man auch klicken, und es wird Graphics.pas geöffnet. Oder: Du klickst bei gedrückter Ctrl-Taste auf den Unit-Namen "Graphics" - es wird wieder Graphics geöffnet. Oder: Wenn du zu einer Farbdeklaration willst, schreibst du die Farbe in den Quelltext, z.B. clRed und machst wieder den Ctrl-Klick, dann wird Graphics geöffnet und der Editor springt an die Stelle, wo clRed definiert ist.

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Vordefinierte Farben in Lazarus

Beitrag von photor »

Merci wp-xyz,

Wieder was gelernt.

Ciao,
Photor

Antworten