Forums Neueste Beiträge
 

Farb-Definitionen

14/10/2011 - 21:50 von Lothar Geyer | Report spam
Irgendwie hab' ich mal wieder einen BlackOut - oder so was àhnliches.

Ich will

Public Const DarkGreen As Long = &H8000

(=RGB(0,128,0)). Die Definition klappt auch, aber die Zuweisung an
.CellForeColor in einem FlexGrid bringt Fehler (ungültiger Wert). Wenn
ich -DarkGreen zuweise, gehts. Die RGB-Funktion liefert auch den
angegebenen Hexwert. Wenn ich den Debugger abfrage, kommt aber -32768.
Die Konstante kann ich aber nicht als Typ OLE_COLOR definieren. Was
mache ich falsch?

Lothar Geyer
 

Lesen sie die antworten

#1 Thorsten Albers
14/10/2011 - 22:42 | Warnen spam
Lothar Geyer schrieb im Beitrag
...
Public Const DarkGreen As Long = &H8000

(=RGB(0,128,0)). Die Definition klappt auch, aber die Zuweisung an
.CellForeColor in einem FlexGrid bringt Fehler (ungültiger Wert). Wenn
ich -DarkGreen zuweise, gehts. Die RGB-Funktion liefert auch den
angegebenen Hexwert. Wenn ich den Debugger abfrage, kommt aber -32768.
Die Konstante kann ich aber nicht als Typ OLE_COLOR definieren. Was
mache ich falsch?



Falsch machen würde ich nicht sagen - Du berücksichtigst nur eine
Voraussetzung von VB nicht, die in diesem Zusammenhang auch die
'hartgesottensten' VBler gerne 'mal stolpern lassen:
Ganzzahl-Werte, die nicht mit einem Datentyp-Suffix versehen sind,
behandelt VB automatisch als Integer-, also 2-Byte-Werte. VB erzeugt also
zunàchst den 2-Byte-Wert 8000h = -32768. Dadurch, daß dieser Wert einer
Konstante vom Datentyp Long zugewiesen wird, muß er auf dessen
Speicherbreite, also 4 Byte erweitert werden. Der Wert -32768 ist als
4-Byte-Wert aber nicht 00008000h (das wàre dezimal _+_32768) sondern
FFFF8000h - und das ist natürlich kein gültiger Farbwert.
Lange Rede, kurzer Sinn: Sag' VB einfach schon bei dem Hexadezimal-Wert,
daß Du einen Long-Wert meinst, also statt
Public Const DarkGreen As Long = &H8000
->
Public Const DarkGreen As Long = &H8000&

Thorsten Albers

gudea at gmx.de

Ähnliche fragen