支持中文

支持中文

来自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. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,Geopandas是一个开源的Python库,用于处理地理数据和地理信息系统(GIS)。它提供了一个非常强大和灵活的工具集,可用于读取、处理、分析和可视化地理数据。Geopandas支持多种地理数据格式,包括Shapefile、GeoJSON、PostGIS等。 使用Geopandas可以轻松地对地理数据进行空间操作,例如缓冲区分析、叠加分析、空间查询等。此外,Geopandas还可以与其他Python库(如Matplotlib和Seaborn)结合使用,方便用户创建可视化地图。 Geopandas对于处理中文地理数据同样支持良好。用户可以通过设置合适的编码方式,确保中文地理数据正确加载和处理。无论是读取中文地理数据文件还是进行地理操作,Geopandas都能够顺利处理中文字符,并不会出现乱码或其他问题。 而且,Geopandas还提供了许多功能强大的方法来处理中文地理数据。用户可以通过选择、筛选、转换等操作,对中文地理数据进行灵活的处理。同时,Geopandas还支持丰富的空间运算和分析功能,可以方便地获取中文地理数据的统计信息、空间关系等。 总之,Geopandas是一个强大而易用的地理数据处理工具,可以完美支持中文地理数据处理和分析。无论是在科学研究、商业分析还是其他领域,Geopandas都是一个非常值得推荐的选择。 ### 回答2: geopandas是一个开源的Python库,用于处理地理空间数据。它是pandas和shapely库的扩展,可以方便地处理地理形状和属性数据。 geopandas库支持中文,可以在处理地理空间数据时使用中文。例如,可以使用中文名称作为地理数据的属性值,或者使用中文注释来解释地理数据的含义。 使用geopandas进行地理数据操作时,所有的操作都可以使用中文进行,比如创建地理对象、进行地理空间分析、绘制地图等等。 geopandas库还提供了中文文档和示例,可以帮助中文用户更好地理解和使用该库。 总之,geopandas库完全支持中文,可以方便地处理和分析中文地理空间数据。使用geopandas,我们可以更加灵活和方便地进行地理数据的处理和分析。 ### 回答3: 是的,Geopandas是一个能够处理地理空间数据的Python库,它完全支持中文。它基于Pandas库的数据结构,通过添加地理空间数据类型来处理地理信息数据。Geopandas能够读取和处理包含中文字符的矢量数据,如矢量点、线和面等。同时,Geopandas也支持中文属性进行筛选、查询和统计等操作。 Geopandas的中文支持不仅体现在矢量数据的读取和处理上,也包括输出和可视化。在绘制地图时,可以使用中文标签和注释,以及在图例、标题和轴标签等元素上显示中文字符。这使得Geopandas在处理中文地理数据和展示中文地图时非常方便。 Geopandas还支持中文字符的空间操作和分析。通过Geopandas,可以进行点、线和面的缓冲区分析、几何形状的叠加和裁剪等操作。可以基于中文属性进行空间查询和空间统计,例如根据中文区域名称进行空间标识和统计。 总而言之,Geopandas是一个强大的库,能够轻松处理中文地理数据,并提供对中文地理信息的分析和可视化功能。无论是地理空间数据的处理还是可视化展示,Geopandas都能够完美支持中文字符的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值