标题:续:请教如何在picture控件中生成色块后鼠标挪上去获得色块信息?
取消只看楼主
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
结帖率:69.81%
已结贴  问题点数:20 回复次数:1 
续:请教如何在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)

搜索更多相关主题的帖子: Then If Caption 生成 text 
2019-11-20 02:06
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
版主大人说的我不是太懂......
2019-11-20 13:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497947-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.211153 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved