Dec/RGB in Hex umwandeln

Anfängerfragen zum Programmieren mit PureBasic.
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Dec/RGB in Hex umwandeln

Beitrag von Gamer »

Kann ich die Systemfarbe irgendwie direkt in Hex umwandeln,
bei rot als z.b. #ff0000 ?

Oder geht nur der Umweg über RGB?

Code: Alles auswählen

systemfarbe = GetSysColor_(#COLOR_BTNFACE)
MessageRequester("",("R "+RSet(Str(Red(systemfarbe)),3)+"G "+RSet(Str(Green(systemfarbe)),3)+"B "+RSet(Str(Blue((systemfarbe))),3)),0)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

freedimension hat geschrieben:Ich denke, du suchst das hier:
http://www.purebasic.com/german/documen ... g/hex.html
;)
mist, jetzt muss ich Deinen Artikel löschen. ;)

Grüße ... Kiffi
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Hallo,

schau hier:
http://forums.purebasic.com/german/viewtopic.php?t=2700

oder direkt:

Code: Alles auswählen

Procedure.s GetColorCode(color) 
  ProcedureReturn "#" + RSet(Hex(Red(color)), 2, "0") + RSet(Hex(Green(color)), 2, "0") + RSet(Hex(Blue(color)), 2, "0") 
EndProcedure 
MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

da hier im forum immer wieder RSet() statt Right() zum formatieren verwendet wird,
bitte ich einmal, diesen performance-test nachzuvollziehen.

Code: Alles auswählen

a.l = 212

time = ElapsedMilliseconds()

For n=0 To 99999999
b$ = RSet(Str(a),3,"0")
Next

time1 = ElapsedMilliseconds()-time

Debug time1

time = ElapsedMilliseconds()

For n=0 To 99999999
b$ = Right("000"+Str(a),3)
Next

time2 = ElapsedMilliseconds()-time

Debug time2
...das macht immerhin ~5% aus

für die Anfänger:
nein, das programm hängt sich nicht, es dauert über 20sec.
bis die erste ausgabe im debug-win erfolgt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Kaeru Gaman hat geschrieben:da hier im forum immer wieder RSet() statt Right() zum formatieren verwendet wird,
bitte ich einmal, diesen performance-test nachzuvollziehen.

Code: Alles auswählen

--Code--
für die Anfänger:
nein, das programm hängt sich nicht, es dauert über 20sec.
bis die erste ausgabe im debug-win erfolgt.
Nanana, das haben wir aber nicht gerne: Mit debugger einen Speed-Test machen.. tztztztztztz

Bitte ohne Debugger starten:

Code: Alles auswählen

time = ElapsedMilliseconds()

For n=0 To 99999999
    b$ = RSet(Str(a),3,"0")
Next

time1 = ElapsedMilliseconds()-time

time = ElapsedMilliseconds()

For n=0 To 99999999
    b$ = Right("000"+Str(a),3)
Next

time2 = ElapsedMilliseconds()-time

Out.s = "RSet: "+Str(time1)+#CRLF$
Out.s + "Right: "+Str(time2)

MessageRequester("Ergebnis",Out)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

naja... da es sich hier um einen Vergleich handelt, nicht um einen absoluten test,
ist das weniger relevant.

das ergebnis ist ähnlich: etwas über 5% unterschied...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Debug verfälscht die Elemente leider nicht immer nur relativ um einen bestimmten Wert. Ich habe da selber schon die merkwürdigsten Erfahrungen mit gemacht, teilweise waren die Ergebnisse genau umgekehrt.

@Kiffi: Das war keine Belehrung von mir, sondern ein nett gemeinter Hinweis darauf wo er das findet was er sucht :allright: Ja, ich habe den Smilie gesehen ;)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Habs gerade mit volgendem Code probiert:

Code: Alles auswählen

time = ElapsedMilliseconds() 

For n=0 To 99999999 
  b$ = RSet(Str(a),2,"0") 
Next 

time1 = ElapsedMilliseconds()-time 

time = ElapsedMilliseconds() 

For n=0 To 99999999 
  b$ = Right("0"+Str(a),2) 
Next 

time2 = ElapsedMilliseconds()-time 

Out.s = "RSet: "+Str(time1)+#CRLF$ 
Out.s + "Right: "+Str(time2) 

MessageRequester("Ergebnis",Out) 
Der ist passender zu meiner o.g. Procedure.
Getestet ohne Debugger!
Bild

Soviel zum Thema :lol:

MFG Lukaso

Edit: Mist da fehlts "a", nochmal probieren!
Edit2: Naja zu früh gefreut:

Bild :mrgreen:
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Antworten