Delphi/Lazarus: Lesbare Schriftfarbe für beliebige Hintergrund-Farbe
Tipp von Stefan Trost | Letztes Update am 27.01.2023 | Erstellt am 02.11.2015
Wie wählt man eine geeignete Farbe für die Schrift aus, wenn der Hintergrund eine beliebige Farbe annehmen kann? Kürzlich habe ich mir diese Frage gestellt als ich einen eigenen Farbdialog programmiert habe.
Bei diesem Dialog wollte ich den Wert der Farbe stets auf der Farbe anzeigen und der Farbwert sollte natürlich stets lesbar bleiben, egal welche Hintergrundfarbe gewählt wurde. Programmiert habe ich dafür die folgende Funktion.
function GetContrastColorBlackOrWhite(const AColor: TColor): TColor; var R, G, B: single; begin R := GetRValue(AColor) * 0.25; G := GetGValue(AColor) * 0.625; B := GetBValue(AColor) * 0.125; if (R + G + B) > 128 then begin result := clBlack; end else begin result := clWhite; end; end;
Dieser Funktion kann man nun eine beliebige Farbe übergeben und man bekommt entweder schwarz oder weiß zurückgegeben, je nachdem welche dieser beiden Farben als Hintergrundfarbe oder Vordergrundfarbe besser passt.
Wenn wir dieser Funktion beispielsweise die Farbe Weiß übergeben, erhalten wir Schwarz als geeignete Schriftfarbe vor weißem Hintergrund. Wenn wir dieser Funktion dagegen die Farbe Schwarz übergeben, erhalten wir als geeignete Schriftfarbe Weiß. Natürlich funktioniert die Funktion nicht nur für diese Extremfälle, sondern auch für Grauwerte oder Töne aller anderen Farben. Für Gelb oder ein helles Rot, Grün oder Blau sowie hellere Grautöne erhalten wir die Schriftfarbe Schwarz, während dunklere Grautöne oder ein dunkles Rot, Grün oder Blau die Schriftfarbe Weiß zurückgibt.
Anwendungsbeispiel
Natürlich möchten wir uns auch ein kleines Anwendungsbeispiel ansehen. In dem folgenden Code setzen wir die Hintergrundfarbe eines Edit-Feldes auf schwarz und rufen die Funktion auf, um eine geeignete Schriftfarbe zu erhalten, die sich trotz des schwarzen Hintergrundes lesen lässt. Die Funktion wird uns die Farbe Weiß liefern.
Edit1.Color := clBlack; Edit1.Font.Color := GetContrastColorBlackOrWhite(clBlack);
Der Trick der Funktion ist, alle Farbwerte mit einem Faktor zur Gewichtung auf zu addieren und anschließend zu vergleichen, ob dieser Wert über oder unter 128 liegt. Natürlich kann man diese Grenze auch nach oben oder nach unten korrigieren, je nachdem wie schnell man den Sprung zwischen Weiß und Schwarz haben möchte.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
Delphi/Lazarus: Link zu einer Website in einer Anwendung setzen
Tutorial | 0 Kommentare
Ist das Liebeskummer oder was anderes?
Offene Frage | 1 Antwort
Delphi/Lazarus: 3 Wege um eine Zahl auf X Nachkommastellen zu runden
Tutorial | 0 Kommentare
SchriftDrucker druckt nicht alle Schriften - Was kann ich tun?
Artikel | 0 Kommentare
Delphi: Globale Behandlung von Fehlermeldungen (Exceptions)
Tutorial | 0 Kommentare
Schriftarten für Windows, Linux und Mac im Web
Artikel | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.