这个程序比原来的英文程序有了几点不同,第一,由于用到的是双字节中文的中文,所以对于检测中文字符和英文有很大不同,第二,原来的英文程序不管你说多少,警察依然是依法从事,本例中给了犯规者10%的免罚机会(有点无聊??L ,不过也是为了学一些东东嘛)。下面就跟我来设计窗体吧。(如图6-6)
Form1 Icon Stop图标 Caption 停车检查 BorderStyle 3 Label1 Caption 警官,我超速是有原因的,请听我说: BackColor &H00808080& ForeColor &H80000012& Label2 Caption 你必须在30字之内完成你理由的申诉,否则将受到罚款! BackColor &H00808080& ForeColor &H00FF0000& Text1 MultiLink True Text “” 40
Picture1 Autosize True BackColor &H00808080& Visible True Picture2 Autosize True BackColor &H00808080& Visible False Picture3 Autosize True BackColor &H00808080& Visible False Command1 Visible False
三个图片框Picture1-3的Picture属性分别为绿灯,黄灯和红灯,这些图标在VB目录下的
Graphics\\Icons\\Traffic下(VB5),或是VB目录下的Icons\\Traffic下(VB4、VB3),你还可以为Label1在Font属性里选一个合适的字体和字重。下面我们来看代码: 首先初始化程序:
Private Sub Form_Load() '把Command1放在水平的中央 Command1.Top = Label2.Top+200
Command1.Left = (Form1.Width - Command1.Width) / 2 '重叠三个图片框
Picture2.Left = Picture1.Left Picture2.Top = Picture1.Top Picture3.Left = Picture1.Left
41
Picture3.Top = Picture1.Top End Sub
下面我来讲一讲程序是怎样运行的,我们将用到Text的Change事件,每当字符串改变一次就对它进行一次检查,算出已经说的字数,当字数超过10时,下面的红绿灯会变成黄色,并且在这时随机抽取一个数,它在一个范围内出现的可能是10%,如果在这个范围内就可以免交罚金,如果不在范围则继续,当文字超过20的时候,红绿灯会变成红色,再一次抽取随机数字,步骤同上,如果30个字已满,再进行一次检查,如果你真的那么不幸就该罚款了。
程序的步骤清楚了,我们在来看看程序的要点。由于中文是双字节字符,也就是说一个汉字占两个ASC码的位置,而VB显然是为英语国家设计的用Len函数无法返回汉字字节,也就是说一个汉字和和一个ASC字符在Len函数中得到的值是一样的,这就需要特殊处理。用Asc()函数,在括号内放入一个ASC字符或字符串,它会把第一个ASC码转化为0-255的数值,而把一个汉字放入,它的值必然不在0-255,这也就可以作为判定汉字的基础。我们可以把英文算作半个汉字。
第六章第二部分
1.8 6-2
第六章 输入(二)
下面我们来看看代码:
在General 里声明窗体级变量:
Dim Level As Integer
Private Sub Command1_Click() Unload Me End Sub
Private Sub Text1_Change()
Dim StrLength As Integer’字符串长度 Dim RandomNum As Single’随机数
42
Dim Str1 As String Dim a As String Dim i, Temp
StrLength = 0’每次开始时把字符串长度还原为0 a = Text1.Text
For i = 1 To Len(a)’Len(a)代表字符串的长度 Temp = Asc(Mid$(a, i, 1))’挨个取字符 If Temp > 255 Or Temp < 0 Then’不是ASC码 StrLength = StrLength + 2 Else
StrLength = StrLength + 1 End If Next i
StrLength = StrLength / 2 Select Case StrLength Case 0 To 9
Picture1.Visible = True Picture2.Visible = False Picture3.Visible = False
Label2.Caption = \慢慢说。你还有\个字可以说\ Level = 1 Case 10 To 19 If Level = 1 Then
43
RandomNum = Rnd * 10’得到随机数
If RandomNum <= 10 And RandomNum > 9 Then Text1.Enabled = False
Label2.Caption = \很抱歉这是个误会??\ Command1.Visible = True
Command1.Caption = \您可以离开了\ End If Level = 2 Else
Picture1.Visible = False Picture2.Visible = True Picture3.Visible = False Str1 = \怎么还没说完!\
Label2.Caption = Str1 & \你还有\个字可以说\ End If Case 20 To 29 If Level = 2 Then RandomNum = Rnd * 10
If RandomNum <= 10 And RandomNum > 9 Then Text1.Enabled = False
Label2.Caption = \很抱歉这是个误会??\ Command1.Visible = True
Command1.Caption = \您可以离开了\ End If
44