![]() |
Werte farblich darstellen
Ich habe Wert, sagen wir von 1 bis 200, diese möchte ich nun farblich darstellen, wie man es von Temperaturen kennt: niedrige Temperaturen blau über gelb, orange zu rot für warme Temperaturen.
Das:
Delphi-Quellcode:
liefert nur sehr unbefridigende Resultatet. Hat jemand eine Funktion zu Hause rumliegen, die mir in Abhängigkeit des Wertes eine passenden Farbe liefert?
case cnt of
0: StringGrid1.Canvas.Brush.Color := clWhite; 1..10: StringGrid1.Canvas.Brush.Color := clNavy; 11..20: StringGrid1.Canvas.Brush.Color := clBlue; 21..30: StringGrid1.Canvas.Brush.Color := clGreen; 31..40: StringGrid1.Canvas.Brush.Color := clLime; 41..50: StringGrid1.Canvas.Brush.Color := clYellow; 51..60: StringGrid1.Canvas.Brush.Color := cl else StringGrid1.Canvas.Brush.Color := clRed; end; Danke schon mal für eure Mühe. |
Re: Werte farblich darstellen
Hallo Luckie,
du koenntest einen Farbverlauf von gruen ueber blau zu gelb, dann orange und Rot machen, und diesen in 200 Stufen aufteilen. Dazu hatten wir erst letztens was ( ![]() Anschliessend nimmst du einen der 200 Werte her. Mit etwas Planung laesst sich dies auch beliebig erweitern, so dass du nicht auf 200 Werte beschraenkt bist. Greetz alcaeus |
Re: Werte farblich darstellen
TGradient ist nicht unbedingt das, was ich suche. Ich bräuchte mehr eine Formel die mir zu einem Wert zwischen 1 und 200 eine passenden Farbe liefert.
So was irgendwie:
Delphi-Quellcode:
Nur hier stimmt natürlich die Gewichtung der Frabanteile nicht. Nur leider habe ich von Farben und der Theorie dazu keine richtige Ahnung.
StringGrid1.Canvas.Brush.Color := (10*cnt+10*cnt+10*cnt);
|
Re: Werte farblich darstellen
RGB ist ein additives Farbsystem.
Um nun eine Abstufung zu ermitteln Bildet man einfach nur den Zwischenwert mittels Verhältnisgleichung:
Delphi-Quellcode:
So könnte das zum Bsp aussehen.
function GetMixColor(adwStartColor, adwStopColor : Cardinal; afPos : Extended) : Cardinal;
function Clc(abStart, abStop : Byte) : Byte; begin Result := abStart + Round((abStop - abStart) * afPos); end; begin Result := Rgb(Clc(GetRValue(adwStartColor), GetRValue(adwStopColor)), Clc(GetGValue(adwStartColor), GetGValue(adwStopColor)), Clc(GetBValue(adwStartColor), GetBValue(adwStopColor))); end; btw.: Die Funktion selber ist etwas langsam und könnte etwas Tuning vertragen. |
Re: Werte farblich darstellen
Das Problem ist, ich habe keine Anfangs- und Endfarbe. Wenn ich 1 habe soll die Farbe tief blau, bei 75 grün, bei 150 gelb/orange und bei 200 dunkel rot sein. Und dazwischen eben schön mit den Zwischenstufen.
Kommando zurück, das ist natürlcih die Lösung ich Depp. :wall: |
Re: Werte farblich darstellen
Dazu musst du deine Bereich unterteilen.
Delphi-Quellcode:
151..200: Result := GetMixColor(???, Rgb(255, 0, 0), (i - 151) / 50);[/delphi]
1..75: Result := GetMixColor(Rgb(0, 0, 255), Rgb(0, 255, 0), (i - 1) / 75);
76..150: Result := GetMixColor(???, ???, (i - 76) / 75); ??? - leider weis ich die Farbwerte um diese Zeit nicht mehr. |
Re: Werte farblich darstellen
Nein, muss ich nicht. Anfangswert ist 1 und Endwert ist 200 und fPos wäre bei mir cnt.
Allerdings bringt diese hier ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz