| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1379 人关注过本帖
标题:请教,让wait wind 窗口出现在正中间的方法
只看楼主 加入收藏
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
结帖率:58.97%
收藏
已结贴  问题点数:10 回复次数:8 
请教,让wait wind 窗口出现在正中间的方法
请教,让wait wind 窗口出现在正中间的方法,我这样写不对
nwrow = _SCREEN.Height /2
nwcol = _SCREEN.Width /2  
Wait '加载数据中....' Window AT nwrow  , nwcol Timeout 1    &&NOWAIT
搜索更多相关主题的帖子: 方法 Window wait 出现 窗口 
2021-10-29 20:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:4 
可以用 MESSAGEBOX(),也有 Timeout 参数

2021-10-29 20:53
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 2楼 吹水佬
谢谢,大佬解答
2021-10-29 21:23
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:112
专家分:324
注 册:2021-10-23
收藏
得分:4 
*!* 下面代码肯定有Bug,不是十分准确,也没考虑多行的情况,还有自身字体和字高,自己结合使用
LOCAL PosX,PosY,cMessage
m.cMessage="单行简单测试尽量居中"
m.PosX= SROWS()/2
m.PosY =SCOLS()/2 -LEN(m.cMessage)/2  &&考虑自身宽度微调
WAIT m.cMessage window at m.PosX,m.PosY TIMEOUT 1
2021-10-29 21:28
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 2楼 吹水佬
用messagebox 会出现 确定 按钮的样式,我这边用来提示这样的信息
WAIT wind '<<<<<<< 窗体加载数据中....>>>>>>>'Timeout 1 at 30,83
用在启动表单时(绑在一个计时器里) 用messagebox 可以不出现按钮吗?
2021-10-29 22:47
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:746
专家分:1114
注 册:2021-10-13
收藏
得分:4 
回复 5楼 laibinhua
不可以,但你可以自己设置一个表单,显示加载过程,然后自动释放啊。
2021-10-30 10:27
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
程序代码:
*///////////////////////////////////////////////////////////////////UI相关
*提示消息居中
*msgCenter(cTxt,'nowait noclear nTimeOut...')
Procedure  msgCenter(tcMsg, tcOptions)
    Local cBuff, hDC, cFontName, nFontSize, nRows, nHeight, nWidth, cForm, oForm
    Local aTemp[1]

    * 取系统消息框字体 Name, Size
    Declare Long SystemParametersInfo In win32api Long, Long, String @, Long
    Declare Long GetDC In win32api Long
    Declare Long ReleaseDC In win32api Long, Long
    Declare Long GetDeviceCaps In win32api Long, Long
    Declare Long MulDiv In win32api Long, Long, Long
    cBuff = Space(336)
    cBuff = BinToC(4+Len(cBuff), 'rs') + cBuff
    SystemParametersInfo(41, Len(cBuff), @ cBuff, 0)
    cFontName = Getwordnum(Substr(cBuff,309,32), 1, 0h00)
    nFontSize = CToBin(Substr(cbuff,281,4),'rs')
    hDC = GetDC(0)
    nFontSize = -MulDiv(nFontSize, 72, GetDeviceCaps(hDC, 90))
    ReleaseDC(0, hDC)

    * 找出最长的一行, 用于确定窗口宽度
    nRows  = Alines(aTemp, tcMsg)
    nWidth = 0
    For ii = 1 To nRows
        nWidth = Max(nWidth, Txtwidth(aTemp[ii],cFontName,nFontSize)*Fontmetric(6,cFontName,nFontSize))
    Endfor
    nWidth  = nWidth + 2*5      && 加边框宽/高度(估计值,不知 wait 窗口的边框值如何定的)
    nHeight = Fontmetric(1, cFontName, nFontSize) * nRows + 2*5

    * 创建一个同样大小的临时窗口, 自动居中, 再将 wait window 对齐到这个窗口的左上角
    cForm = Sys(2015)
    Define Window (cForm) At 0,0 Size 1, 1 In Desktop Name oForm
    oForm.Move(0, 0, nWidth, nHeight)
    Move Window (cForm) Center
    Wait tcMsg Window At Max(0,Wlrow(cForm)), Max(0,Wlcol(cForm)) &tcOptions
    Release Windows (cForm)        &&
    Clear Dlls 'SystemParametersInfo','GetDC','ReleaseDC','GetDeviceCaps','MulDiv'
Endproc
**

2021-11-05 15:42
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 7楼 whinda
谢谢大佬回复
2021-11-05 20:23
kangss
Rank: 6Rank: 6
等 级:贵宾
威 望:14
帖 子:218
专家分:464
注 册:2014-6-12
收藏
得分:0 
回复 7楼 whinda
创建一个同样大小的临时窗口, 自动居中, 再将 wait window 对齐到这个窗口的左上角

这个方法高明。

谢谢!
2021-11-13 14:57
快速回复:请教,让wait wind 窗口出现在正中间的方法
数据加载中...
 
   



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

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