![]() |
#2
风吹过b2018-11-28 11:38
稍微看了一下,你这个程序认步认为需要重写,按你这样的写法,无法达到你的目的。因为你的数据使用完后就丢弃了。
有些代码没看懂,解释一下。 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 这二个值,建议定义为 全局常量 。 |
目前遇到了两个问题,
1、想增加一个按钮,命名放大,点一下,picture控件里的图像以原始图为基准,2倍、3倍.......的放大(最大5倍即可),如同附件中的两张图片一样(放大那张图片是放大3倍的)。放大的同时,picture控件里面或者外面出现横滚动条和竖滚动条,可以拖动放大的图像左右上下的移动。请问这个功能如何实现?
2、看过我的程序就可以知道,picture里的每一个色块都是根据TXT文件里的每一行数据生成,如何在我点击某个色块时,TEXT框中就显示相应的那一行数据?在图像放大时,点击某个色块,TEXT框中也相应的显示那一行数据。请问这个功能如何实现?
麻烦哪位大神帮忙告知,或者直接在我的源码上直接修改,再传上来,让我好好学习一下,多谢!!
只有本站会员才能查看附件,请 登录