RichEdit3 自动宽字符取行字串问题

Mr_Kaito 2013-12-03 12:00:02
我在BCB6使用RichEdit3,因为這自动格式是宽字符(WideString),
我用RichEdit1 -> Lines -> Strings[0]这样的代码时,
因为BCB6好像默认支援ANSI,所以导致显示的字串只有前面几个字,无法获得一行的完整字串。

我尝试用AnsiString strText = RichEdit1 -> Lines -> Strings[0];
也不行,该怎么解决这种问题呢...

网上找了WideCharToMultiByte()与CW2A(),两种Wide转Ansi方式,
看不太懂,这两个转换函数可以解决我的问题吗?
...全文
277 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 17 楼 ccrun 的回复:
[quote=引用 15 楼 like80902 的回复:] [quote=引用 14 楼 ccrun 的回复:] [quote=引用 12 楼 like80902 的回复:] [quote=引用 10 楼 kfrght 的回复:] 我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我在想阿... 文本内容是WideString的,RxRichEdit的TStrings在Classes.hpp定义是Ansi, 所以读出来才会少几个字符吧!!! 这...............[/quote] 宽字符按窄字符来读取, 遇到0x0的字节就认为结束了.[/quote] 也不一定加空格 如: 某行(今夜烟花最美),代码取行显示(今夜烟?) 某行(今夜烟花最美多),代码取行显示(今夜烟花) 某行(今夜烟花最美多美),代码取行显示(今夜烟花?) 某行(今夜烟花最美多美A),代码取行显示(今夜烟花最) ......以此类堆 好诡异!!![/quote] 这个明显是取一半的数据哦, 看来和有效长度有关系.[/quote] 但诡异的是,该行只要是英文或数字都可以完整显示。 所以是这两个文本控件对中文数据长度兼容性问题啰? 妖哥厉害,会想到这个!!!!
ccrun.com 2013-12-05
  • 打赏
  • 举报
回复
引用 15 楼 like80902 的回复:
[quote=引用 14 楼 ccrun 的回复:] [quote=引用 12 楼 like80902 的回复:] [quote=引用 10 楼 kfrght 的回复:] 我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我在想阿... 文本内容是WideString的,RxRichEdit的TStrings在Classes.hpp定义是Ansi, 所以读出来才会少几个字符吧!!! 这...............[/quote] 宽字符按窄字符来读取, 遇到0x0的字节就认为结束了.[/quote] 也不一定加空格 如: 某行(今夜烟花最美),代码取行显示(今夜烟?) 某行(今夜烟花最美多),代码取行显示(今夜烟花) 某行(今夜烟花最美多美),代码取行显示(今夜烟花?) 某行(今夜烟花最美多美A),代码取行显示(今夜烟花最) ......以此类堆 好诡异!!![/quote] 这个明显是取一半的数据哦, 看来和有效长度有关系.
宝龙哥 2013-12-05
  • 打赏
  • 举报
回复
引用 13 楼 like80902 的回复:
[quote=引用 10 楼 kfrght 的回复:] 我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我原本是弄BCB6的RichEdit中,不过已过10年多 支援的功能已不完善,才去找第三方控件。 找到了两个都一样问题,叹....... 我只是个刚入门,不是挺会改控件内部的定义 要尽快完成理想中的开发,得考虑升级XE2以上了![/quote] 在RichEdit3中有直接支持ASCII字符串和Unicode字符串两套函数,我之前准备修改源码以在BCB中使用RichEdit4x,但发现RichEdit4x中放弃和添加了大量的函数,BCB源码中的大部分接口函数都不能存在了,能用的也有诸多问题,考虑以后的跨平台等问题,因此放弃了
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 14 楼 ccrun 的回复:
[quote=引用 12 楼 like80902 的回复:] [quote=引用 10 楼 kfrght 的回复:] 我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我在想阿... 文本内容是WideString的,RxRichEdit的TStrings在Classes.hpp定义是Ansi, 所以读出来才会少几个字符吧!!! 这...............[/quote] 宽字符按窄字符来读取, 遇到0x0的字节就认为结束了.[/quote] 也不一定加空格 如: 某行(今夜烟花最美),代码取行显示(今夜烟?) 某行(今夜烟花最美多),代码取行显示(今夜烟花) 某行(今夜烟花最美多美),代码取行显示(今夜烟花?) 某行(今夜烟花最美多美A),代码取行显示(今夜烟花最) ......以此类堆 好诡异!!!
ccrun.com 2013-12-05
  • 打赏
  • 举报
回复
引用 12 楼 like80902 的回复:
[quote=引用 10 楼 kfrght 的回复:] 我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我在想阿... 文本内容是WideString的,RxRichEdit的TStrings在Classes.hpp定义是Ansi, 所以读出来才会少几个字符吧!!! 这...............[/quote] 宽字符按窄字符来读取, 遇到0x0的字节就认为结束了.
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 10 楼 kfrght 的回复:
我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我原本是弄BCB6的RichEdit中,不过已过10年多 支援的功能已不完善,才去找第三方控件。 找到了两个都一样问题,叹....... 我只是个刚入门,不是挺会改控件内部的定义 要尽快完成理想中的开发,得考虑升级XE2以上了!
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 10 楼 kfrght 的回复:
我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
我在想阿... 文本内容是WideString的,RxRichEdit的TStrings在Classes.hpp定义是Ansi, 所以读出来才会少几个字符吧!!! 这...............
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 9 楼 kfrght 的回复:
[quote=引用 8 楼 like80902 的回复:] [quote=引用 5 楼 kfrght 的回复:] [quote=引用 4 楼 like80902 的回复:] 还是不行,网上搜索不到有人碰过这种问题.. 看置顶那篇XE5好像还没有破解,正考虑要不要换, BCB6在现今的电脑软件趋势下,还得装上一些第三方控件来弥补需求。
XE5已经破了,upd1还没破[/quote] 跑去顶文6F有看到破解方式,先下载来保存.. [/quote] 有一个网站说发布破解的,但实际好像是不好用的,要是有了的话会在一些专注的论坛上有专门的帖子的,会有好多人去顶的 不知道你说的顶文6F是什么东东[/quote] 第6页,说错了抱歉!
宝龙哥 2013-12-05
  • 打赏
  • 举报
回复
我目前也正在寻找一个跨平台的开源的富文本编辑器,但都有问题
宝龙哥 2013-12-05
  • 打赏
  • 举报
回复
引用 8 楼 like80902 的回复:
[quote=引用 5 楼 kfrght 的回复:] [quote=引用 4 楼 like80902 的回复:] 还是不行,网上搜索不到有人碰过这种问题.. 看置顶那篇XE5好像还没有破解,正考虑要不要换, BCB6在现今的电脑软件趋势下,还得装上一些第三方控件来弥补需求。
XE5已经破了,upd1还没破[/quote] 跑去顶文6F有看到破解方式,先下载来保存.. [/quote] 有一个网站说发布破解的,但实际好像是不好用的,要是有了的话会在一些专注的论坛上有专门的帖子的,会有好多人去顶的 不知道你说的顶文6F是什么东东
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 5 楼 kfrght 的回复:
[quote=引用 4 楼 like80902 的回复:] 还是不行,网上搜索不到有人碰过这种问题.. 看置顶那篇XE5好像还没有破解,正考虑要不要换, BCB6在现今的电脑软件趋势下,还得装上一些第三方控件来弥补需求。
XE5已经破了,upd1还没破[/quote] 跑去顶文6F有看到破解方式,先下载来保存..
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
引用 6 楼 ccrun 的回复:
就高版本的C++Builder来说, 目前XE2 + U4/5的版本相对稳定一些, 如果不需要移动开发的话, 没必要升级到XE4/XE5. 另外, 你的RichEdit3是如何引入工程的?
就是你教我的,你寄给我的记事本上的方法安装。 任何读写等都运行正常,搜寻我也用好了, 将搜寻关键字改成宽字符就可以成功搜寻中英文正确。 只剩下这个RichEdit1->Lines->Strings[x], 读出来的字后面都不见,除非在后面加几个空格才读得出来.. 不论RxLib2.7与RichEdit3都一样,安装.bpk包后直接VCL拉过来用, 还需要加什么吗?.....
Mr_Kaito 2013-12-05
  • 打赏
  • 举报
回复
我发现RichEdit3.0压缩包内有2000年的RICHED20.DLL 动态调用LoadLibrary()载入后却可以正常显示了,虽然字变粗。 但却变成无法LoadFromFile()载入RTF和TXT.. 陆续LoadLibrary(),Win7拥有的Riched32.dll,RICHED20.DLL,msftedit.dll都不行。 我的妈呀!晕死我了...微软为什么要用那么难搞的东西!
宝龙哥 2013-12-04
  • 打赏
  • 举报
回复
加上:RichEdit1->PlainText=true; 试试
Mr_Kaito 2013-12-04
  • 打赏
  • 举报
回复
感谢你的回覆 ... 我用第三方控件RxRichEdit(RxLib2.7)与RichEdit3.0,都是这个问题。 将一段中文输入控件属性栏的Lines->TStrings地方, 运行时中文后面几个字却不见了变成“?”,打开TStrings属性栏,显示RichEdit line insertion error。 我运行时将RTF或TXT中文文件载入RichEdit中可正常显示, 但用RichEdit1->Lines->Strings[x],显示出来的字也是后面几个字不见。 但如果在那行后面加几个空格,就显示出来了..... 这跟宽字符有关吗? 还是控件在BCB6 Ansi环境架构下的问题。
宝龙哥 2013-12-04
  • 打赏
  • 举报
回复
RichEdit3为了保持兼容性由两种模式,一种是支持ASCII字符串,一种是支持Unicode字符串,你的不知道是不是字符串编码的问题 你在引入RichEdit3的时候应该要载入一些借口函数,你检查并修改一下试试
ccrun.com 2013-12-04
  • 打赏
  • 举报
回复
就高版本的C++Builder来说, 目前XE2 + U4/5的版本相对稳定一些, 如果不需要移动开发的话, 没必要升级到XE4/XE5. 另外, 你的RichEdit3是如何引入工程的?
宝龙哥 2013-12-04
  • 打赏
  • 举报
回复
引用 4 楼 like80902 的回复:
还是不行,网上搜索不到有人碰过这种问题.. 看置顶那篇XE5好像还没有破解,正考虑要不要换, BCB6在现今的电脑软件趋势下,还得装上一些第三方控件来弥补需求。
XE5已经破了,upd1还没破
Mr_Kaito 2013-12-04
  • 打赏
  • 举报
回复
还是不行,网上搜索不到有人碰过这种问题.. 看置顶那篇XE5好像还没有破解,正考虑要不要换, BCB6在现今的电脑软件趋势下,还得装上一些第三方控件来弥补需求。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧