| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 841 人关注过本帖
标题:如何编写 messagebox 函数
只看楼主 加入收藏
zjj1974
Rank: 2
等 级:论坛游民
威 望:1
帖 子:58
专家分:38
注 册:2014-8-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:9 
如何编写 messagebox 函数
系统自带的函数messagebox,不能控制字体的大小、背景和前景颜色不能变化等诸多不便
想自己编写一个messagebox函数
现在有2个问题需要解决,还望各位高手赐教
1、得到字符串的宽度
   "12345"+chr(10)+"12345678"+chr(10)"12"
   如果能准确地得到字符串的长度为8
   再用8*WFONT(2)=字符串的宽度
2、得到字符串的高度
  如上,高度是3*字符串的高度

各位有什么好的方法啊?

[ 本帖最后由 zjj1974 于 2014-9-10 10:24 编辑 ]
搜索更多相关主题的帖子: 字符串 如何 字符串 如何 
2014-09-10 10:18
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:6 
看看 FONTMETRIC() 函数

参阅
AFONT()
GETFONT()
SYSMETRIC()
TXTWIDTH()
2014-09-10 10:38
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
谁有好的方法 说说
2014-09-10 11:25
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
2楼已经给出了方法,应该没有其他更好的方法。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-09-10 17:27
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:7 
如果以行数作为高度,以最长字段的字节数作为宽度(仅供参考)
 cf="12345"+chr(10)+"12345678"+chr(10)+"12"
 nf=alines(k,cf,CHR(10)) && 行数
 for i=1 to nf-1
     nmax=MAX(LEN(k(i)),LEN(k(i+1)))
 endfor
 ?nmax && 最长字节数

2014-09-10 22:02
jyxfp
Rank: 2
等 级:论坛游民
帖 子:23
专家分:81
注 册:2013-2-9
收藏
得分:7 
稍补充一下楼上:
如果以行数作为高度,以最长字段的字节数作为宽度(仅供参考)
cf="12345"+chr(10)+"12345678"+chr(10)+"12"
nf=alines(k,cf)  && 行数 &&此处省略换行符,一个换行符 (CHR(10)) 或回车符 (CHR(13)) 表明了一行的结束。也可以使用这些字符的组合 (CHR(10) + CHR(13) 或 CHR(13) + CHR(10)) 表明一行的结束
nmax=0     && 赋初值

FOR EACH i IN k
  nmax=MAX(nmax,LEN(i))
endfor
?nmax && 最长字节数
 

[ 本帖最后由 jyxfp 于 2014-9-11 08:58 编辑 ]
2014-09-11 08:46
zjj1974
Rank: 2
等 级:论坛游民
威 望:1
帖 子:58
专家分:38
注 册:2014-8-10
收藏
得分:0 
谢谢各位了
2014-09-11 09:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用行数乘字体高度的方法是行不通的

授人以渔,不授人以鱼。
2014-09-11 11:30
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
回复6楼 jyxfp,你的说法很全面。昨天草率举了一个3行字串例子,不通用。今天打开电脑想纠正一下,结果看到你的说法和我想得似乎一字不差。谢谢!谢谢!

[ 本帖最后由 qingfameng 于 2014-9-11 14:58 编辑 ]
2014-09-11 14:33
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
要准确获得字符串的显示高度和宽度,采用字符数乘以固定值是行不通的,除非指定为等宽字体(如:宋体)。
我有一个思路可供参考。
1. 在表单的Init事件中接收要显示的字符串 tcStr
2. 利用 Aline()函数将字符串 tcStr 转换为数组 aStr
3. 根据 aStr 元素的个数在表单上添加对应数量的 Label 控件,并设置 AutoSize=.t.,Caption=aStr[i]
4. 检测每个Label的宽度,根据最大宽度值设置表单的宽度,表单的宽度 = Label控件最大宽度 + 固定值
5. 根据 Label控件的高度设定 Label 控件的 Top值,Label2.Top = Label1.Top + Label1.Height + 2(或其他固定值)
6. 假设最后一个标签是LabelX,则表单的高度 = LabelX.Top + LabelX.Height + 固定值

上述方法利用了标签控件的AutoSize=.t.属性,它会根据要显示的内容和字体设置自动调整控件的宽度和高度,再根据标签的高度和宽度调整表单的大小。

泉城飞狐
2014-09-12 10:06
快速回复:如何编写 messagebox 函数
数据加载中...
 
   



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

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