procedure WMImeComposition (var Message: TMessage); message LM_IM_COMPOSITION
)就可以解决中文输入问题。TInplaceEditCoreControl = class(TCustomMaskEdit) private FParentEdit: TInplaceEdit; function GetGrid: TCustomGridEh; procedure WMGetDlgCode(var Message: TWMNoParams); message WM_GETDLGCODE; procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS; procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS; procedure WMPaste(var Message: TMessage); message WM_PASTE; procedure WMCut(var Message: TMessage); message WM_CUT; procedure WMClear(var Message: TMessage); message WM_CLEAR; procedure WMImeComposition (var Message: TMessage); message LM_IM_COMPOSITION; protected function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; function EditCanModify: Boolean; override;
procedure TInplaceEditCoreControl.WMImeComposition (var Message: TMessage);//输入法消息 var IMStr,s1,s2:string; i:integer; pos:TPoint; begin IMStr:=UTF8Decode(pchar(Message.LParam)); //输入的字符 if IMStr<>'' then begin for i:=1 to Length(IMStr) do begin KeyPress(IMStr[i]); end; pos.X:=GetSelStart+GetSelLength+utf8length(imstr);//计算添加字符串后的光标位置 pos.Y:=0; s1:=utf8copy(Edittext,1,GetSelStart); //GetSelStart--当前光标位置, GetSelLength--选择字符的长度 s2:=utf8copy(editText,GetSelStart+GetSelLength+1,length(edittext)); EditText:= s1+IMStr+s2; SetCaretPos(pos);//设置光标位置 end; inherited; end;
按上面的方法修改后,重新安装ehlib就可以在linux输入中文。
开发工具:lazarus 3.3.0 FPC 3.3.1
操作系统:linux
存在问题:
可能第一次不能输入中文,再次输入就可以,如果那位有更好的方法请与我分享,谢谢!