标题:请教,让wait wind 窗口出现在正中间的方法
只看楼主
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
结帖率:56.36%
已结贴  问题点数: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
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:4 
可以用 MESSAGEBOX(),也有 Timeout 参数

2021-10-29 20:53
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 2楼 吹水佬
谢谢,大佬解答
2021-10-29 21:23
foxfans
Rank: 4
等 级:贵宾
威 望:11
帖 子:90
专家分:278
注 册: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
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 2楼 吹水佬
用messagebox 会出现 确定 按钮的样式,我这边用来提示这样的信息
WAIT wind '<<<<<<< 窗体加载数据中....>>>>>>>'Timeout 1 at 30,83
用在启动表单时(绑在一个计时器里) 用messagebox 可以不出现按钮吗?
2021-10-29 22:47
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册: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
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 7楼 whinda
谢谢大佬回复
2021-11-05 20:23
kangss
Rank: 4
等 级:贵宾
威 望:10
帖 子:138
专家分:237
注 册:2014-6-12
得分:0 
回复 7楼 whinda
创建一个同样大小的临时窗口, 自动居中, 再将 wait window 对齐到这个窗口的左上角

这个方法高明。

谢谢!
2021-11-13 14:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507337-1-1.html




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

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