让TadvMemo支持中文

大名鼎鼎的TMS大家都知道,其中的TadvMemo也非常好用,可以高亮显示很多语言,例如pascal,C#,HTML,CSS,Javascript,SQL,JSON等等,但是自从该控件诞生之日起就不支持中文,输入中文时半个汉字,乱码,总之不支持,一堆问题。给TMS去邮件问了,回复说:TAdvMemo requires a monospaced font that is all.
As far as your Chinese font you want to use is monospaced (fixed width) it
should work.

There are Chinese non-monospaced fonts and these are not supported.

(TAdvMemo 需要等宽字体。至于您要使用的中文字体如果是等宽的(固定宽度)应该可以正常使用。有些中文字体是非等宽字体,不支持这些字体。)

意思大家一看就明白了,当下还是不支持。所以没办法就自己动手尝试修改源代码,修改后感觉还不错,比较完美,所以发出来,希望对也想用的朋友有用,不再感觉是个鸡肋!

修改方法简单说下:
1. 需要先写几个函数,这样在修改的时候需要用到,我放在ADVMemo_Helper.pas文件中。
大概就使用4个函数,分别是光标位置转汉字位置,光标前是不是汉字,光标后是不是汉字,当前光标是不是在一个汉字中间等。
2. 需要修改源程序大概70多处,主要是调整计算光标位置,调整字符串长度等。

修改的TadvMemo版本是3.6.6.0,这个版本包含在TMS_Component_Pack_v9.2.4.0包中,修改的文件名称是advmemo.pas,总行数超过2万行,文件大小大概620多K。所有修改的地方有注释,其它版本的相信大家根据我的修改也可以自行完成。

下载的内容包含两个文件:
1.ADVMemo_Helper.pas(复制在和advmemo.pas文件同一个目录,advmemo.pas需要引用)
2.advmemo.pas(替换原来的文件)

经过测试完美支持!

此帖子包含附件:sensorwu_2021113184243.rar 大小:102.0K
(0)

相关推荐