| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1263 人关注过本帖
标题:请问“不拖动标题栏,而是通过在表单上按下鼠标左键来移动表单”这段代码为 ...
只看楼主 加入收藏
vfpp314
Rank: 1
等 级:新手上路
帖 子:46
专家分:5
注 册:2016-3-18
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
请问“不拖动标题栏,而是通过在表单上按下鼠标左键来移动表单”这段代码为啥报错?
请问“不拖动标题栏,而是通过在表单上按下鼠标左键来移动表单”这段代码为啥报错?

源代码见附件

通过在表单上按下鼠标左键来移动表单.rar (2.91 KB)


通过在表单或表单内的控件上按下鼠标左键来移动窗口
*(而不是通过在标题栏上按下鼠标左键来移动窗口)

*-----------------------------------------------
*表单的Init事件代码:
Declare Long ReleaseCapture In "user32"
Declare Long SendMessageA In "user32" Long HWnd,Long wMsg,Long wParam,String Lparam
This.MySetMouseDown(Thisform)


*表单的MouseDown事件代码:
Lparameters nButton, nShift, nXCoord, nYCoord
ReleaseCapture()
SendMessageA(This.HWnd,0xA1,2,0)


*为表单新建一方法 MySetMouseDown,其代码为:
Lparameters toControl
If Pemstatus(toControl,"MouseDown",5) And toControl<>Thisform
    Bindevent(toControl,"MouseDown",Thisform,"MouseDown")
Endif
If Type("toControl.objects[1]")="O"
    Local loI
    For Each loI In toControl.Objects
        This.MySetMouseDown(loI)
    Endfor
Endif






搜索更多相关主题的帖子: 源代码 标题栏 
2016-08-25 09:57
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:7 
报错提示是什么
2016-08-25 10:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:7 
程序代码:
_screen.Visible = .F.
#define WM_SYSCOMMAND       0x0112
#define WM_NCLBUTTONDOWN    0x00A1
#define SC_MOVE             0xF010
#define HTCAPTION           0x0002
DECLARE LONG SendMessage IN User32 LONG, LONG, LONG, LONG
of = CREATEOBJECT("form1")
of.show
READ EVENTS

DEFINE CLASS form1 as Form
    ShowWindow = 2
    Desktop = .T.
    AutoCenter = .T.
    BorderStyle = 1
    TitleBar = 0
    MousePointer = 5
    
    ADD OBJECT cmd as commandbutton WITH top=20,left=20,caption="exit"    
    
    PROCEDURE cmd.click
        thisform.Release
    ENDPROC
    
    PROCEDURE Init
        this.Show
        ?
        ?
        ? "    在窗口空白区按住左键拖动"
    ENDPROC
    
    PROCEDURE Unload
        CLEAR EVENTS
    ENDPROC
    
    PROCEDURE MouseDown(nButton, nShift, nXCoord, nYCoord)
        IF (nButton == 1)
                * 方法一
            SendMessage(this.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
                * 方法二
            *SendMessage(this.hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0)
        ENDIF
    ENDPROC
ENDDEFINE

2016-08-25 11:33
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:7 
我这里,好像不报错误。9.0 SP1
2016-08-25 11:36
快速回复:请问“不拖动标题栏,而是通过在表单上按下鼠标左键来移动表单”这段代 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079771 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved