注册 登录
编程论坛 VFP论坛

请教,让wait wind 窗口出现在正中间的方法

laibinhua 发布于 2021-10-29 20:01, 1715 次点击
请教,让wait wind 窗口出现在正中间的方法,我这样写不对
nwrow = _SCREEN.Height /2
nwcol = _SCREEN.Width /2  
Wait '加载数据中....' Window AT nwrow  , nwcol Timeout 1    &&NOWAIT
8 回复
#2
吹水佬2021-10-29 20:53
可以用 MESSAGEBOX(),也有 Timeout 参数

#3
laibinhua2021-10-29 21:23
回复 2楼 吹水佬
谢谢,大佬解答
#4
foxfans2021-10-29 21:28
*!* 下面代码肯定有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
#5
laibinhua2021-10-29 22:47
回复 2楼 吹水佬
用messagebox 会出现 确定 按钮的样式,我这边用来提示这样的信息
WAIT wind '<<<<<<< 窗体加载数据中....>>>>>>>'Timeout 1 at 30,83
用在启动表单时(绑在一个计时器里) 用messagebox 可以不出现按钮吗?
#6
sam_jiang2021-10-30 10:27
回复 5楼 laibinhua
不可以,但你可以自己设置一个表单,显示加载过程,然后自动释放啊。
#7
whinda2021-11-05 15:42
程序代码:

*///////////////////////////////////////////////////////////////////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
**

#8
laibinhua2021-11-05 20:23
回复 7楼 whinda
谢谢大佬回复
#9
kangss2021-11-13 14:57
回复 7楼 whinda
创建一个同样大小的临时窗口, 自动居中, 再将 wait window 对齐到这个窗口的左上角

这个方法高明。

谢谢!
1