以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请问在foxtable中怎么做出来Winamp那种停靠窗口?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=25972)

--  作者:迷狐
--  发布时间:2012/11/21 9:41:00
--  请问在foxtable中怎么做出来Winamp那种停靠窗口?
做出一个主窗口,再做一个窗口怎样与之停靠? 并且在主窗口移动时,子窗口也跟随移动? 


--  作者:lin_hailun
--  发布时间:2012/11/21 9:48:00
--  
 Winamp是什么来的?
--  作者:迷狐
--  发布时间:2012/11/21 9:55:00
--  
即千千静听
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20121121095351.gif
图片点击可在新窗口打开查看

--  作者:lin_hailun
--  发布时间:2012/11/21 10:12:00
--  
 foxtable里,停靠是固定的。千千静听的停靠应该也是固定的,全部窗口向父窗口左边停靠(主窗口透明),移动第一个窗口的时候,移动主窗口。
--  作者:迷狐
--  发布时间:2012/11/21 11:09:00
--  
没有头绪,能够示例吗    
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2012-11-21 11:13:34编辑过]

--  作者:lin_hailun
--  发布时间:2012/11/21 12:11:00
--  
 狐表弄起来会很麻烦……我就不弄了。下面简单模拟一下,实际不是这样做的。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table




--  作者:paullqxp
--  发布时间:2012/11/21 12:34:00
--  

楼主还在用WINAMP,实属不易,勾起我很多回忆

小林的示例并非楼主所需

他是希望主窗体移动时,附属窗体也能跟随移动,小林的是打开附属窗体时,附属窗体的停靠位置为挨着主窗体,并不跟随移动


--  作者:迷狐
--  发布时间:2012/11/21 12:58:00
--  
开始用了Forms("窗口1").Left总是为零,原来还要加Baseform才能得到值图片点击可在新窗口打开查看
图片点击可在新窗口打开查看感谢,加了一个计划管理,实现了停靠
If Forms("窗口1").opened and Forms("窗口2").opened Then
Forms("窗口2").Baseform.Left = Forms("窗口1").Baseform.right + 10
Forms("窗口2").BaseForm.Top = Forms("窗口1").Baseform.Top
End If

能有更好的方法吗?
[此贴子已经被作者于2012-11-21 13:17:43编辑过]

--  作者:lin_hailun
--  发布时间:2012/11/21 14:11:00
--  
以下是引用迷狐在2012-11-21 12:58:00的发言:
开始用了Forms("窗口1").Left总是为零,原来还要加Baseform才能得到值图片点击可在新窗口打开查看
图片点击可在新窗口打开查看感谢,加了一个计划管理,实现了停靠
If Forms("窗口1").opened and Forms("窗口2").opened Then
Forms("窗口2").Baseform.Left = Forms("窗口1").Baseform.right + 10
Forms("窗口2").BaseForm.Top = Forms("窗口1").Baseform.Top
End If

能有更好的方法吗?
[此贴子已经被作者于2012-11-21 13:17:43编辑过]

有,但是麻烦,要添加窗体移动事件。

--  作者:迷狐
--  发布时间:2012/11/22 16:42:00
--  
从网上搜到,都不能实现效果,请看看该如何改?图片点击可在新窗口打开查看
第一种方法
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

采用API ,移动窗口后不能实现跟随移动效果 后来发现先移动窗口,然后在窗口内某控件快速向上按下鼠标另一窗口才移动
先在全局代码中定义
Public Declare Sub ReleaseCapture Lib "user32" ()
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
再在窗口1中 MouseMove事件加入:
Dim lngReturnValue As Long
If e.Button = MouseButtons.Left Then
    ReleaseCapture
    lngReturnValue = SendMessage(e.Form.BaseForm.Handle,WM_NCLBUTTONDOWN, HTCAPTION,0&)
    If Forms("窗口2").opened Then
        Forms("窗口2").Baseform.Left = e.Form.Baseform.right
        Forms("窗口2").BaseForm.Top =  e.Form.BaseForm.Top
    End If
End If

第二种方法
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table

只能实现在窗体1中按任意控件移动鼠标,窗体2能够跟随移动
先在全局代码中定义Public  px,py As Integer
再在窗口1中 MouseDown事件加入:
px=e.x
py=e.y
再在窗口1中 MouseDown事件加入:
If Forms("窗口1").opened And Forms("窗口2").opened Then
If px = e.X And py = e.Y Then
Return
Else
If e.Button = MouseButtons.Left Then
e.Form.Baseform.Left = e.Form.Baseform.Left + e.x - px
e.Form.Baseform.Top  = e.Form.BaseForm.Top + e.y - py

Forms("窗口2").Baseform.Left = e.Form.Baseform.right
Forms("窗口2").BaseForm.Top =  e.Form.BaseForm.Top
End If
End If
End If