| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 828 人关注过本帖
标题:vb格子点画的一点问题,求助求助啊求助(不知道也吼下啊,不要飘过)
只看楼主 加入收藏
zhengzhong13
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-12-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
vb格子点画的一点问题,求助求助啊求助(不知道也吼下啊,不要飘过)
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim wea(80, 80)
si = 300: sj = 300

For l = 1 To weft
For i = 1 To warp
  Print X
图片附件: 游客没有浏览图片的权限,请 登录注册

  If X < i * si + 100 And X > i * si - si + 100 And Y < l * sj + 100 And Y > l * sj - sj + 100 Then
    If wea(i, l) = 1 Then wea(i, l) = 0
    If wea(i, l) = 0 Then wea(i, l) = 1
  End If
  If wea(i, l) = 1 Then Form1.Line (i * si + 100, l * sj + 100)-Step(-si, -sj), QBColor(1), BF
  Print X
Next i
Next l
代码显示的是上面,想通过获取鼠标点击的坐标值再通过条件判断,画格子的,但是点的时候没有变化。完全菜的连哪里不对都不知道,求大神拯救。

[ 本帖最后由 zhengzhong13 于 2012-1-4 16:04 编辑 ]
搜索更多相关主题的帖子: 格子 300 
2012-01-04 15:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4943
专家分:30067
注 册:2008-10-15
收藏
得分:10 
Option Explicit
Private Const 间隔 = 300           '常量,格子大小,全局统一
Dim DJ()    As Boolean                '保存点击的坐标,需要全局可见,定义为窗体级变量

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim i As Long, j As Long
Dim c  As Long

i = Int(X / 间隔)               '取整,防止出现 四舍五入造成误差
j = Int(Y / 间隔)

DJ(i, j) = Not DJ(i, j)         '点击,直接取反

If DJ(i, j) Then                '选择格子的颜色,
    c = QBColor(1)      '点击后的颜色
Else
'    c=&H8000000F&       '默认背景
    c = Me.BackColor    '使用背景色
End If

Me.Line (i * 间隔, j * 间隔)-(i * 间隔 + 间隔, j * 间隔 + 间隔), c, BF      '画格子,依照条件空白或颜色
Me.Line (i * 间隔, j * 间隔)-(i * 间隔 + 间隔, j * 间隔 + 间隔), , B        '补画格子线

End Sub

Private Sub Form_Resize()

Dim i As Long, j As Long
j = Me.ScaleHeight                  '加快运行速度
For i = 1 To Me.ScaleWidth / 间隔
    Me.Line (i * 间隔, 0)-(i * 间隔, j)    '横线
Next i

j = Me.ScaleWidth
For i = 1 To Me.ScaleHeight / 间隔
    Me.Line (0, i * 间隔)-(j, i * 间隔)     '竖线
Next i

j = Int(Me.ScaleHeight / 间隔) + 1     '计算有多少格子
i = Int(Me.ScaleWidth / 间隔) + 1
ReDim DJ(i, j)                  '重定义格子数组

End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2012-01-04 21:09
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册

你程序设计的有问题,首先Print X 完全没必要,在就是判断格子坐标不需要在循环中,我的程序如下,请参考:
首先启动vb,新建一标准exe工程,拷贝下列代码,运行即可(你可以画格子和取消格子)

Const 间距 = 300
Const 格子数 = 19  '你的程序是21根线,我画的是围棋盘,是19根线
Const 起点纵坐标 = 210
Const 起点横坐标 = 210
Dim 格子状态(格子数 - 1, 格子数 - 1) '存储格子是否被填充颜色的状态,0:没有被填充,1:已被填充

Private Sub Form_Load()
  '画格子
  Dim i As Integer, j As Integer
  Me.Height = 6300
  Me.Width = 6000
  Me.AutoRedraw = True
  For i = 0 To 格子数 - 1
    For j = 0 To 格子数 - 1
      格子状态(i, j) = 0  '将所有格子状态还原为未被填充的状态
    Next
  Next
  For i = 0 To 格子数 - 1
    Me.Line (起点横坐标, 起点纵坐标 + i * 间距)-(起点横坐标 + (格子数 - 1) * 间距, 起点纵坐标 + i * 间距), QBColor(0) '画横线
  Next
  For i = 0 To 格子数 - 1
    Me.Line (起点横坐标 + i * 间距, 起点纵坐标)-(起点横坐标 + i * 间距, 起点纵坐标 + (格子数 - 1) * 间距), QBColor(0) '画竖线
  Next
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '填充棋盘格子
  Dim i As Integer, j As Integer
  If Button = 1 Then
    '如果按下的是鼠标左键则执行填充操作
    i = Int((X - 起点横坐标) / 间距)  '获取格子横坐标
    j = Int((Y - 起点纵坐标) / 间距)  '获取格子纵坐标
    If i < 格子数 - 1 And j < 格子数 - 1 Then
      '如果点击的是在格子内则进行填充操作
      格子状态(i, j) = 格子状态(i, j) Xor 1 '设置格子状态
      If 格子状态(i, j) = 1 Then
        '填充蓝色
        Me.Line (起点横坐标 + i * 间距 + 15, 起点纵坐标 + j * 间距 + 15)-(起点横坐标 + (i + 1) * 间距 - 15, 起点纵坐标 + (j + 1) * 间距 - 15), &HFF0000, BF
      Else
        Me.Line (起点横坐标 + i * 间距 + 15, 起点纵坐标 + j * 间距 + 15)-(起点横坐标 + (i + 1) * 间距 - 15, 起点纵坐标 + (j + 1) * 间距 - 15), Me.BackColor, BF
      End If
    End If
  End If
End Sub
2012-01-04 21:18
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
上面的程序有个问题,就是点击窗口左边,如果不在格子内会出现下标越界
If i < 格子数 - 1 And j < 格子数 - 1 Then
改为
If i < 格子数 - 1 And j < 格子数 - 1 and i>=0 and j>=0 then
即可
2012-01-04 21:24
zhengzhong13
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-12-30
收藏
得分:0 
回复 楼主 zhengzhong13
上面的问题我解决了,但是我Private Sub Form_Mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)

For l = 1 To weft
For i = 1 To warp
  If X < i * si + 100 And X > i * si - si + 100 And Y < l * sj + 100 And Y > l * sj - sj + 100 Then
    Select Case wea(i, l)
    Case 1
    wea(i, l) = 0
    Case 0
    wea(i, l) = 1
    End Select
  End If
Next i
Next l
For l = 1 To weft
For i = 1 To warp
    If wea(i, l) = 1 Then Form1.Line (i * si + 100, l * sj + 100)-Step(-si, -sj), QBColor(1), BF
    If wea(i, l) = 0 Then Form1.Line (i * si + 100, l * sj + 100)-Step(-si, -sj), QBColor(1), B
Next i
Next l

For i = 0 To si * warp Step si
For j = 0 To sj * weft Step sj
  Form1.Line (i + 100, 100)-(i + 100, weft * sj + 100)
  Form1.Line (100, j + 100)-(warp * si + 100, j + 100)
Next j
Next i

End Sub
改成这样之后填充进去的方格再点的话颜色去不掉
图片附件: 游客没有浏览图片的权限,请 登录注册

怎样改可以实现呢??
2012-01-04 22:49
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
简单地me.cls应该能解决(我和风兄都是填充背景色解决的),你的程序是在循环中判断,每次都画格子线,因此,画之前用me.cls清屏即可,你这种方式效率很低,有闪烁。

[ 本帖最后由 lowxiong 于 2012-1-5 10:12 编辑 ]
2012-01-05 10:05
快速回复:vb格子点画的一点问题,求助求助啊求助(不知道也吼下啊,不要飘过)
数据加载中...
 
   



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

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