Hallo Forum,
für verschiedene Farbeinstellung von Gruppenlayern versuche ich mit folgender Funktion RGBlong-Werte in einen RGBArray umzurechnen und als label.caption in einem Formular anzuzeigen.
Function RGBArray(ByVal lngRGB As Long) As Byte()
Dim bytArray(2) As Byte
bytArray(0) = lngRGB Mod &H100
bytArray(1) = (lngRGB \ &H100) Mod &H100
bytArray(2) = (lngRGB \ &H10000) Mod &H100
RGBArray = "(" & bytArray(0) & ", " & bytArray(1) & ", " & bytArray(2) & ")"
' mit RGBArray = bytArray kriege ich nur nonsense zurück
End Function
Aufruf z.B.
Me.MeinLabel.caption = RGBArray(Me.BackColor)
Das funktioniert i.d.R. auch wunderbar. Nun ist mir aber aufgefallen, daß z.B. die Standard-Hintergrundfarbe eines Formulares einen negativen Wert hat (-2147483633) und somit auch gar nicht nicht als Byte umgerechnet werden kann, was wiederum zu einem unangenehmen Überlauffehler führt.
Nach ein bißchen Fumelei habe ich herausgefunden, daß -2147483633 dem RGB-Array (212,208,200) bzw lngRGB 13160660 entspricht, finde aber keinen Umrechnungsfaktor.
Eigentlich dachte ich immer, daß die Formularfarben etc. reine RGB-Farben sind und somit einen positiven Wert haben müßten, was dann ja wohl offensichtlich nicht der Fall ist.
Frage: Kann mir jemand erklären, wie die negativen Werte verschiedener Formularobjekte zustande kommen können und vor allem wie ich sie in korrekte positive long-Werte umrechnen kann??
Schon mal herzlichen Dank!
Viele Grüße
Jörg Ostendorp
für verschiedene Farbeinstellung von Gruppenlayern versuche ich mit folgender Funktion RGBlong-Werte in einen RGBArray umzurechnen und als label.caption in einem Formular anzuzeigen.
Function RGBArray(ByVal lngRGB As Long) As Byte()
Dim bytArray(2) As Byte
bytArray(0) = lngRGB Mod &H100
bytArray(1) = (lngRGB \ &H100) Mod &H100
bytArray(2) = (lngRGB \ &H10000) Mod &H100
RGBArray = "(" & bytArray(0) & ", " & bytArray(1) & ", " & bytArray(2) & ")"
' mit RGBArray = bytArray kriege ich nur nonsense zurück
End Function
Aufruf z.B.
Me.MeinLabel.caption = RGBArray(Me.BackColor)
Das funktioniert i.d.R. auch wunderbar. Nun ist mir aber aufgefallen, daß z.B. die Standard-Hintergrundfarbe eines Formulares einen negativen Wert hat (-2147483633) und somit auch gar nicht nicht als Byte umgerechnet werden kann, was wiederum zu einem unangenehmen Überlauffehler führt.
Nach ein bißchen Fumelei habe ich herausgefunden, daß -2147483633 dem RGB-Array (212,208,200) bzw lngRGB 13160660 entspricht, finde aber keinen Umrechnungsfaktor.
Eigentlich dachte ich immer, daß die Formularfarben etc. reine RGB-Farben sind und somit einen positiven Wert haben müßten, was dann ja wohl offensichtlich nicht der Fall ist.
Frage: Kann mir jemand erklären, wie die negativen Werte verschiedener Formularobjekte zustande kommen können und vor allem wie ich sie in korrekte positive long-Werte umrechnen kann??
Schon mal herzlichen Dank!
Viele Grüße
Jörg Ostendorp
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Joerg Ostendorp am Fr., 28.11.2003 - 09:49
Permalinkdas Problem hat sich erledigt.
Einige der negativen Farben sind Windows-Systemfarben, alle anderen Teil einer normale negative Reihe beginnend bei -1. Glaube, ich hab dafür 'ne passende Funktion im vb@archiv gefunden. Falls es jemanden interessiert:
http://www.vbarchiv.net/archiv/tipp_details.php?pid=217
Viele Grüße
Jörg Ostendorp