给VFer狐狸们出个考题!

敦厚的曹操 2012-05-06 11:53:23
加精
as=' ============================================='+CHR(13)+CHR(13)+;
' ★★ 系统正在处理数据,请耐心等候... ★★'+CHR(13)+CHR(13)+;
' =============================================='

WAIT windows as NOWAIT noclear



* 【小狐狸考题】----- 让这个等待窗口在任何屏幕分辨率中,可以居中。

* 【大狐仙考题】----- 让这个等待窗口在任何屏幕分辨率中,可以居中。 前提:as变量中的内容可能会变!如果是固定的,

* -------- 呵呵!拿出100分,活跃下气氛。
...全文
8741 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
am1052 2013-09-05
  • 打赏
  • 举报
回复
这个我收藏一个,谢谢
zkyEric 2012-05-14
  • 打赏
  • 举报
回复
看不明白啊。呵呵
Louis-Lv 2012-05-14
  • 打赏
  • 举报
回复
坑爹啊。。看不懂!!!
mqumqy 2012-05-10
  • 打赏
  • 举报
回复
Clear
*!* typedef struct tagTEXTMETRIC {
*!* LONG tmHeight;
*!* LONG tmAscent;
*!* LONG tmDescent;
*!* LONG tmInternalLeading;
*!* LONG tmExternalLeading;
*!* LONG tmAveCharWidth;
*!* LONG tmMaxCharWidth;
*!* LONG tmWeight;
*!* LONG tmOverhang;
*!* LONG tmDigitizedAspectX;
*!* LONG tmDigitizedAspectY;
*!* TCHAR tmFirstChar;
*!* TCHAR tmLastChar;
*!* TCHAR tmDefaultChar;
*!* TCHAR tmBreakChar;
*!* BYTE tmItalic;
*!* BYTE tmUnderlined;
*!* BYTE tmStruckOut;
*!* BYTE tmPitchAndFamily;
*!* BYTE tmCharSet;
*!* } TEXTMETRIC, *PTEXTMETRIC;'

Declare Long GetDC In user32.dll Long
Declare Long ReleaseDC In user32.dll Long, Long
Declare Integer GetTextMetrics In gdi32.dll Long, String @

tm = Replicate(Chr(0),57)
hdcVfp = GetDC(_vfp.hWnd)
GetTextMetrics(hdcVfp,@tm)

*!* 系统字体平均宽度
lnAvgCharWidth = Ctobin(Substr(tm,21,4),'4rs')
?lnAvgCharWidth

*!* 系统字体高度
lnCharHeight = Ctobin(Substr(tm,1,4),'4rs') + Ctobin(Substr(tm,17,4),'4rs')
?lnCharHeight

ReleaseDC(_vfp.hWnd,hdcVfp)
mqumqy 2012-05-10
  • 打赏
  • 举报
回复
看不明白啊。呵呵
nettman 2012-05-10
  • 打赏
  • 举报
回复
呵呵,收藏下!
zkyEric 2012-05-10
  • 打赏
  • 举报
回复
系统正在处理数据,请耐心等候
LeosDing 2012-05-10
  • 打赏
  • 举报
回复
现在居然还在用VFP?!
lygcw9602 2012-05-09
  • 打赏
  • 举报
回复
桌面居中,屏幕中也应该能居中。
十豆三 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 的回复:]

*前提是系统默认字体和大小
SQL code
CLEAR
a1='=============================================='
a2='★★ 系统正在处理数据,请耐心等候... ★★'
a3='=============================================='
m_len=LEN(a1) && 取最长一行的字符……
[/Quote]楼主是要在任何屏幕分辨率中居中,并不是在运行这段代码的程序中居中,如果你的程序不是最大化,也是居中在桌面,就不符合楼主要求了。
lygcw9602 2012-05-09
  • 打赏
  • 举报
回复
*前提是系统默认字体和大小
CLEAR
a1='=============================================='
a2='★★ 系统正在处理数据,请耐心等候... ★★'
a3='=============================================='
m_len=LEN(a1) && 取最长一行的字符串的长度
CMSG=PADC(a1,m_len)+Chr(13)+Chr(13)+PADC(a2,m_len)+Chr(13)+Chr(13)+PADC(a3,m_len)

WAIT CMSG WINDOWS TIMEOUT 0 AT SROWS()/2,(SCOLS()-m_len)/2 NOWAIT
FOR I=1 TO 8888
? I
ENDFOR
WAIT CLEAR
lygcw9602 2012-05-09
  • 打赏
  • 举报
回复
a1='=============================================='
a2='★★ 系统正在处理数据,请耐心等候... ★★'
a3='=============================================='
m_len=LEN(a1) && 取最长一行的字符串的长度
CMSG=PADC(a1,m_len)+Chr(13)+Chr(13)+PADC(a2,m_len)+Chr(13)+Chr(13)+PADC(a3,m_len)
WAIT CMSG WINDOW TIMEOUT 0 AT SROWS()/2,(SCOLS()-m_len)/2
maqiang350194842 2012-05-09
  • 打赏
  • 举报
回复
很厉害
GoSky 2012-05-09
  • 打赏
  • 举报
回复
VFP表示不懂!
敦厚的曹操 2012-05-09
  • 打赏
  • 举报
回复
高手如云呀,这回开了眼界了!马上结贴,分别给分!
wbryfl 2012-05-09
  • 打赏
  • 举报
回复
VFP还有人用啊
taohua300 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
谢谢总版主的测试

只能做到现在的基本居中,而非绝对居中,有两个原因:
1. 不知道 wait window 的边框大小是如何定的,在不同的分辨率下是否都一样?代码中假设上下左右都是 5,仔细看看那个窗口就会发现,四个方向的边框都不一样大。
2. 多行文本时,每行高度到底占多少了像素?好像不是等差递增的,用 宋体,9 测试一下结果如下:
1 行高度 -> 16
2 行高……
[/Quote]
感觉还有第3个原因,不同的字体字符宽度也不一样,不像最开始的打字机使用的等宽字体。
同一字符的大小写,以及不同字符的宽度也是不一样的
这可能也是vfp画窗口的时候导致第一个原因出现的缘故
都市夜猫 2012-05-08
  • 打赏
  • 举报
回复
谢谢总版主的测试

只能做到现在的基本居中,而非绝对居中,有两个原因:
1. 不知道 wait window 的边框大小是如何定的,在不同的分辨率下是否都一样?代码中假设上下左右都是 5,仔细看看那个窗口就会发现,四个方向的边框都不一样大。
2. 多行文本时,每行高度到底占多少了像素?好像不是等差递增的,用 宋体,9 测试一下结果如下:
1 行高度 -> 16
2 行高度 -> 26..............+10
3 行高度 -> 38..............+12
... 以后都是相差 12
Fontmetric(1,'宋体',9) 告诉我们 宋体,9 的高度是 12,但前两行不是这样来的
十豆三 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
先试试这个:

VB code
*-- vfp9 代码
Text to cMsg Textmerge Noshow
==================================================
       Wait 窗口居中示例

  ★★ 系统正在处理数据,请耐心等候... ★★

==================================……
[/Quote]测试了一下,在 XP、 Win7 下的不同分辨率,不同消息框字体及大小,均正常显示。
学习了。
十豆三 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
谢谢总版主的测试

只能做到现在的基本居中,而非绝对居中,有两个原因:
1. 不知道 wait window 的边框大小是如何定的,在不同的分辨率下是否都一样?代码中假设上下左右都是 5,仔细看看那个窗口就会发现,四个方向的边框都不一样大。
2. 多行文本时,每行高度到底占多少了像素?好像不是等差递增的,用 宋体,9 测试一下结果如下:
1 行高度 -> 16
2 行高……
[/Quote]是有一点偏差,如你的例子偏左了一个“=”号的位置,不过这也可以忽略了,因为用 Messagebox 比对,根本看不出来。
加载更多回复(21)

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧