![]() |
TGauge ForeColor
Folgenden Code verwende ich, um die Hintergrund/Vordergrundfarbe eines gauges zu ändern (je nach Progress)
Delphi-Quellcode:
1. Ja es geht schöner, mit else und so, aber ich habs jetzt zum testen mal so gemacht
Gauge.Progress := Gauge.Progress + 1;
if Gauge.Progress > 20 then begin // vorher clBtnFace Gauge.BackColor := $0002FDCB; Gauge.ForeColor := $0002FDCB; end; if Gauge.Progress > 40 then begin // vorher clBtnFace Gauge.BackColor := $0000B3FF; Gauge.ForeColor := $0000B3FF; end; if Gauge.Progress > 60 then begin // vorher clBtnFace Gauge.BackColor := $000079FF; Gauge.ForeColor := $000079FF; end; if Gauge.Progress > 80 then begin // vorher clBtnFace Gauge.BackColor := $000053FF; Gauge.ForeColor := $000053FF; end; if Gauge.Progress > 100 then begin // vorher clBtnFace Gauge.BackColor := clRed; Gauge.ForeColor := clRed; end; 2. Bei wechseln der Farbe flackert das immer so schlimm. Kann man das nicht "sanfter" machen? |
Re: TGauge ForeColor
Ja mit dem Else ;-)
Bei 90 bspw. änderst du die Farbe 5 mal hintereinander... Und ein DoubleBuffered := true; würde auch noch helfen. |
Re: TGauge ForeColor
Zitat:
Delphi-Quellcode:
?
DoubleBuffered := True;
if Gauge.Progress > 80 then begin // vorher clBtnFace gauge.BackColor := $000053FF; gauge.ForeColor := $000053FF gauge.BackColor := $000053FF; gauge.ForeColor := $000053FF; gauge.BackColor := $000053FF; gauge.ForeColor := $000053FF; gauge.BackColor := $000053FF; gauge.ForeColor := $000053FF; gauge.BackColor := $000053FF; gauge.ForeColor := $000053FF; end; Was bewirkt das DoubleBuffered? |
Re: TGauge ForeColor
Nein. Nimm mal Deinen Source von oben und setze ein else vor die ifs (ab dem 2.). DoubleBuffered bewirkt, dass das Control eine Bitmap mit dem neuen grafischen Zustand im Speicher erzeugt und diese dann mit einem Schlag auf seinen Canvas zeichnet.
|
Re: TGauge ForeColor
Oder lass die ifs ganz weg und nimm case.
Delphi-Quellcode:
case Gauge.Progress of
0..19 : Machwas1; 20..39: Machwas2; 40..59: Machwas3; ... else Machwasganzanderes; end; |
Re: TGauge ForeColor
Delphi-Quellcode:
Ok, so ist es jetzt
Gauge.Progress := Gauge.Progress + 1;
DoubleBufferd := True; if Gauge.Progress > 20 then begin // vorher clBtnFace Gauge.BackColor := $0002FDCB; Gauge.ForeColor := $0002FDCB; end else if Gauge.Progress > 40 then begin // vorher clBtnFace Gauge.BackColor := $0000B3FF; Gauge.ForeColor := $0000B3FF; end else if Gauge.Progress > 60 then begin // vorher clBtnFace Gauge.BackColor := $000079FF; Gauge.ForeColor := $000079FF; end else if Gauge.Progress > 80 then begin // vorher clBtnFace Gauge.BackColor := $000053FF; Gauge.ForeColor := $000053FF; end else if Gauge.Progress > 100 then begin // vorher clBtnFace Gauge.BackColor := clRed; Gauge.ForeColor := clRed; end; Nur leider ist es so, dass mit dem else er die farbe nicht wechselt ;) |
Re: TGauge ForeColor
In dem Fall musst du zuerst auf > 100 prüfen, dann auf > 80 etc. pp. Denn größer als 20 ist alles, klar dass somit nur das erste ausgeführt wird.
|
Re: TGauge ForeColor
Klar, Du musst die Reihenfolge auch absteigend gestalten (hatte ich vergessen zu erwähnen). Wenn Progress > 80 ist er auch automatisch > 20, oder? :zwinker:
Aber die case-Lösung ist eh besser. :mrgreen: |
Re: TGauge ForeColor
Machs mit dem case ;-)
WEIL: Der erste Aufruf ist immer wahr sobald es größer 20 ist, ist es auch größer 40 usw. -> du kommst garnicht in das else |
Re: TGauge ForeColor
Dass das rückwerts geschrieben werden muss hätte mir auch einfallen können :wall: wtf..
Ist doch eigentlich auch logisch. Ich probiere es mal mit dem Case und gucke mit das DoubleBuffered was näher an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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 by Thomas Breitkreuz