vb十六进制颜色代码

Dav*_*vid 10 vb6 hex colors

我想做这个:

    Const COLOR_GREEN = &H00FF00
    Me.Label1.BackColor = COLOR_GREEN
Run Code Online (Sandbox Code Playgroud)

然而有一个问题是,vb自动决定将&H00FF00转换为&HFF00,所以我得到了这个:

    Const COLOR_GREEN = &HFF00
    Me.Label1.BackColor = COLOR_GREEN
Run Code Online (Sandbox Code Playgroud)

小数值COLOR_GREEN现在是-256而不是65280,所以背景是黑色而不是绿色!这很烦人,因为我可以使用#00FF00在表单设计模式中完美地设置颜色.

在表单设计模式下将颜色设置为#00FF00的等效值是多少?

Cod*_*ray 23

你试过这个文字&H0000FF00&吗?以下代码对我来说很好用:

Const COLOR_GREEN = &H0000FF00&
Me.Label1.BackColor = COLOR_GREEN
Run Code Online (Sandbox Code Playgroud)

当然,VB 6自动折叠到这一点,因为这两个值仍然工程只是罚款完全等效的数字:

Const COLOR_GREEN = &HFF00&
Me.Label1.BackColor = COLOR_GREEN
Run Code Online (Sandbox Code Playgroud)

诀窍是值需要声明为a Long而不是a Integer.&数字文字后面的&符号放在一起就可以实现这一点.

这也解释了为什么你看到的值为-256而不是你期望的65280.值65280太长而不适合Integer,当它溢出该数据类型时,VB 6再次将其包裹起来,产生-256.

值得注意的是,VB 6中的十六进制文字将不等同于您可能熟悉的Web和HTML编程中的十六进制文字.VB 6使用BBGGRR表示法,或者&H00BBGGRR&COLORREF与低位字节为红色而不是蓝色的本机Win32 结构相同,而不是您在那里找到的RRGGBB表示法.


当然,请注意,对于标准颜色值,例如您在此处显示的颜色值,您最好使用VB文字,例如vbGreen:

Me.Label1.BackColor = vbGreen
Run Code Online (Sandbox Code Playgroud)

  • @David:如果你需要一个编译时常量,那么你使用的符号并不重要.只需将十六进制表示法转换为VB用于颜色的标准"Long"表示法.但是"完全不同"的问题似乎是你使用`&H00RRGGBB&`符号,而不是`&H00BBGGRR&`表示法.VB 6与HTML不同.(编辑:啊,是的.我刚刚发布了.是的,确实.) (2认同)
  • @David:VB6将不允许&FFF200&因为它丢弃了最后一个并且给了'&HFFF200`.但要注意领先的`FFF`.VB6意识到这个数字太大而不适合16位int并将其提升到32位长.你总是可以做`Const COLOR_GREEN As Long =&H00FF00&`来表明你有很长的意图. (2认同)

Ale*_* K. 5

您不能以vb的十六进制表示法保留前导零.数字文字(inclding &H*)默认为16位整数,32位常量文字后缀&用于隐式表示其长整数;

Const COLOR_GREEN = &HFF00&

?COLOR_GREEN
 65280 
Run Code Online (Sandbox Code Playgroud)