标题:画动态圆的问题
只看楼主
kwy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-5
 问题点数:0 回复次数:6 
画动态圆的问题

我想做一个画动态圆的小程序,但遇到一点问题,请各位大虾帮忙看一下.
要求:1.鼠标左键按下确定圆心,拖动显示虚线圆,鼠标抬起完成画圆
2.画下一个圆的时候,上一个圆仍然存在
程序如下:
Dim X0 As Single, Y0 As Single, R As Single
Dim IsDown As Boolean

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
X0 = X
Y0 = Y
IsDown = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If IsDown = True Then
DrawStyle = 2
R = ((X - X0) ^ 2 + (Y - Y0) ^ 2) ^ 0.5
Cls
Circle (X0, Y0), R
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsDown = False
DrawStyle = 0
Cls
Circle (X0, Y0), R
End Sub

问题:以上程序虽然能实现"要求1",但是每当画下一个圆的时候,上一个画的圆都被清除掉了,"要求2"实现不了.
我自己觉得应该是Cls语句用的不对,但我又找不出其他的替代方法,请高手帮忙改一下.

搜索更多相关主题的帖子: Single 鼠标 动态 Integer Sub 
2006-07-05 15:21
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 

Dim X0 As Single, Y0 As Single, R As Single
Dim IsDown As Boolean

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
X0 = X
Y0 = Y
IsDown = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If IsDown = True Then
DrawStyle = 2
R = ((X - X0) ^ 2 + (Y - Y0) ^ 2) ^ 0.5
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsDown = False
DrawStyle = 0
Circle (X0, Y0), R
End Sub


我的msn: myfend@
2006-07-05 18:47
kwy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-5
得分:0 
谢谢二楼斑竹的回贴
不过这样改动后,"要求2"的问题虽然解决了,但"要求1"的鼠标左
键拖动时的"动态"显示就实现不了了.
我说的"动态"显示过程详细点描述就是:按下鼠标左键以后拖动,
而随着鼠标的拖动,会产生虚线形式的圆,当鼠标抬起的时候,才正式
生成实线圆.
可以的话再帮我看看,谢谢了~
2006-07-05 19:23
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
得分:0 

依然用你原來的代碼.... 但在 MoveUp 事件中更正如下:

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsDown = False
DrawStyle = 0
Cls
Me.AutoRedraw = True
Circle (X0, Y0), R
Me.Refresh
Me.AutoRedraw = False
End Sub


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-07-05 21:38
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
得分:0 
这不能只用 Line 方法解决。这个程序用了 Line 控件。
oEQ90Cjs.rar (4.87 KB) 画动态圆的问题


有一个问题是:如果按动鼠标画圆时,先放大了圆又缩小了圆,然后再拖大一些圆最后放下,画出来的圆会比原定的要大些

[此贴子已经被作者于2006-7-5 21:56:23编辑过]

2006-07-05 21:54
kwy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-5
得分:0 
四楼的yeshirow:按照你的修改,要求都能够实现了,谢谢你的帮助

也谢谢五楼的黑侠的回贴
2006-07-06 11:27
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
得分:0 
强顶!4楼的回帖也帮我解决了困扰我很久的动态画图的问题!
我当时用的擦除对方法实现动态拖动大小的方法,可是以前画的某些线会被擦掉一部分!

Me.AutoRedraw = True
Circle (X0, Y0), R
Me.Refresh
Me.AutoRedraw = False

这方法真的很好!谢谢yeshirow!

2006-07-07 08:53



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




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

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