AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TGauge ForeColor

Ein Thema von Tommy1988 · begonnen am 7. Jun 2007 · letzter Beitrag vom 7. Jun 2007
Antwort Antwort
Seite 1 von 3  1 23      
Tommy1988
(Gast)

n/a Beiträge
 
#1

TGauge ForeColor

  Alt 7. Jun 2007, 10:10
Folgenden Code verwende ich, um die Hintergrund/Vordergrundfarbe eines gauges zu ändern (je nach Progress)
Delphi-Quellcode:
  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;
1. Ja es geht schöner, mit else und so, aber ich habs jetzt zum testen mal so gemacht

2. Bei wechseln der Farbe flackert das immer so schlimm.

Kann man das nicht "sanfter" machen?
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#2

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:17
Ja mit dem Else

Bei 90 bspw. änderst du die Farbe 5 mal hintereinander...

Und ein DoubleBuffered := true; würde auch noch helfen.
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#3

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:22
Zitat:
Bei 90 bspw. änderst du die Farbe 5 mal hintereinander...

Und ein DoubleBuffered := true; würde auch noch helfen.
Also so:
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:24
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:26
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#6

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:28
Delphi-Quellcode:
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;
Ok, so ist es jetzt
Nur leider ist es so, dass mit dem else er die farbe nicht wechselt
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:30
Klar, Du musst die Reihenfolge auch absteigend gestalten (hatte ich vergessen zu erwähnen). Wenn Progress > 80 ist er auch automatisch > 20, oder?
Aber die case-Lösung ist eh besser.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#9

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:30
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
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#10

Re: TGauge ForeColor

  Alt 7. Jun 2007, 10:31
Dass das rückwerts geschrieben werden muss hätte mir auch einfallen können wtf..

Ist doch eigentlich auch logisch.

Ich probiere es mal mit dem Case und gucke mit das DoubleBuffered was näher an.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz