| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:续:请教如何在picture控件中生成色块后鼠标挪上去获得色块信息?
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:2 
续:请教如何在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
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
首先,定义为常量的话,我下面定义数组直接使用了这个常量,
你改成 变量,当然出错。
解决办法:
先定义变量,然后再给值。
数组定义的地方,定义为不固定数组,然后使用 REDIM 修改数组大小。

第二:数据结构。因为颜色代码与原始数据冲突,所以再给一个变量保存颜色代码。

第三:改为直接读数据文件。
只要能读取数组里,都可以。
我显示的图片,不支持负数坐标。因为数组的下标从0到 maxx 这类的,负数坐标没有地方保存。除非你扩大范围。
另外,绘图时,绘图是从 0,0 的坐标开始,也不支持负数坐标。

如果需要修改的话:
1、绘图时,修正绘图原点在中心,然后就可以直接绘负数坐标。
2、数据结构里,增加 坐标 变量。也就是如下四个值。
 X as long
 Y as long
 C as long
  原始数据 as string
  绘图时,根据 X,Y ,计算格子的位置,然后再绘图,没有格子的地方,就保存原始的黑色背景。
3、显示数据时,当鼠标移动一个格子上时,查找整个数据,搜索 X Y与鼠标的坐标相同的数据,找到则显示出来。

数据组织,在内存里,有二种,一个是二维坐标,每个格子一个元素。
                            一个是保存每个格子的坐标和元素信息,每次都搜索整个数组。在不知道整个数据范围时,就可以使用这种方法。绘图之前,需要搜索最大坐标和最小坐标,然后定原点,定比例。


[此贴子已经被作者于2019-11-20 09:13编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2019-11-20 08:30
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
版主大人说的我不是太懂......
2019-11-20 13:41
快速回复:续:请教如何在picture控件中生成色块后鼠标挪上去获得色块信息?
数据加载中...
 
   



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

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