| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 346 人关注过本帖
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:478
专家分:372
注 册:2013-10-4
收藏
得分:0 
其实,计算一屏总行数,经反复实验,我有一个不太精确的解决方案:

程序代码:
*获取当前字体的行高
lnFontHeight = FONTMETRIC(1, thisform.RichTexBox1.Font.Name, thisform.RichTexBox1.Font.Size)

*计算每屏行数
lnLinesPerPage = INT(thisform.RichTexBox1.Height / lnFontHeight / 1.35)


至于那个神秘参数1.35,大致相当于行间距,是我随意设置的——有时候准,有时候不准,计算误差大约在0--2行之间。
不知诸位英雄,有没有更精确的解决方案?

前天 14:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10682
专家分:43295
注 册:2014-5-20
收藏
得分:0 
GDI绘制文本有设置行间距和字间距的相关函数
思路:
1..获取字串高+行间距,确定行数。
2..获取字串宽,确定一行字数。
行间距可以试试FONTMETRIC(5,.....)+n,n(1,2,.....)试试。
字串宽就有点麻烦,可尝试调用API函数GetTextExtentPoint32W()最后一个参数(SIZE结构)是返回字串输出的x,y座标,x就是字串的宽,y是字高。



前天 16:24
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:411
专家分:644
注 册:2019-10-11
收藏
得分:0 
这个神奇的1.35猜测是96/72=1.33
昨天 07:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10682
专家分:43295
注 册:2014-5-20
收藏
得分:0 
试了一下:
1、GetTextExtentPoint32W()对windwos的标准控件EDIT计算结果正确。
2、GetTextExtentPoint32W()好像不直接支持富编辑(Rich Edit),不能正确获取字体对象句柄。
    尝试:
    1、看看能否获取Rich Edit的字体句柄。
    2、根据Rich Edit设置的字体创建新的字体对象。

昨天 09:46
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:478
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用sych在2025-9-3 07:32:30的发言:

这个神奇的1.35猜测是96/72=1.33


不太清楚。我让DC猜测这个“校正参数”,我设置行距 lnlineSpacing = 行高的1.5倍,它给出的调整建议:

程序代码:
初始值:从 lc校正参数 = 0.08 开始测试
根据行间距调整:
1.0倍行距:校正参数 ≈ 0.04-0.06
1.5倍行距:校正参数 ≈ 0.08-0.12
2.0倍行距:校正参数 ≈ 0.12-0.16
根据字体大小调整:
小字体(8-10pt):减少校正参数
大字体(12-14pt+):增加校正参数

最终公式:
lnLinesPerPage = INT(thisform.RichTextBox1.Height / lnFontHeight / ;
                  (lnlineSpacing - (0.08 + (lnlineSpacing - 1) * 0.06)))


然而,结果并不理想。

昨天 11:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10682
专家分:43295
注 册:2014-5-20
收藏
得分:0 
行间距应该是编辑控件有定义的,不同字体和大小会有不同。
最好是自己能重新定义,那就是你说了算。

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

昨天 11:39
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:478
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2025-9-3 11:39:56的发言:

行间距应该是编辑控件有定义的,不同字体和大小会有不同。
最好是自己能重新定义,那就是你说了算。


Richtextbox可以通过API设置行距,见我以前的讨论帖,还是您老人家给出的答案,亲,您不记得啦:
https://hrss.shandong.
昨天 13:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10682
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2025-9-3 13:08:44的发言:

Richtextbox可以通过API设置行距,见我以前的讨论帖,还是您老人家给出的答案,亲,您不记得啦:
https://hrss.shandong.

与.gov的无关吧
昨天 13:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10682
专家分:43295
注 册:2014-5-20
收藏
得分:0 
SendMessage(thisform.rich1.Hwnd, EM_SETPARAFORMAT, 0, @pf)
获取就 EM_GETPARAFORMAT
昨天 14:42
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:411
专家分:644
注 册:2019-10-11
收藏
得分:0 
Rich Edit 控件 SDK 参考手册-CSDN博客  https://blog.
刚搜到的帖子,先钉一下
昨天 15:09
快速回复:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距 ...
数据加载中...
 
   



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

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