| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 667 人关注过本帖
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用sych在2025-9-4 06:05:48的发言:

顺着你的思路走,可以用半角或者全角空格填满,再获取行列值,是不是可以省掉一个2


冰雪聪明如我,早想到这个思路啦!
不行,填充500个空格,似乎全挤在了一行。得到的返回值:
列=500
行=1

前天 07:35
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:648
注 册:2019-10-11
收藏
得分:0 
全角空格
前天 08:51
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用sych在2025-9-4 08:51:36的发言:

全角空格


唉,冰雪聪明如我,怎么可能想不到呢?
——不行。
其实我还试过:100个【回车】,100个【全角空格+回车】,……
——不行。准确地说,不太行。
richtextbox对于不可见空白字符的解析似乎存在一些问题,【宋体】会解析错误,多出来好几行,【微软雅黑】倒可能是正确的。

前天 10:22
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:648
注 册:2019-10-11
收藏
得分:0 
只能说你一点也不像我
*thisform.Olecontrol5.font.name="宋体"
thisform.Olecontrol5.font.name="微软雅黑"
thisform.Olecontrol5.text=REPLICATE(CHR(254),2000)

[此贴子已经被作者于2025-9-4 11:11编辑过]

前天 11:03
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用sych在2025-9-4 11:03:36的发言:

只能说你一点也不像我
*thisform.Olecontrol5.font.name="宋体"
thisform.Olecontrol5.font.name="微软雅黑"
thisform.Olecontrol5.text=REPLICATE(CHR(254),2000)


想不到还有0hFEFE这个空白汉字!我老人家墙都不扶就服你!
前天 11:36
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
其实,冰雪聪明的我,还想过,要不要插入N行模样像Word行尾那一个“带弯弯的小箭头”(U+21B5),以冒充回车符,蒙骗用户的……只可惜,GBK编码表中没有对应的字符。
前天 11:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10698
专家分:43295
注 册:2014-5-20
收藏
得分:0 
对于一个字串,从头开始每行显示多少个字,这个问题可以算出。
显示多少行,要适应不同的字体和大小还要多方测试。通过获取字高加行距来算好像不准确,对不同的字体和大小差别也不一样。
前天 14:41
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用sych在2025-9-4 11:03:36的发言:

只能说你一点也不像我
*thisform.Olecontrol5.font.name="宋体"
thisform.Olecontrol5.font.name="微软雅黑"
thisform.Olecontrol5.text=REPLICATE(CHR(254),2000)


其实,实战中仍会有一个小瑕疵的:

假设,richtextbox1中原有两三行文字(注:我老人家一般习惯是thisform.richtextbox1.text = REPLICATE("一二三四五", 7),这样方便数一行有几个字);
现在,需计算一屏有几多行——按照前边的讨论,我们可能会这么做:

* --------------
* 保存现场
* --------------
_screen.LockScreen = .t.
with thisform.richtextbox1
   lnSelstart = lo1.Selstart
   lcRTF = .textRTF
   lcText = .text + REPLICATE(CHR(254), 2000)
   .visible = .f.
   .text = lcText
* 统计一屏总行数(见上边帖子,略。)
* ...
* --------------
* 恢复现场
* --------------
   .textRTF = lcRTF
   .Selstart = lnSelstart
   .visible = .T.
endwith
_screen.LockScreen = .F.

该死的屏幕,执行至此,总会闪一下!
无论如何设置,都会闪一下!
那么,聪明的,如何教他不要闪,只做一个安静的美男子呢?
前天 16:02
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10698
专家分:43295
注 册:2014-5-20
收藏
得分:0 
用text方法输入会清除用EM_SETPARAFORMAT设置的字体属性,也就是说设置的行间距无效。
前天 17:08
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2025-9-4 17:08:41的发言:

用text方法输入会清除用EM_SETPARAFORMAT设置的字体属性,也就是说设置的行间距无效。


确实,我也发现了:Richtextbox的行距有些“飘忽不定”,想得到的一个折中的解决方案是:
在.text = "xxxx"后,重设一遍行距。
直觉行。

前天 17:19
快速回复:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距 ...
数据加载中...
 
   



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

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