`
阅读更多

支持中文

来自http://www.cppprog.com/2009/1111/176_5.html

Scintilla默认用的是ANSI编码,所以编辑中文之类的多字节编码时,会出错半个字符的问题。我们可以使用SCI_SETCODEPAGE命令设置使用的编码。

为了支持多语言,建议使用UTF8编码:

  1. // UTF-8编码
  2. SendEditor(SCI_SETCODEPAGE,SC_CP_UTF8);

这样,我们就得用UTF8编码输入输出了。关于UTF8编码的转换,不在本文讨论范围之内,大家自由发挥吧^_^

与C++Builder更好地集成

好了,Scintilla的使用就讲到这里,同学们下课![班长:“起立!”;童鞋们(包括睡觉中的):“老...师...再...见...”;老师:“啊!对了,用C++Builder的同学请多留一会儿,哎~~小白,说你呢,别跑~~”]。

如果大家和我一样一直在用C++Builder照上面玩Scintilla的话,一定早就发现了这个Scintilla控件不接受TAB键-_-。咳...如果你坚持看到了这里,恭喜你,你马上就可以看到解决这个问题的“终级代码”啦:-P

VCL组件库的消息循环位于TApplication类里,要让我们的Scintilla完美地嫁接到VCL里,一个好办法就是把Scintilla也包装成一个VCL组件。

VCL组件的继承线路很清晰,要包装Scintilla,只要写一个TWinControl的超类就可以了:

  1. class TScEdit : public TWinControl{
  2. protected:
  3.     virtual void __fastcall CreateParams(Controls::TCreateParams &Params)
  4.     {
  5.         TWinControl::CreateParams(Params);
  6.         CreateSubClass(Params, "Scintilla");
  7.     }
  8.     virtual void __fastcall WndProc(Messages::TMessage &Message)
  9.     {
  10.         TWinControl::WndProc(Message);
  11.         if(Message.Msg == WM_GETDLGCODE) //让窗体接受方向键和TAB键
  12.             Message.Result = DLGC_WANTALLKEYS|DLGC_WANTARROWS|DLGC_WANTTAB;
  13.     }
  14. public:
  15.     __fastcall TScEdit(Classes::TComponent* AOwner)
  16.         :TWinControl(AOwner){;}
  17.         
  18.     sptr_t SendEditor(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
  19.     {
  20.         return SendMessage(Handle, iMessage, wParam, lParam);
  21.     }
  22. };

现在,我们可以用这个TScEdit代替之前的用CreateWindow建立的Scintilla了:

  1. class TForm1 : public TForm
  2. {
  3.     ...
  4.     TScEdit *m_se;
  5.     sptr_t SendEditor(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
  6.     {
  7.         return m_se->SendEditor(iMessage, wParam, lParam);
  8.     }
  9. };
  10. __fastcall TForm1::TForm1(TComponent* Owner)
  11.     : TForm(Owner)
  12. {
  13.   /* 在C++Builder世界里,抛弃CreateWindow吧-_-
  14.     HWND hwndEditor = ::CreateWindow(_T("Scintilla"),
  15.         NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,
  16.         0,0,ClientWidth,ClientHeight,
  17.         Handle,
  18.         (HMENU)SCINT_ID, HInstance, NULL);
  19.     m_fnDirect = (SciFnDirect)SendMessage(hwndEditor,SCI_GETDIRECTFUNCTION,0,0);
  20.     m_ptrDirect = (sptr_t)SendMessage(hwndEditor,SCI_GETDIRECTPOINTER,0,0);
  21.  
  22.     setCppStyle();
  23.     setFold();
  24.     */
  25.  
  26.     m_se = new TScEdit(this);
  27.     m_se->Parent = this;
  28.     m_se->Align = alClient;//自动占满整个父窗体
  29.     setCppStyle();
  30.     setFold();
  31. }
分享到:
评论

相关推荐

    QR二维码_可支持中文

    "可支持中文"的QR二维码是指在生成二维码时,能够包含汉字字符,这对于中国市场尤其重要,因为中文是主要的沟通语言。传统上,QR码标准可能不直接支持中文,但通过特定的编码方式,如UTF-8,可以将中文字符转换为...

    简单生成二维码,支持中文

    直接复制粘贴代码就行,简单便捷实用,生成二维码,可支持中文!

    FastColoredTextBox-master完美支持中文

    在原版基础上,经过特定的修改,FastColoredTextBox现已能够完美地支持中文显示和选择,极大地提升了对中文文本处理的能力,为开发人员在处理中文代码或文本时提供了极大的便利。 一、FastColoredTextBox的核心特性...

    语音播报不支持中文解决方案

    然而,有时用户会遇到语音播报不支持中文的问题,这可能会限制产品的使用体验。本文将针对这一问题,深入探讨解决方案,并以科大讯飞语音引擎3.0为例进行说明。 首先,语音播报不支持中文的原因可能有多种。可能是...

    二维码生成工具QRCode源代码支持中文(解决解码时中文乱码)

    二维码标准支持多种字符集,包括ASCII、ISO-8859-1以及JIS等,但这些可能不直接支持中文。为了解决这个问题,开发者需要使用能够支持UTF-8编码的二维码生成库,ThoughtWorks.QRCode可能已经考虑到了这一点,确保在...

    QRCode二维码范例,支持中文

    QRCode二维码范例,支持中文,是二维码技术在信息技术领域中的一个典型应用。二维码,全称为Quick Response Code,快速响应码,是一种二维条形码,能够存储大量的信息,包括文字、数字、网址、图片等,并且可以快速...

    sqlite 支持中文模糊查询

    4. **API或驱动兼容性**:如果你通过编程语言与SQLite交互,确保所使用的API或驱动(如Python的sqlite3模块、Java的JDBC驱动等)也支持中文字符。 5. **查询优化**:虽然LIKE操作符方便,但其性能可能不如全文搜索...

    C语言字符串替换函数strrpl支持中文汉字

    C语言字符串替换函数strrpl支持中文汉字,解决含中文汉字,可能替换错误的情况。支持GBK、GB18030字符串。

    改写下jquery.searchableSelect.js 支持汉字模糊查询

    "改写下jquery.searchableSelect.js 支持汉字模糊查询"这个主题,就是关于如何优化一个JavaScript插件,使其能更好地适应中文环境,提升用户在下拉框中搜索汉字的效率。 `jquery.searchableSelect.js`是一个jQuery...

    iText5.1.0(解决不支持中文问题)

    在版本5.1.0中,它引入了对中文字符的支持,解决了之前版本中不支持中文的问题,这对于需要处理中文内容的开发者来说是一个重大改进。这个更新对于在中国、台湾、香港以及其他使用中文语言的地区的企业和开发者尤其...

    mkisofs.exe 支持中文

    2. `mkisofs_据说支持中文显示_2006版.rar`:这个版本同样声称支持中文显示,可能是针对2006年的一个更新或优化,特别强调了中文支持。 3. `说明.txt`:这个文件很可能包含了使用这两个版本的 `mkisofs.exe` 的详细...

    Consolas字体,支持中文哦

    Consolas字体,支持中文哦 Consolas是一个显示代码特别好看的字体,但是苦于不能支持中文。我找了好久,终于找到了。这个支持中文。 想要免费下载,可以在我文章博客下面留言邮箱,我看到就会给你们发送

    超强悍的select支持汉字、拼音首字母、英文搜索方式

    超强悍的支持汉字、拼音首字母、英文搜索方式 是对selectseach的改进、升级版 1.把下拉列表从右边移到了下边,根原始的一样。 2.修复了对多音字失效的bug. 3.简化了使用方法:对任意一个不需要做任何改动,只需加入...

    LUA5.4动态链接库,支持中文函数,适用于Nlua

    支持中文函数是LUA5.4的一个显著特点。在早期版本的LUA中,函数名只能由字母、数字和下划线组成,这限制了语言在非英文环境下的应用。LUA5.4放宽了这一限制,允许使用中文字符作为函数名,极大地拓宽了LUA在全球范围...

    adb push不支持中文乱码的解决方案

    1.android adb push不支持中文乱码的解决方案. 2.在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的push和pull命令时就会导致由于编码方式的不同而产生的错误,解决这一...

    二维码源代码,支持中文

    这个支持中文的二维码源代码,意味着它可以处理包含汉字的信息。中文字符在二维码中的编码通常采用Unicode或GB2312等编码标准,确保了全球范围内对中文的支持。源代码中可能包括了对字符编码的转换处理,以便将中文...

    ffmpeg.exe在windows修正乱码,命令行支持中文字幕文件名

    针对这个问题,"ffmpeg.exe在windows修正乱码,命令行支持中文字幕文件名" 提供了解决方案。 首先,关于乱码问题,这通常是因为FFmpeg在Windows上默认不支持Unicode编码,尤其是在命令行环境下,可能会对非ASCII字符...

    redhat linux支持中文需要的安装包

    安装redhat linux以后需要安装附件的包才能支持中文,否则中文会显示乱码。 请按照如下步骤安装: rpm -ivh libFS-1.0.0-3.1.x86_64.rpm rpm -ivh ttmkfdir-3.0.9-23.el5.x86_64.rpm rpm -ivh chkfontpath-1.10.1-...

    二维码的编写,及解码 ,包括支持中文的,不支持中文的

    对于支持中文的二维码,需要将汉字转换为对应的Unicode编码,通常是UTF-8格式,以确保全球范围内的兼容性。 2. **添加纠错码**:为了提高二维码的容错能力,会在原始数据后附加纠错码。常见的纠错级别有L、M、Q、H...

    支持中文路径和中文属性的编译好的gdal库

    使用命令行的方式gdal2.4.1和geos联合编译的库,包含五个文件夹,bin为生成的dll和exe,include头文件,lib的gdal_i.lib,还有不知道用途的html和data文件夹,主要用途是支持使用union等操作时支持中文路径和中文...

Global site tag (gtag.js) - Google Analytics