第六章 输入(三)
滚动条(ScrollBar)在视窗中也是一个不可缺少的部分,由于面积所限,我们不得把屏幕上的内容滚来滚去,以显示大量的内容,这就是我们经常要用到的滚动条。但滚动条除去滚动窗口,还有一个很重要的作用――输入,想想你经常用到的一些家用电器上调节声音或别的什么东西的滑块,你把它滑向大的一方音量就会增大,而你把它滑向小的一方音量就会减小,或者一个控制左右两个音箱的均衡器,当滑块在正中央的时候,两个音箱的音量是相同的,当你把滑块偏向一方时,音箱的音量有了大小之分,在Windows操作中,我们也经常要用到类似的效果。
在VB中提供了两个常规的滚动条控件――Vscroll和Hscroll,分别代表垂直的和水平的滚动条,它们只不过是方向不同而已,而它们的属性,以及会发生的事件都是相同的。,滚动条有几个特殊的属性:
Value属性,当滑块挪动后停在某一位置时,就改变了滚动条的Value属性。
Max和Min属性,用来设置滚动条的最大值和最小值,譬如把Max设为100,把Min设为0时,滚动条的Value就在0到100之间移动,当Max和Min倒置时,滚动条的方向也会相反,也就是说,当Max<Min时,原来Value增加的方向就会变成相反的方向。Max和Min也可设为负值。
SmallChange和LargeChange属性,当鼠标在滚动条两头的箭头上单击时,就会把滚动条向相应的方向挪动一点,这时用到的就是SmallChange属性,当你把它设为1时,每点一下,滚动条的Value就改变1;当鼠标在滚动条上点击时,用到的就是LargeChange,当设为10时,每点击一下滚动条,Value就改变10。
下面我们看一个实例。
大家都知道,物体之所以会有颜色是因为物体表面的材料吸收了太阳光中的部分色光,而还有部分色光没被吸收而被反射回来,它就成了我们看到的颜色,黑色就是物体吸收了所有的太阳光的所有色光,没有反射颜色,所以在我们看来是黑的,而当物体反射了所有的色光,我们看到的就是白色。在计算机中,颜色的表示就是象我们刚才描述的样子,它把颜色分为红(R)、绿(G)和蓝(B)。众所周知,计算机的机器语言是使用二进制表示的,为了方便查阅我们看到的往往是十六进制代码,一个字节包括两位十六进制数字,从0-255(十六进制表示0-FF),而一个字节是由八位二进制数值表示(2^8,2的8次方),计算机中用分别用一个字节,也就是八位表示一种颜色,和在一起也就是三个字节(24位)表示所有的颜色,这就是我们平时常说的24位真彩,它一共可以组成256×256×256(2^24)种颜色,对于我们的肉眼,是根本分辨不出来相邻两个不同的颜色的,比如用FFFFFF表示白色,就好象我们刚才说的物体反射了所有的色光,相反的可以用000000表示黑色,它吸收了所有的色光,还可以用FF0000表示红色,在HTML语言中就是这样表示颜色的。
小知识:现在你可以根据你的显卡的显存来计算一下显卡在24位真彩下可以以多大的分辨率显示,计算是这样的,用显存的字节数÷3(24位色)=显示器宽的象素数×显示器高的象素数,宽的象素数:高的象素数=4:3,比如4兆显存,就应该是4×1024×1024÷3=1365×1024。
在下面的小程序中,我们通过三个滚动条分别代表R、G、B,滚动滚动条,将在右边的图片框中显示相应的颜色,并且在下面的文本框中显示颜色的十六进制数值。
现在,新建一个项目文件,在Form1中如图6-12布局控件,各控件属性如下表:
HsrollBar |
Name Hscroll1
Index 0、1、2
(共同属性)
Max 255
Min 0
LargeChange 10
SmallChange 1 |
Label |
Name Label1
Index 0、1、2
Index 0 Caption “红:”
Index 1 Caption “绿:”
Index 2 Caption “蓝:” |
Label |
Name Label2
Caption “颜色值” |
TextBox |
Name Text1
Text “” |
PictureBox |
Name Picuture1 |
为了把十进制数值换成十六进制数值,要使用一个叫做Hex()的函数,它把十进制数值转化为十六进制的字符,但对于只有一位的十六进制字符,这个函数并不在高位补零,为了视觉上的正确,我设计了一个小函数帮助它给一位的十六进制字符补零.
程序代码很简单,见下:
Dim RedStr, GreenStr, BlueStr As String’RGB的字符 Dim RedNum, GreenNum, BlueNum As Integer’RGB的数值
Function GetColorValue() As String
‘获得输入值 RedNum = HScroll1(0).Value GreenNum = HScroll1(1).Value BlueNum = HScroll1(2).Value
RedStr = Hex(RedNum) If Len(RedStr) < 2 Then RedStr = "0" + RedStr’补零
GreenStr = Hex(GreenNum) If Len(GreenStr) < 2 Then GreenStr = "0" + GreenStr
BlueStr = Hex(BlueNum) If Len(BlueStr) < 2 Then BlueStr = "0" + BlueStr
GetColorValue = RedStr + GreenStr + BlueStr’合并
End Function
Private Sub Form_Load()
‘初始化程序 Text1.Text = GetColorValue Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)RGB函数返回颜色值
End Sub
Private Sub HScroll1_Change(Index As Integer)
‘当滚动条被改变时 Text1.Text = GetColorValue Picture1.BackColor = RGB(RedNum, GreenNum, BlueNum)
End Sub
运行如图6-13。
|