用vb编写可缩放移动矩形
如何画一个矩形,用鼠标控制大小而且可以移动这个矩形?? 急求代码,请哪位高手帮帮忙吧! --------------------编程问答-------------------- 使用Shape控件。响应MouseDown、Drug/Drop事件。 --------------------编程问答-------------------- 如果是自绘的话,也可以用图片框,这里有个例子:
http://www.m5home.com/temp/DrawDemo.htm
不过由于是给别人写的项目,不能给你代码,思路说给你吧:
形状以对象来管理,比如你要的是矩形,那就以一个矩形对象来管理,这个对象有左上角与右下角坐标属性,还有一个绘制方法,用于在界面上绘制图象,还需要一个移动方法,在传入的坐标上显示虚线框(移动中的效果).还可以加入判断某坐标是否位于对象线条内的方法(用于判断点击选择),对象是否显示属性,对象是否被选中属性等,这个自己扩充啦.
那么主界面里只需要选择一个操作方式(移动,还是选择之类),再用当前点击的坐标调用相应的方法即可. --------------------编程问答--------------------
+1 --------------------编程问答-------------------- shape控件应该没有MouseDown、Drug/Drop事件吧?呵呵
--------------------编程问答-------------------- 容器控件有啊 --------------------编程问答-------------------- 在窗口中放入一个Shape控件,就叫shape1
Option Explicit
Dim xStart As Long, yStart As Long
Dim SizeMode As Long
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
xStart = X
yStart = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim dX As Long, dY As Long
With Shape1
Select Case Button
Case 0
MousePointer = 0
SizeMode = 0
If Abs(X - .Left) < 50 Then
MousePointer = vbSizeWE
SizeMode = 1
Exit Sub
End If
If Abs(X - .Left - .Width) < 50 Then
MousePointer = vbSizeWE
SizeMode = 2
Exit Sub
End If
If Abs(Y - .Top) < 50 Then
MousePointer = vbSizeNS
SizeMode = 3
Exit Sub
End If
If Abs(Y - .Top - .Height) < 50 Then
MousePointer = vbSizeNS
SizeMode = 4
Exit Sub
End If
If X > .Left And X < .Left + .Width And Y > .Top And Y < .Top + .Height Then
MousePointer = vbSizeAll
SizeMode = 5
End If
Case 1
dX = X - xStart
dY = Y - yStart
xStart = X
yStart = Y
Select Case SizeMode
Case 1
.Move .Left + dX, .Top, .Width - dX
Case 2
.Width = .Width + dX
Case 3
.Move .Left, .Top + dY, .Width, .Height - dY
Case 4
.Height = .Height + dY
Case 5
.Move .Left + dX, .Top + dY
End Select
End Select
End With
End Sub --------------------编程问答-------------------- 太感谢了,6楼朋友。还想补充一下,如何让鼠标放在对角线处可以放大缩小? --------------------编程问答--------------------
这个你自己动脑筋想想,已经不难了,要自己多动脑筋,才能有收获 --------------------编程问答--------------------
好的,太感谢了。高手能否在请教你最后一个问题? --------------------编程问答-------------------- 什么问题,你说,我也不一定懂 --------------------编程问答--------------------
点击鼠标就能在画面上画出点,然后连接这些点的最短直线。
拜托您了。 --------------------编程问答-------------------- 这个你要请算法高手来帮你,呵呵,我也不懂怎么才能最短 --------------------编程问答--------------------
这是旅行商问题,算法领域典型的难题。问题本身不难,但是当点足够多以后,计算量成倍增长。所以优化的算法都试图降低运算量和用具部最优解逼近最优解。
目前来说,遗传算法、蚁群、模拟退火等人工智能领域的启发式算法都可以用来求解。 --------------------编程问答-------------------- 这个算法也是应用数学领域众多算法用来试验的典型试验田,国内外有大量的论文都在讨论它。
科普下:http://zh.易做图.org/wiki/%E6%97%85%E8%A1%8C%E6%8E%A8%E9%94%80%E5%91%98%E9%97%AE%E9%A2%98
补充:VB , VBA