当前位置:编程学习 > VB >>

用vb编写可缩放移动矩形

如何画一个矩形,用鼠标控制大小而且可以移动这个矩形?? 急求代码,请哪位高手帮帮忙吧! --------------------编程问答-------------------- 使用Shape控件。
响应MouseDown、Drug/Drop事件。 --------------------编程问答-------------------- 如果是自绘的话,也可以用图片框,这里有个例子:

http://www.m5home.com/temp/DrawDemo.htm

不过由于是给别人写的项目,不能给你代码,思路说给你吧:

形状以对象来管理,比如你要的是矩形,那就以一个矩形对象来管理,这个对象有左上角与右下角坐标属性,还有一个绘制方法,用于在界面上绘制图象,还需要一个移动方法,在传入的坐标上显示虚线框(移动中的效果).还可以加入判断某坐标是否位于对象线条内的方法(用于判断点击选择),对象是否显示属性,对象是否被选中属性等,这个自己扩充啦.

那么主界面里只需要选择一个操作方式(移动,还是选择之类),再用当前点击的坐标调用相应的方法即可. --------------------编程问答--------------------
引用 1 楼  的回复:
使用Shape控件。
响应MouseDown、Drug/Drop事件。

+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楼朋友。还想补充一下,如何让鼠标放在对角线处可以放大缩小? --------------------编程问答--------------------
引用 7 楼  的回复:
太感谢了,6楼朋友。还想补充一下,如何让鼠标放在对角线处可以放大缩小?


这个你自己动脑筋想想,已经不难了,要自己多动脑筋,才能有收获 --------------------编程问答--------------------
引用 8 楼  的回复:
引用 7 楼  的回复:
太感谢了,6楼朋友。还想补充一下,如何让鼠标放在对角线处可以放大缩小?


这个你自己动脑筋想想,已经不难了,要自己多动脑筋,才能有收获

好的,太感谢了。高手能否在请教你最后一个问题? --------------------编程问答-------------------- 什么问题,你说,我也不一定懂 --------------------编程问答--------------------
引用 10 楼  的回复:
什么问题,你说,我也不一定懂


点击鼠标就能在画面上画出点,然后连接这些点的最短直线。
拜托您了。 --------------------编程问答-------------------- 这个你要请算法高手来帮你,呵呵,我也不懂怎么才能最短 --------------------编程问答--------------------
引用 11 楼  的回复:
然后连接这些点的最短直线


这是旅行商问题,算法领域典型的难题。问题本身不难,但是当点足够多以后,计算量成倍增长。所以优化的算法都试图降低运算量和用具部最优解逼近最优解。

目前来说,遗传算法、蚁群、模拟退火等人工智能领域的启发式算法都可以用来求解。 --------------------编程问答-------------------- 这个算法也是应用数学领域众多算法用来试验的典型试验田,国内外有大量的论文都在讨论它。

科普下: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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,