深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1038|回复: 2
打印 上一主题 下一主题

delphi 输入法设置(ImeMode与ImeName)

[复制链接]

800

主题

1379

帖子

7704

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7704
跳转到指定楼层
楼主
发表于 2021-5-3 10:46:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Delphi中录入框与输入法有关的是两个属性:
输入法模式ImeMode,默认为ImDontCare 表示若输入法处于关闭状态则打开最近一次使用过的输入法;
输入法名称ImeName,指定输入法名称.

具体机制:
ImeMode=ImDontCare,
如果输入框指定了ImeName时,   如果该输入法在电脑中存在,则打开该输入法;
                                                   如果该输入法在电脑中不存在,则关闭输入法,进入英文输入状态;
如果输入框的ImeName为空时,跟上一个输入框有关。
                                                   如果上一个输入框ImeName为空,则与上一个输入框保持一致。
                                                   如果上一个输入框ImeName指定了输入法,不管该输入法是否存在,都关闭输入法,进入英文输入状态.
由于各用户的中文输入法很难一致,导致用户输入法不停变换。
因此,请大家将这两个属性设为:
ImeMode=ImDontCare
ImeName置空
这样用户可以一直使用当前选定的(中文)输入法,直到需要变换时才手工进行变换
附:
Imemode属性,表示输入框的输入法不同状态:

imClose 关闭状态;

ImOpen 打开状态;

ImChinese 中文输入法状态;

ImDontCare 表示若输入法处于关闭状态则打开最近一次使用过的输入法;这个说法不准,见上文

ImSAlpha 半角状态;

ImAlpha 全角状态。



如果不需要输入法切换功能,由用户自己控制的话,直接设置全局变量SysLocale.FarEast := False;

也就是设为非远东国家模式,Delphi不管输入法的事了。
回复

使用道具 举报

800

主题

1379

帖子

7704

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7704
沙发
 楼主| 发表于 2021-5-3 10:47:07 | 只看该作者

我用的是搜狗输入法,一般客户机上都是紫光的,你这个问题我也碰到过.

       uses TypInfo;

       for i := 0 to ComponentCount-1 do
       if Assigned(GetPropInfo(Components[i],'ImeName')) then
       SetPropValue(Components[i], 'ImeName', '');

然后在所有窗口create都调用这个过程吧


这个方法不错,但还有个问题是,碰到表格控件(TDBGrid),就得另外再单独对这个个控件进行处理了。
  for j := 0 to DBGridEh1.FieldCount - 1 do
    SetPropValue(DBGridEh1.Columns[j], 'ImeName', '');
回复 支持 反对

使用道具 举报

800

主题

1379

帖子

7704

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7704
板凳
 楼主| 发表于 2021-5-3 10:50:49 | 只看该作者
在操作系统控制面板的 地区与语言选项->语言->details->设置->default input languages设置为英文为默认语言。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 04:53 , Processed in 0.025310 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表