修正开源控件kcontrols不能在linux使用中文输入法的bug

news/2025/11/27 13:31:34/文章来源:https://www.cnblogs.com/qiufeng2014/p/19277152
kcontrols这个控件TKMemo可以使用rich功能,但有个致命问题是在linux不能使用中文输入法。
今天尝试修复这个Bug。
打开kcontrols\source\kmemo.pas
添加红色代码:
{ @abstract(This file is part of the KControls component suite for Delphi and Lazarus.)@author(Tomas Krysl)Copyright (c) 2020 Tomas Krysl<BR><BR><B>License:</B><BR>This code is licensed under BSD 3-Clause Clear License, see file License.txt or https://spdx.org/licenses/BSD-3-Clause-Clear.html.
}{$ifdef linux}
{$define WITH_GTK2_IM}
{$endif}

unit kmemo; // lowercase name because of Lazarus/Linux{$include kcontrols.inc}
{$WEAKPACKAGEUNIT ON}interface

在1817行添加红色代码行:
TKCustomMemo增加输入法消息处理:

procedure WMImeComposition (var Message: TLMessage); message LM_IM_COMPOSITION;

 

    procedure WMCut(var Msg: TLMessage); message LM_CUT;{$IFNDEF FPC}// no way to get filenames in Lazarus inside control (why??)procedure WMDropFiles(var Msg: TLMessage); message LM_DROPFILES;{$ENDIF}procedure WMEraseBkgnd(var Msg: TLMessage); message LM_ERASEBKGND;procedure WMGetDlgCode(var Msg: TLMNoParams); message LM_GETDLGCODE;procedure WMHScroll(var Msg: TLMHScroll); message LM_HSCROLL;procedure WMKillFocus(var Msg: TLMKillFocus); message LM_KILLFOCUS;procedure WMPaste(var Msg: TLMessage); message LM_PASTE;procedure WMSetFocus(var Msg: TLMSetFocus); message LM_SETFOCUS;procedure WMVScroll(var Msg: TLMVScroll); message LM_VSCROLL;{$ifdef linux}procedure WMImeComposition (var Message: TLMessage); message LM_IM_COMPOSITION;{$endif}
  protectedFCaretRect: TRect;FDragCurPos: TPoint;FDragMode: TKSizingGripPosition;FDragOrigRect: TRect;

在7121行添加红色代码:

procedure TKCustomMemo.WMVScroll(var Msg: TLMVScroll);
beginSafeSetFocus;Scroll(cScrollNoAction, Msg.ScrollCode, 0, Msg.Pos, eoScrollWindow in FOptions);
end;{$ifdef linux}
procedure TKCustomMemo.WMImeComposition (var Message: TLMessage);
var IMStr,s1,s2:string;i:integer;pos:TPoint;
beginif Message.WParam=GTK_IM_FLAG_COMMIT thenbeginIMStr:=UTF8Decode(pchar(Message.LParam)); //输入的字符if IMStr<>'' thenbeginKeyPress(IMStr[1]);InsertString(SelEnd, IMStr);pos.X:=GetSelStart+GetSelLength+utf8length(imstr);//计算添加字符串后的光标位置pos.Y:=0;//s1:=utf8copy(Edittext,1,GetSelStart);//s2:=utf8copy(editText,GetSelStart+GetSelLength+1,length(edittext));//EditText:= s1+IMStr+s2;//SetCaretPos(pos);//设置光标位置end;end;//im_context_use:=false;inherited;
end;{$endif}

{ TKMemoBlock }constructor TKMemoBlock.Create;
begininherited;FOffset := CreateEmptyPoint;FDoubleClickState := mdblNone;

修改后重新编译就可以在linux使用中文输入(fcitx)。

QQ_1764220945528

 

QQ_1764221067481

 

c2770cc8fc29aeff6d82412445534388

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/978382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8种定位元素方法

ID定位 定义:通过元素的id属性来定位 示例: 往注册账号A填写admin,鼠标定位到输入框,发现有id属性。定位代码如下: driver.find_element(By.ID,"userA").send_keys("admin")name 定义:通过元…

2025年铰链品牌全国门店售后保障哪家好?炬森五金成行业标杆

家居装修中,铰链虽小,却直接影响柜体使用寿命和日常体验。当铰链出现故障,售后保障成为消费者最关心的问题。今天,我们为您揭晓"铰链品牌全国门店售后保障哪家好"的真相,揭秘炬森五金为何能成为全国门店…

【转载】Qt 路径中常用字符“./”、“../”、“/”、“*”的含义

在Qt中进行编程时,当我们需要调用某些路径时候,特别是调用QDir类进行访问时,会定义一系列的字符串,并将这些字符串赋值给路径,这时候就出现了一个问题,这些字符串所代表的的含义是什么呢,现在就来解释一下这些字…

完整教程:掌握3D手部关键点检测:PyTorch深度学习实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年中国AI智能办公鼠标十大品牌推荐:鸿容AI智能办公

本榜单聚焦AI智能办公硬件赛道,结合技术创新力、用户口碑、场景适配性三大核心维度,筛选出十家标杆品牌,为企业与个人选型提供客观参考,助力精准匹配高效生产力工具。 TOP1 推荐:深圳市南方网通网络技术开发有限公…

Git 安装流程

参考博客:Git 详细安装教程 Git 版本: 2.52.0接受条款选择安装地址 C盘不便于重装系统,以及容量控制,我一般直接将C改D选择组件 我觉得GUI不太好用,可以取消勾选,建议勾选添加 Git Bash 到终端开始菜单中程序的文…

2025安全环保充电器外壳厂家TOP5权威推荐:环保认证US

电源行业作为电子终端的核心配套领域,绿色环保与安全合规已成为产业升级的核心命题。2024年行业数据显示,充电器外壳市场规模突破300亿元,年增速达28%,但32%的投诉集中在材质环保不达标、阻燃性能不足、定制适配性…

【转载】Qt 断言Q_ASSERT的使用

在使用Qt开发大型软件时,需要对程序进行调试,以确保程序内的运算结果符合我们的预期。在不符合预期结果时,就直接将程序断下,以便修改。 assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式…

2025年修补防水涂料推荐厂家及其市场分析

在当今市场中,选择合适的修补防水涂料厂家显得尤为重要。随着建筑行业的快速发展,各类修补防水涂料的制造厂家不断增多,产品也日益丰富。在这篇文章中,我们将对不同厂家进行细致分析,涵盖其产品种类、质量及市场评…

连续状态方程Tustin离散化处理 - 实践

连续状态方程Tustin离散化处理 - 实践2025-11-27 13:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

2025年北京、上海、深圳协议离婚律师推荐排行榜:哪个好?哪个靠谱?选哪个?

离婚对很多人来说是艰难的抉择。如果夫妻双方能就财产分割、子女抚养等达成一致,选择协议离婚往往更快捷省心。可是在北上广深等一线城市,婚姻家事律师团队繁多,面对“北京协议离婚律师”“上海协议离婚律师”“深圳…

Shell脚本实战:15个提高工作效率的自动化脚本

1. 服务器资源监控脚本 这个脚本能实时监控CPU、内存、磁盘使用情况,当资源使用率超过阈值时自动发送告警。 # resource_monitor.sh - 服务器资源监控脚本# 设置阈值 CPU_THRESHOLD=80 MEM_THRESHOLD=85 DISK_THRESHO…

【转载】Qt 多次connect的坑

1、坑的现象 有时项目中一个信号发出,对应连接的槽函数会执行多次,普通刷新界面都不会有问题,但是特别频繁的就会影响性能,如果是改变数据的,更有甚者会异常崩溃 2、遇坑的原因 qt中同一实例的同一信号和槽,conn…

2025年检查井定制厂家十大推荐,雨水检查井与预制装配式检查

在市政工程、房地产开发与污水处理等领域,检查井作为地下管网的枢纽节点,直接影响工程质量与长期运维成本。面对市场上参差不齐的供应商,如何选择能解决适配难、施工慢、维护贵等痛点的检查井定制厂家?以下依据产品…

2025年襄阳地区十大包装盒定制企业推荐:知名的包装盒机构有

本榜单依托鄂西北包装市场调研与真实客户口碑,深度筛选出十家标杆企业,为襄阳、十堰、随州、荆门、谷城等地的企业选型提供客观依据,助力精准匹配适配的包装盒定制服务伙伴。 TOP1 推荐:襄阳怡林彩色印务有限公司 …

2025年深圳东莞惠州塑胶外壳定制公司推荐:安全环保的塑胶外

本榜单基于珠三角塑胶模具行业调研、企业真实口碑与技术实力评估,筛选出5家安全环保塑胶外壳定制标杆企业,为电子、家电类企业提供选型参考,助力匹配高性价比服务伙伴。 TOP1 推荐:深圳市金鸿兴塑胶模具有限公司 推…

2025年修补料砂浆源头厂家对比榜

在2025年修补料砂浆行业中,从源头厂家选取合适的供应商至关重要。那些工厂不仅具备可靠的生产能力,还能提供丰富的技术支持,确保您的施工顺利进行。选择时,可以关注每个厂家的产品特性、市场反馈和专业服务。了解修…

2025年十大靠谱塑胶外壳厂家推荐,口碑靠谱的塑胶外壳供应商

在消费电子、智能家居等行业快速发展的背景下,塑胶外壳作为产品的颜值担当与防护屏障,其品质直接影响产品竞争力。面对市场上良莠不齐的供应商,如何找到[靠谱的塑胶外壳]?以下依据不同类型,为你推荐2025年十大口碑…

大模型高效微调(Finetune)实战教程

Unsloth是一个开源工具,专门用来加速大语言模型(LLMs)的微调过程。它的主要功能和优势包括:🔭 高效微调:Unsloth 的微调速度比传统方法快 2-5 倍,内存占用减少 50%-80%。这意味着你可以用更少的资源完成微调任…

【转载】Qt QCustomPlot 使用整理

QCustomPlot 是一个比较小的 QT 图表插件。使用时,我们在程序中写完相关调用的代码后,只需将 QCunstomPlot.cpp 和 QCustomPlot.h 两个文件加入工程,正常编译即可。看起来使用挺方便。对于简单的,效率不高的数据可…