picture怎么画两个圆(要求动态显示过程)

huater 2004-09-13 02:19:01
想实现这样一个功能:按下鼠标定圆心,拖动时显示圆(这个过程中半径是不断变化的,圆在变大或缩小),松开鼠标,一个圆被确定

再按下鼠标,确定第二个圆的圆心,拖动鼠标时显示圆,松开鼠标,第二个圆被确定


再如此操作,画第三个圆

要求在视觉上,这三个圆是在同一个区域内被一个一个画上的。

大家帮我想想办法,多谢了
...全文
235 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsftest 2004-09-14
  • 打赏
  • 举报
回复
一个简单的例子:
先在picturebox里添加一个shape控件,然后:
Dim x1 As Long
Dim y1 As Long
Dim x2 As Long
Dim y2 As Long
Dim DOING As Boolean

Private Sub Command1_Click()
If Shape1.UBound = 0 Then
Shape1(Shape1.UBound).Visible = False
Else
Unload Shape1(Shape1.UBound)
End If
End Sub

Private Sub Command2_Click()
Picture1.Picture = LoadPicture("C:\ABC.jpg")
End Sub

Private Sub Form_Load()
Shape1(0).Visible = False
Shape1(0).Shape = 3
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
x1 = X
y1 = Y
If Shape1(0).Visible = True Then
Load Shape1(Shape1.UBound + 1)
End If
DOING = True
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If DOING = True Then
R = Sqr((X - x1) ^ 2 + (Y - y1) ^ 2)
Label5.Caption = R
Shape1(Shape1.UBound).Visible = True
Shape1(Shape1.UBound).Width = 2 * R
Shape1(Shape1.UBound).Height = 2 * R
Shape1(Shape1.UBound).Top = y1 - R
Shape1(Shape1.UBound).Left = x1 - R
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
DOING = False
End Sub

==============
运行程序,按command2,向picturebox装入图片,示例图片为c:\abc.jpg,然后点picturebox,拖鼠标,画园,松鼠标,完成一个园,如是可画任意多个园。。。。
要删除园时,按command1就可以按照“后画先消”的顺序擦除园。。。。
如果不想按“后画先消”的顺序消除园,则需要在程序中进行另外一些判断处理。。。。
lsftest 2004-09-14
  • 打赏
  • 举报
回复
问题是这个图片框里已经有一幅图片,用户要求达到的效果是在这幅图上画圆,还要求能够擦除,画图我现在是实现了,关键是不好擦,做不到擦完后的感觉象什么也没发生一样
===========================
如果是这样最好选择控件(圆形的sharp控件)数组。。。
如果需要我等一下写个实例。。。。
lfxue 2004-09-14
  • 打赏
  • 举报
回复
把已画好的圆的圆心,半径,线形,颜色的属性都记录下来,再用同样的属性画一个圆不就把原来的圆擦掉了
huater 2004-09-14
  • 打赏
  • 举报
回复
问题是这个图片框里已经有一幅图片,用户要求达到的效果是在这幅图上画圆,还要求能够擦除,画图我现在是实现了,关键是不好擦,做不到擦完后的感觉象什么也没发生一样
northwolves 2004-09-14
  • 打赏
  • 举报
回复
楼上幽默
flyingscv 2004-09-14
  • 打赏
  • 举报
回复
怎么会擦不掉?用力啊
junki 2004-09-14
  • 打赏
  • 举报
回复
如果真的是搞动画的话,我还不如用Flash,实现的效果好用又好看
flyingscv 2004-09-13
  • 打赏
  • 举报
回复
Option Explicit

'startX,startY是鼠标按下时的坐标,也就是圆心坐标,endX,endY是鼠标释放时的坐标,R是半径
Dim StartX As Integer
Dim StartY As Integer
Dim EndX As Integer
Dim EndY As Integer
Dim R As Double

Private Sub Form_Load()
Me.DrawMode = 10
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
StartX = X
StartY = Y
EndX = X
EndY = Y

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
R = Sqr((EndX - StartX) ^ 2 + (EndY - StartY) ^ 2)
Circle (StartX, StartY), R
EndX = X
EndY = Y
R = Sqr((EndX - StartX) ^ 2 + (EndY - StartY) ^ 2)
Circle (StartX, StartY), R
End If
End Sub

'Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
' EndX = X
' EndY = Y
' R = Sqr((EndX - StartX) ^ 2 + (EndY - StartY) ^ 2)
' Circle (StartX, StartY), R, RGB(111, 9, 9)
'End Sub
allan80 2004-09-13
  • 打赏
  • 举报
回复
补充一下,画图的一般格式为
[对象.]circle(x,y),半径[,颜色]
allan80 2004-09-13
  • 打赏
  • 举报
回复
'startX,startY是鼠标按下时的坐标,也就是圆心坐标,endX,endY是鼠标释放时的坐标,R是半径
Dim StartX As Integer
Dim StartY As Integer
Dim EndX As Integer
Dim EndY As Integer
Dim R As Double
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
StartX = X
StartY = Y
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
EndX = X
EndY = Y
R = Sqr((EndX - StartX) ^ 2 + (EndY - StartY) ^ 2)
Circle (StartX, StartY), R
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧