稍微看了一下,你这个程序认步认为需要重写,按你这样的写法,无法达到你的目的。因为你的数据使用完后就丢弃了。
有些代码没看懂,解释一下。
If CByte("&H" + Mid(temp, 12, 1)) >= 1 And CByte("&H" + Mid(temp, 12, 1)) <= 9 Then
Clor = Shape1(CByte("&H" + Mid(temp, 12, 1)) - 1).FillColor
End If
If CByte("&H" + Mid(temp, 12, 1)) >= 10 And CByte("&H" + Mid(temp, 12, 1)) <= 35 Then
Clor = Shape1(CByte("&H" + Mid(temp, 12, 1)) - 1).FillColor
End If
If CByte("&H" + Mid(temp, 12, 1)) >= 36 And CByte("&H" + Mid(temp, 12, 1)) <= 61 Then
Clor = Shape1(CByte("&H" + Mid(temp, 12, 1)) - 1).FillColor
End If
取一个字节,然后按16进制数据解析,最大就是 &HF 也就是 15 ,那第二段判断,第三段判断怎么回事???
然后取颜色,都是一样的命令,那么你这个判断有什么意义??
----------------------
S As String
这个S
DRect ii, jj, Clor, S
传入了这个函数进行绘图,你这里是使用打印方式进行绘图,你的S在哪里赋的值,没找到。
============================================================================
针对目前程序的优化建议:
1、颜色表,放到数组里,不应该只放控件。
'颜色表定义为全局变量
Dim 颜色表(63) As Long
程序代码:
颜色表(0) = RGB(0, 255, 0) '这个函数是返回立即数,所以你这里写 65280 也可以的。
颜色表(1) = RGB(255, 0, 0)
颜色表(2) = RGB(0, 0, 255)
颜色表(3) = RGB(200, 0, 0)
颜色表(4) = RGB(200, 0, 200)
颜色表(5) = RGB(150, 50, 255)
颜色表(6) = RGB(200, 100, 255)
颜色表(7) = RGB(255, 0, 200)
颜色表(8) = RGB(200, 100, 0)
颜色表(9) = RGB(200, 0, 50)
颜色表(10) = RGB(100, 100, 100)
颜色表(11) = RGB(100, 255, 50)
颜色表(12) = RGB(255, 50, 200)
颜色表(13) = RGB(0, 200, 0)
颜色表(14) = RGB(0, 255, 150)
颜色表(15) = RGB(100, 150, 50)
颜色表(16) = RGB(100, 50, 150)
颜色表(17) = RGB(100, 50, 255)
颜色表(18) = RGB(0, 200, 200)
颜色表(19) = RGB(50, 0, 200)
颜色表(20) = RGB(150, 100, 150)
颜色表(21) = RGB(50, 50, 50)
颜色表(22) = RGB(200, 100, 200)
颜色表(23) = RGB(100, 150, 200)
颜色表(24) = RGB(50, 50, 150)
颜色表(25) = RGB(255, 0, 50)
颜色表(26) = RGB(50, 150, 255)
颜色表(27) = RGB(0, 200, 50)
颜色表(28) = RGB(100, 50, 0)
颜色表(29) = RGB(150, 255, 50)
颜色表(30) = RGB(200, 200, 100)
颜色表(31) = RGB(50, 0, 0)
颜色表(32) = RGB(150, 100, 255)
颜色表(33) = RGB(50, 100, 200)
颜色表(34) = RGB(50, 50, 255)
颜色表(35) = RGB(100, 100, 50)
颜色表(36) = RGB(255, 100, 100)
颜色表(37) = RGB(0, 255, 100)
颜色表(38) = RGB(50, 50, 100)
颜色表(39) = RGB(50, 255, 150)
颜色表(40) = RGB(50, 200, 200)
颜色表(41) = RGB(200, 255, 0)
颜色表(42) = RGB(255, 100, 200)
颜色表(43) = RGB(0, 50, 100)
颜色表(44) = RGB(150, 0, 100)
颜色表(45) = RGB(255, 150, 50)
颜色表(46) = RGB(0, 50, 50)
颜色表(47) = RGB(100, 0, 0)
颜色表(48) = RGB(150, 200, 100)
颜色表(49) = RGB(100, 200, 100)
颜色表(50) = RGB(50, 150, 0)
颜色表(51) = RGB(50, 255, 0)
颜色表(52) = RGB(200, 255, 100)
颜色表(53) = RGB(255, 50, 0)
颜色表(54) = RGB(0, 255, 200)
颜色表(55) = RGB(0, 150, 50)
颜色表(56) = RGB(100, 255, 150)
颜色表(57) = RGB(100, 150, 255)
颜色表(58) = RGB(255, 255, 50)
颜色表(59) = RGB(200, 50, 100)
颜色表(60) = RGB(0, 255, 50)
颜色表(61) = RGB(50, 255, 100)
颜色表(62) = RGB(200, 0, 100)
颜色表(63) = RGB(50, 150, 50)
Dim i As Long
For i = 0 To 63
Shape1(i).BackColor = 颜色表(i)
Shape1(i).FillStyle = vbshapesolid
Shape1(i).FillColor = 颜色表(i)
Next i
2、判断时,不要总临时计算。对同一个变量多次判断,可以使用多分支选择。
程序代码:
'增加了二个变量,i 和 j ,在循环体外面定义一下就可以,变量类型,建议long ,也可以 byte
i = CByte("&H" & Mid(temp, 12, 1))
Select Case i
Case 0
j = CByte("&H" & Mid(temp, 5, 1))
If j = 0 Then
Clor = vbBlue
ElseIf j = 8 Then
Clor = vbYellow
Else
'没有例外情况???
End If
Case Is <= 9 '1-9 以下三组分支,必须严格按判断数字大小的顺序来写
Clor = 颜色表(i - 1)
Case Is <= 35 '10-35 颜色表也是与上面的相同???????
Clor = 颜色表(i - 1)
Case Is <= 61 '36-61 ?????
Clor = 颜色表(i - 1)
Case Else
'没有例外???颜色表 61 62 63 干嘛的?
End Select
------------
wd = 164
ht = 242
这二个值,建议定义为 全局常量 。