以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请问在foxtable中怎么做出来Winamp那种停靠窗口? (http://foxtable.net/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 -- 没有头绪,能够示例吗
[此贴子已经被作者于2012-11-21 11:13:34编辑过]
|
||||||||
-- 作者:lin_hailun -- 发布时间:2012/11/21 12:11:00 -- 狐表弄起来会很麻烦……我就不弄了。下面简单模拟一下,实际不是这样做的。
|
||||||||
-- 作者: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 -- 从网上搜到,都不能实现效果,请看看该如何改? 第一种方法
采用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 第二种方法
只能实现在窗体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 |