Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=grün)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=grün)

Beitrag von Derren »

Hier ein kurzer Code, den ich für einen Fortschrittsbalken verwende.
Er erzeugt eine Farbe zwischen Rot und Grün, abhängig von einem Prozentwert. Bei 0% habe ich ein volles rot, bei 100% ein helles grün (wenngleich auch nicht $00FF00)

Code: Alles auswählen

color = ($FF-percentage) + Int(($FF*(percentage/100.0)))<<8

Hier ein Beispielcode:

Code: Alles auswählen

Enumeration 
	#Trackbar
	#Text
	#Canvas
EndEnumeration

OpenWindow(0, 0, 0, 400, 300, "Rot -> Grün", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

TrackBarGadget(#Trackbar, 5, 5, 300, 40, 0, 100)
TextGadget(#Text, 315, 10, 80, 20, "0%")
CanvasGadget(#Canvas, 5, 50, 390, 245)

Define percentage, color

Repeat
	
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			End			
		Case #PB_Event_Gadget
			If EventGadget()=#Trackbar
				
				percentage = GetGadgetState(#Trackbar)				
				SetGadgetText(#Text, Str(percentage) +"%")				
				
				color = ($FF-percentage) + Int(($FF*(percentage/100.0)))<<8
				
				StartDrawing(CanvasOutput(#Canvas))
				Box(0, 0, 390, 245, color)
				DrawText(5, 5, "$" + RSet(Hex(color), 6, "0"))
				StopDrawing()
						
			EndIf 
	EndSelect 	
ForEver 
Signatur und so
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=g

Beitrag von RSBasic »

:allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=g

Beitrag von Shardik »

Danke für die gute Idee! :allright:

Ich habe einmal ein Beispiel erstellt, das direkt die Farbe des Fortschrittbalkens im ProgressBarGadget ändert. Das funktioniert nur, wenn man das Theming für das ProgressBarGadget in Windows abschaltet:

Code: Alles auswählen

EnableExplicit

Define Color.I
Define Count.I

OpenWindow(0, 100, 100, 200, 80, "ProgressBar")
ProgressBarGadget(0, 10, 30, 180, 20, 0, 100, #PB_ProgressBar_Smooth)
SetWindowTheme_(GadgetID(0), " ", " ")
AddWindowTimer(0, 0, 30)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Timer
      If Count < 100
        Count + 1
        Color = ($FF - Count) + Int(($FF * (Count / 100.0))) << 8
        SetGadgetState(0, Count)
        SetGadgetColor(0, #PB_Gadget_FrontColor, Color)
      EndIf
  EndSelect
ForEver
Das Ganze sollte eigentlich auch auf Linux und MacOS laufen, wenn man die SetWindowTheme_()-Funktion in einen Compilerif..CompilerEndIf-Block setzt:

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  SetWindowTheme_(GadgetID(0), " ", " ")
CompilerEndIf
Leider funktioniert dies aber unter Linux und MacOS dann trotzdem nicht, weil Apple auf Grund der bekannten (berüchtigten) Human Interface Guidelines so etwas nicht wünscht / verhindert und Linux-Anwender auf Grund der konfigurierbaren Themes dies auch nicht mögen / dürfen. Langer Rede, kurzer Sinn: SetGadgetColor(#ProgressBarGadget, #PB_Gadget_FrontColor, Color) funktioniert auf Linux und MacOS wohl nicht ohne tiefgreifende API-Hacks)... :roll:
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=g

Beitrag von Derren »

Deswegen benutz ich ein Canvas-Gadget :D
Benutze das in einem Splashscreen. Der darf ruhig mal mal farblich abweichen :)
Signatur und so
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Von Rot zu Grün mit steigendem Prozentwert (0=rot, 100=g

Beitrag von Sicro »

Code wird ins CodeArchiv unter Graphics/2D/ControlSmoothColorChangeByPercentage.pb aufgenommen.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten