| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 715 人关注过本帖
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:421
专家分:648
注 册:2019-10-11
收藏
得分:0 
回复 3楼 吹水佬
PARAFORMAT2 STRUCT
  cbSize            DWORD    ?
  dwMask            DWORD    ?
  wNumbering        WORD     ?
  wEffects          WORD     ?
  dxStartIndent     DWORD    ?
  dxRightIndent     DWORD    ?
  dxOffset          DWORD    ?
  wAlignment        WORD     ?
  cTabCount         WORD     ?
  rgxTabs           DWORD MAX_TAB_STOPS dup(?)
  dySpaceBefore     DWORD    ?
  dySpaceAfter      DWORD    ?
  dyLineSpacing     DWORD    ?
  sStyle            WORD     ?
  bLineSpacingRule  BYTE     ?
  bOutlineLevel     BYTE     ?
  wShadingWeight    WORD     ?
  wShadingStyle     WORD     ?
  wNumberingStart   WORD     ?
  wNumberingStyle   WORD     ?
  wNumberingTab     WORD     ?
  wBorderSpace      WORD     ?
  wBorderWidth      WORD     ?
  wBorders          WORD     ?
PARAFORMAT2 ENDS
MAX_TAB_STOPS = 32
可以用BINTOC()转换,BINTOC(num,"xRS") x:1(BYTE)或2(WORD)或4(DWORD)
请问:结构长度188是怎么算出来的?
昨晚 20:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10701
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2025-9-5 18:46:41的发言:



0hEE9385其实是51#的0hFEFE:

c1 = 0hFEFE
c2 = strconv(c1, 9)
c3 = REPLICATE(c2, 2000)
strtofile(c3, "11.txt")

只是随便选的一个空白字符。你也可以用0hA1A1的UTF-8,或者,任意可见字符的UTF-8去试,都行!

可能是RichEdit当前不支持这个UTF-8编码字符。
如果只是想见到的是空白的行列,不用转来转去,可以直接输入:
        richedit.SelText = REPLICATE(" ",2000)
        richedit.SelText = REPLICATE(""+0hA1A1,2000)
昨晚 20:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10701
专家分:43295
注 册:2014-5-20
收藏
得分:0 
回复 61楼 sych
程序代码:
DWORD 占4字节 4*8=32
WORD  占2字节 2*13=26
BYTE  占1字节 1*2=2
数组 DWORD MAX_TAB_STOPS dup(?) 4*32=128
32+26+2+128=188
昨晚 20:57
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:421
专家分:648
注 册:2019-10-11
收藏
得分:0 
明白了,谢谢
昨晚 22:06
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:421
专家分:648
注 册:2019-10-11
收藏
得分:0 
以下是引用吹水佬在2025-9-5 20:47:10的发言:


可能是RichEdit当前不支持这个UTF-8编码字符。
如果只是想见到的是空白的行列,不用转来转去,可以直接输入:
        richedit.SelText = REPLICATE(" ",2000)
        richedit.SelText = REPLICATE(""+0hA1A1,2000)

支持utf-8的
输入前需要sys(3101,65001)
昨晚 22:08
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:489
专家分:372
注 册:2013-10-4
收藏
得分:0 
以下是引用吹水佬在2025-9-5 20:47:10的发言:
可能是RichEdit当前不支持这个UTF-8编码字符。
如果只是想见到的是空白的行列,不用转来转去,可以直接输入:
        richedit.SelText = REPLICATE(" ",2000)
        richedit.SelText = REPLICATE(""+0hA1A1,2000)


大佬可能没留意前边的讨论,若采用sych帖子的那个API,ANSI版本,半角空格0h20、全角空格0hA1A1都不行,唯独0hFeFe这个特别的空白字符能够正常计算,很是邪门!
不过,一旦切换至UTF-8领空,任何字符都试过了,尽皆扑街,行字符数目全都返回1或2!

昨晚 22:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10701
专家分:43295
注 册:2014-5-20
收藏
得分:0 
回复 66楼 cssnet
是想用一个字符先填充来算行列数吗?
这样的话,要用实际的字串来填才相对准确点。
因每行的字不同而字数也不一样。
还有靠边框的字可能有不完整的绘制(边框挡住)。
3 小时前
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:421
专家分:648
注 册:2019-10-11
收藏
得分:0 
以下是引用cssnet在2025-9-5 22:56:23的发言:



大佬可能没留意前边的讨论,若采用sych帖子的那个API,ANSI版本,半角空格0h20、全角空格0hA1A1都不行,唯独0hFeFe这个特别的空白字符能够正常计算,很是邪门!
不过,一旦切换至UTF-8领空,任何字符都试过了,尽皆扑街,行字符数目全都返回1或2!

估计是你代码有错误,代码贴出来看看
3 小时前
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:799
专家分:3200
注 册:2018-3-13
收藏
得分:0 
感觉用不上这么多复杂的api吧?
简单的用个取插入点光标位置api,加上richtext控件本身的属性和方法,就能计算出每个字符的客户区显示坐标
有了坐标,,每行字符数和行高不就加减法吗?

这家伙很懒,啥也没留下
1 小时前
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10701
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用csyx在2025-9-6 08:24:33的发言:

感觉用不上这么多复杂的api吧?
简单的用个取插入点光标位置api,加上richtext控件本身的属性和方法,就能计算出每个字符的客户区显示坐标
有了坐标,,每行字符数和行高不就加减法吗?

这也是要先填满一框才能操作,只是算法不同,要面对的问题都差不多。
36 分钟前
快速回复:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距 ...
数据加载中...
 
   



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

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