Seite 1 von 1

Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA)

Verfasst: 29.05.2016 15:08
von Derren
Hier mal zwei Macros, die die Arbeit mit Hex Farbcodes vielleicht ein wenig erleichtern.
Das erste ist eigentlich eher Spielerei, da es wahrscheinlich länger dauert das Macro aufzurufen, als einfach den korrekten Hex-Wert zu tippen.
In CSS kann man jedenfalls Farben als 3-wertigen Hex-Wert angeben. Der Interpreter expandiert die Werte, in dem gegebene Wert für die 1er und 16er Stelle verwendet wird. Kurz, aus $ABC wird $AABBCC

Das zweite könnte für die Web-Erfahrenen schon eher interessant sein. Es sorgt dafür, dass der Rot-Wert vorne und der Blau-Wert hinten steht.
D.h. $FF0000 ist endlich rot, wie man es gewohnt ist :D

Code: Alles auswählen

Macro colorExpand(_in_, _out_)	
	b = _in_>>8			
	g = (_in_>>4)%16	
	r = (_in_)%16
	
	b=b<<4 + b
	g=g<<4 + g
	r=r<<4 + r
	
	_out_ = b<<16 + g<<8 + r	
EndMacro 

a = $AB9
colorExpand(a, c)
Debug "colorExpand($"+Hex(a)+"): $"+Hex(c)
 


Macro colorInvert(_in_, _out_)
	b = _in_>>16			
	g = (_in_>>8)%$100	
	r = (_in_)%$100	
	_out_ = r<<16 + g<<8 + b	
EndMacro 

Debug "  "
a = $509CF3
colorInvert(a, c)
Debug "HTML Color: $"+Hex(a)
Debug "Red: $"+Hex(Red(c))
Debug "Grn: $"+Hex(Green(c))
Debug "Blu: $"+Hex(Blue(c))

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Verfasst: 29.05.2016 15:13
von NicTheQuick
Das finde ich als Macro ehrlich gesagt etwas unpraktisch. Vor allem, weil die Variablen r, g und b benutzt, aber nie definiert werden. Und wenn man im Programmverlauf zufällig Variablen mit diesem Namen benutzt, z.B. r als String, dann geht's gar nicht mehr. Mal davon abgesehen, dass das Macro dann einfach r überschreiben würde.

Meine Empfehlung wäre deshalb eher auf eine Procedure zu wechseln.

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Verfasst: 29.05.2016 15:18
von Derren
Danke für den Tipp. :allright:
Ja, die Variablennamen müsste man wenn dann irgendwie "unique" machen "myMacro_colorInvert_ValueOfRed" oder so ein Kram.

Im Sinne der Kapselung gefallen mir Prozeduren auch wesentlich besser, zumal ich dann einfach etwas zurückgeben kann und keine "by Reference" Variable brauche.

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Verfasst: 29.05.2016 15:36
von Nino

Code: Alles auswählen

Macro ColorInvert (_in_)
   RGB(Blue(_in_), Green(_in_), Red(_in_))
EndMacro

Debug Hex(ColorInvert($123456))   ; => 563412

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Verfasst: 29.05.2016 15:41
von GPI

Code: Alles auswählen

Macro colorExpand(_in_)   
  ((_in_>>8)*$110000+ ((_in_>>4)&$F)*$1100+ ((_in_)&$F)*$11)  
EndMacro 

a = $AB9
c= colorExpand(a)
Debug "colorExpand($"+Hex(a)+"): $"+Hex(c)
Und es dürfte schneller gehen, wenn du statt % die UND-Verknüpfung & wählst.

Re: Macros: CSSExpand($ABC->$AABBCC) Invert($AA00CC->$CC00AA

Verfasst: 29.05.2016 18:21
von udg
zwar nicht als PB Code aber da kann ich das hier anbieten. Ich habe mir das Tool programmiert weil die verdrehten Color Werte nerven :D

http://www.purebasic.fr/german/viewtopi ... 10&t=29644