请问如何移动一个窗体时,另一个窗体也跟着移动?

解决方案 »

  1.   

    设有两个窗体,form1,form2,代码如下:
       private sub form1_mousedown(x as single,y as single,button as integer)
            dim frm as new form2
            frm.left=me.left
            frm.top=me.top
       end sub
      

  2.   

    Option ExplicitDim sngX As Single, sngY As SinglePrivate Sub Form_Load()
        Form2.Show
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        sngX = X: sngY = Y
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = vbLeftButton Then
            Me.Move Me.Left + X - sngX, Me.Top + Y - sngY
            Form2.Move Form2.Left + X - sngX, Form2.Top + Y - sngY
        End If
    End Sub
      

  3.   

    ''''from1:
    Private Sub Form_Load()
        Form2.Move Form1.Left + Form1.Width, Form1.Top
        Form2.Show vbModeless, Form1
        
    End Sub
    ==================================================================
    ''''form2:(放一个TIMER)
    Private Sub Form_Load()
        Timer1.Interval = 100
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        If Me.Left <> Form1.Left + Form1.Width Then Me.Left = Form1.Left + Form1.Width
        If Me.Top <> Form1.Top Then Me.Top = Form1.Top
    End Sub
      

  4.   

    给你个麻烦的办法:自定义窗体处理函数这个办法是麻烦地但是效率比较好,也比较准确,直接使用FORM的鼠标事件有时候有误判或漏判具体是:
    1.用GETWINDOWLONG取得要拖动窗体的WIN PROC的地址
    2.用SETWINDOWLONG设置该窗体的新的WIN PROC地址为我们自定义的窗体函数地址
    3.在自定义的窗体函数针对移动窗体的消息用SENDMESSAGE转发一条移动消息给被带动窗体
    4.在程序终结的时候用SETWINDOWLONG将原来的WIN PROC替换回来
    具体的API和过程请自己参考MSDN
      

  5.   

    粘滞窗口啊,winamp用的最多啊,自己的程序好说.
      

  6.   

    真有胆子大的,这程序都试验过没有啊?在移动窗口时,MOUSEDOWN是不响应的。
    解决这个问题必须用API,查一下吧。
      

  7.   

    呵呵,楼主大概是模仿winamp的效果巴 用timer控件来检测不是好注意,浪费资源,效率也不高 最好是拦截窗体移动的消息,效果好多了,我试过
      

  8.   

    引用:
       给你个麻烦的办法:自定义窗体处理函数这个办法是麻烦地但是效率比较好,也比较准确,直接使用FORM的鼠标事件有时候有误判或漏判具体是:
    1.用GETWINDOWLONG取得要拖动窗体的WIN PROC的地址
    2.用SETWINDOWLONG设置该窗体的新的WIN PROC地址为我们自定义的窗体函数地址
    3.在自定义的窗体函数针对移动窗体的消息用SENDMESSAGE转发一条移动消息给被带动窗体
    4.在程序终结的时候用SETWINDOWLONG将原来的WIN PROC替换回来
    具体的API和过程请自己参考MSDN
    可不可以给一段代码实例?我一直不太明白这几个api函数的应用方法
      

  9.   

    谢谢大家。呵呵~其实我并不是想模仿winamp的效果,否则把标题栏去掉,直接把代码写到mousedown里就可以了。我是想模拟MDI窗口的效果(其实也差不多啦)。我也觉得用时钟不太好,可是楼上用API的方法我又看不太懂……请问哪里有类似的例子可以下载吗?