| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1062 人关注过本帖, 1 人收藏
标题:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距,计算 ...
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
vfp好像只能用richedit的1.0版本(riched32.dll),对UTF-8不好整。
2.0/3.0(riched20.dll)、4.0( msftedit.dll),vfp好像用不了?
MS有提到动态创建方法和VS开发平台控件

前天 09:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2025-9-5 22:08:28的发言:


支持utf-8的
输入前需要sys(3101,65001)

这样正常
        sys(3101,65001)
        this.edit.SelText = STRCONV("abc字字123",9)
        sys(3101,0)
试试下面的,好像不行?
        STRTOFILE(0hC58B,"utf8.txt")
        sys(3101,65001)
        this.edit.SelText = FILETOSTR("utf8.txt")
        sys(3101,0)
或者:
        sys(3101,65001)
        this.edit.SelText = 0hC58B  &&或者 ""+0hC58B
        sys(3101,0)

前天 10:00
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:425
专家分:648
注 册:2019-10-11
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

不知道这个是哪个版本
前天 10:02
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
回复 73楼 sych
richtx32.ocx
2003的产品
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册



前天 10:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
UTF-8的编码有多种,这个richtx32.ocx可能不兼容一些UTF-8的编码。

前天 10:29
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:425
专家分:648
注 册:2019-10-11
收藏
得分:0 
以下是引用吹水佬在2025-9-6 10:00:30的发言:


这样正常
        sys(3101,65001)
        this.edit.SelText = STRCONV("abc字字123",9)
        sys(3101,0)
试试下面的,好像不行?
        STRTOFILE(0hC58B,"utf8.txt")
        sys(3101,65001)
        this.edit.SelText = FILETOSTR("utf8.txt")
        sys(3101,0)
或者:
        sys(3101,65001)
        this.edit.SelText = 0hC58B  &&或者 ""+0hC58B
        sys(3101,0)

这就是我以前的帖子说到的richtext的局限性,可以在richtext里复制、粘贴、但不能在控件外处理UNICODE字符
STRTOFILE(0hC58B,"utf8.txt")
sys(3101,65001)
this.edit.SelText = FILETOSTR("utf8.txt")
sys(3101,0)
改为下面的代码,只能用loadfile方法处理
STRTOFILE(0hc58b,"utf8.txt")
sys(3101,65001)
this.edit.loadFile("utf8.txt",1)
sys(3101,0)

前天 10:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
回复 76楼 sych
这样也可以了,有点像从文件流输入。
但我这测试文件要带“BOM”才正常。STRTOFILE(0hC58B,"utf8.txt")不正常,STRTOFILE(0hC58B,"utf8.txt",4)正常。
前天 11:02
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:425
专家分:648
注 册:2019-10-11
收藏
得分:0 
STRTOFILE(0hC58B,"utf8.txt")
sys(3101,65001)
这两句顺序颠倒一下就可以了,这样就不需要写文件头了(不知道是不是这样,我这边不存在顺序和文件头的问题)

另外如果用字符串,可以用消息传递
Declare INTEGER SendMessage in WIN32API as sendmessage_c2 INTEGER hwnd , INTEGER wMsg , INTEGER wParam , string lParam
#defi EM_REPLACESEL 0xC2
SendMessage_c2(this.edit.hwnd, EM_REPLACESEL, 1, 0hefbbbf+0hc58b)  &&这里要带上标记

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

前天 11:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10714
专家分:43295
注 册:2014-5-20
收藏
得分:0 
我这测试带“BOM”可不用sys(3101,65001),不带“BOM”用sys(3101,65001)也不正常。
这个richtext是不是有点老了
图片附件: 游客没有浏览图片的权限,请 登录注册
前天 12:09
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:496
专家分:372
注 册:2013-10-4
收藏
得分:0 
只是随手测试,没有刻意保存、记录,现在还原不了啦。
应该是我代码的问题,可能搞着搞着就给搞乱了!太乱了,代码就不贴了。
之前以为0hA1A1无法正确计算行数,今天一查,可能是行距的问题。
吹版提醒过的:Richtextbox1.text = "xxx",会冲掉之前的一切设置,结果我不小心给忽略了,弄得乱七八糟。
修正一下:填充0hA1A1跟0hFEFE,效果是一样的。个人推荐用前者,因绝无风险!
至于行数统计,不知是否错觉,当拉大拉小表单,Anchor=15,导致Richtextbox1控件高度改变,半行有可能也会被计入行数。
前天 13:48
快速回复:RichTextbox控件如何根据自身宽、高,以及用户设定的字体、字号和行距 ...
数据加载中...
 
   



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

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