支持中文
来自http://www.cppprog.com/2009/1111/176_5.htmlhtml
Scintilla默认用的是ANSI编码,因此编辑中文之类的多字节编码时,会出错半个字符的问题。咱们能够使用SCI_SETCODEPAGE命令设置使用的编码。ui
为了支持多语言,建议使用UTF8编码:this
-
- SendEditor(SCI_SETCODEPAGE,SC_CP_UTF8);
这样,咱们就得用UTF8编码输入输出了。关于UTF8编码的转换,不在本文讨论范围以内,你们自由发挥吧^_^编码
与C++Builder更好地集成
好了,Scintilla的使用就讲到这里,同窗们下课![班长:“起立!”;童鞋们(包括睡觉中的):“老...师...再...见...”;老师:“啊!对了,用C++Builder的同窗请多留一下子,哎~~小白,说你呢,别跑~~”]。spa
若是你们和我同样一直在用C++Builder照上面玩Scintilla的话,必定早就发现了这个Scintilla控件不接受TAB键-_-。咳...若是你坚持看到了这里,恭喜你,你立刻就能够看到解决这个问题的“终级代码”啦:-Porm
VCL组件库的消息循环位于TApplication类里,要让咱们的Scintilla完美地嫁接到VCL里,一个好办法就是把Scintilla也包装成一个VCL组件。htm
VCL组件的继承线路很清晰,要包装Scintilla,只要写一个TWinControl的超类就能够了:继承
- class TScEdit : public TWinControl{
- protected:
- virtual void __fastcall CreateParams(Controls::TCreateParams &Params)
- {
- TWinControl::CreateParams(Params);
- CreateSubClass(Params, "Scintilla");
- }
- virtual void __fastcall WndProc(Messages::TMessage &Message)
- {
- TWinControl::WndProc(Message);
- if(Message.Msg == WM_GETDLGCODE)
- Message.Result = DLGC_WANTALLKEYS|DLGC_WANTARROWS|DLGC_WANTTAB;
- }
- public:
- __fastcall TScEdit(Classes::TComponent* AOwner)
- :TWinControl(AOwner){;}
-
- sptr_t SendEditor(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
- {
- return SendMessage(Handle, iMessage, wParam, lParam);
- }
- };
如今,咱们能够用这个TScEdit代替以前的用CreateWindow创建的Scintilla了:ci
- class TForm1 : public TForm
- {
- ...
- TScEdit *m_se;
- sptr_t SendEditor(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
- {
- return m_se->SendEditor(iMessage, wParam, lParam);
- }
- };
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
-
- HWND hwndEditor = ::CreateWindow(_T("Scintilla"),
- NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,
- 0,0,ClientWidth,ClientHeight,
- Handle,
- (HMENU)SCINT_ID, HInstance, NULL);
- m_fnDirect = (SciFnDirect)SendMessage(hwndEditor,SCI_GETDIRECTFUNCTION,0,0);
- m_ptrDirect = (sptr_t)SendMessage(hwndEditor,SCI_GETDIRECTPOINTER,0,0);
-
- setCppStyle();
- setFold();
- */
-
- m_se = new TScEdit(this);
- m_se->Parent = this;
- m_se->Align = alClient;
- setCppStyle();
- setFold();
- }