续:请教如何在picture控件中生成色块后鼠标挪上去获得色块信息?
首先感谢 风吹过b 版主的教导和帮助,针对您的程序,我有几个问题想继续求教:1、在您的程序中,将MaxX和MaxY定义成常数,如果我想这两个值定义成变量,取窗体中TEXT1和TEXT2两个文本框的值(这两个值就是本文最后的label24.Caption和label25.Caption的值),这个怎么改写?我把下面这段语句
' Public Const MaxX = 71 '72个格子 Public Const MaxY = 79 '80个格子
改写成
程序代码:
dim MaxX as long dim MAXY as long MaxX = text1.text - 1 MaxY = text2.text - 1
Public D(MaxX, MaxY) As 数据结构
改写成
DIM D(MaxX, MaxY) As String
运行证明这两个地方都会出错,不知道该怎样修改。
2、您的程序是通过对我提供的一个文本进行读取而生成图片的,这个文本我是对一个数据文件通过如下语句进行解析生成的:
我的程序:
程序代码:
Dim c3 As Byte, i3 As Integer, q3 As Long, abc1 As Integer, abc2 As Integer, abc3 As String, abc4 As Integer, abc5 As Integer Dim A3 If Label81.Caption < 0 Then abc1 = Label81.Caption - 1 Else abc1 = Label81.Caption - 1 End If abc2 = Label82.Caption Open Dir1.Path & "\" & File1.FileName For Binary As #1 Open Dir1.Path & "\" & File1.FileName & "-坐标.txt" For Append As #2 For q3 = 0 To (Label24.Caption * Label25.Caption) - 1 Seek #1, ((q3 * 6) + 237) For i3 = 1 To 6 Get #1, , c3 d3 = "" d3 = d3 & Right("0" & Hex(c3), 2) Text31.Text = Text31.Text & d3 & "" Next i3 If abc1 < 0 Then abc1 = abc1 + 1 Else abc1 = abc1 + 1 End If If abc1 = (Val(Label81.Caption) + Val(Label25.Caption)) Then abc2 = abc2 + 1 abc1 = Label81.Caption End If abc5 = Mid(Text31.Text, 5, 1) abc3 = Mid(Text31.Text, 11, 2) If abc3 <> "00" Then abc4 = Val(Mid(Text31.Text, 9, 2)) + 1 Else abc4 = Val(Mid(Text31.Text, 9, 2)) End If Print #2, abc1 & "," & abc2 & "," & abc5 & "," & abc4 & "," & Val("&H" & abc3) 'abc3 Text31.Text = "" Next q3 Close #1 Close #2
再加上您的程序(由于上面程序生成的文本格式与我之前提供的文本格式不太一样,我对您的程序略微修改了一下):
程序代码:
ii = 0 jj = 0 Open Path & FileName For Input As #fr Do While Not EOF(fr) Line Input #fr, s fj = Split(s, ",") If UBound(fj) > 1 Then '文件的值为 0 1 或大于1。而数组没有给值时为0,这里冲突。读取坐标值的数据 +1 ,让没有标明的为0,标明为0的为1,1的为2,类推 D(ii, jj).D = s If fj(4) = "00" And fj(2) = "8" Then D(ii, jj).C = 3 Else D(ii, jj).C = fj(4) + 1 End If ii = ii + 1 If ii > MaxX Then ii = 0 jj = jj + 1 If jj > MaxY Then Exit Do End If End If Loop Close #fr
我现在想把生成实体TXT文件作为中间步骤的方式修改成在内存里对原始数据文件进行解析后按照二维数组方式直接读入内存,您编写的那一段直接读内存数组,主要是为了加快速度。我大概计算了一下,我的程序解析生成文本文件大概需要十几秒的时间,再加上读取并生成图片,大概需要15~20秒的时间。
我的程序中几个Label的值如下:
label24.Caption = "166"
label25.Caption = "244"
Label81.Caption = "42"
Label81.Caption = "6"
Text31.Text = ""
3、我提供的TXT文件每行字符串前两个数字分别代表某一个方块的X坐标和Y坐标, 风吹过b 版主您的程序支持X坐标和Y坐标可能为负值的情况吗?我知道有这种情况,但目前我还没有找到实例的原始数据文件来测试。
附件我提供如下三样:
1、原始数据文件;
原始数据文件.rar
(4.53 KB)
2、原始数据文件解析后生成TXT文件;
TXT文件.rar
(49.83 KB)
3、略微修改了一下的 风吹过b 版主 的程序。
try-网络-改过.rar
(16.92 KB)