如今输入法繁多,用户在使用软件录入单据,每录入一个信息,跳到下一个输入框要不断的切换输入法,很麻烦。
无聊时在软件系统设置加了一个输入法个性化功能,每个用户只要选择了自己常用的输入法后,录入数据时无需一直切换输入法。
方法很简单:
1。读入系统输入法列表,让用户选择输入法,并保存输入法到INI文件
2。在窗体基类里动态修改Component的ImeName属性
部分实现代码:
1 //获取系统输入法列表
2 edtIME.Items.Clear;
3 for i := 0 to Screen.Imes.Count - 1 do
4 edtIME.Items.Add(Screen.Imes.Strings[i]);
5 IniIME := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'sys.ini');
6 edtIME.Text := IniIME.ReadString('IME', 'MYIME', '');
2 edtIME.Items.Clear;
3 for i := 0 to Screen.Imes.Count - 1 do
4 edtIME.Items.Add(Screen.Imes.Strings[i]);
5 IniIME := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'sys.ini');
6 edtIME.Text := IniIME.ReadString('IME', 'MYIME', '');
1 //统一输入法
2 for i := 0 to ComponentCount - 1 do
3 begin
4 if Components[i] is TdxDBEdit then
5 TdxDBEdit(Components[i]).ImeName := SYSIME;
6 if Components[i] is TdxEdit then
7 TdxEdit(Components[i]).ImeName := SYSIME;
8 if Components[i] is TdxDBMemo then
9 TdxDBMemo(Components[i]).ImeName := SYSIME;
10 if Components[i] is TdxMemo then
11 TdxMemo(Components[i]).ImeName := SYSIME;
12 if Components[i] is TdxDBButtonEdit then
13 TdxDBButtonEdit(Components[i]).ImeName := SYSIME;
14 if Components[i] is TdxButtonEdit then
15 TdxButtonEdit(Components[i]).ImeName := SYSIME;
16 if Components[i] is TdxDBPickEdit then
17 TdxDBPickEdit(Components[i]).ImeName := SYSIME;
18 if Components[i] is TdxPickEdit then
19 TdxPickEdit(Components[i]).ImeName := SYSIME;
20 if Components[i] is TdxDBDateEdit then
21 TdxDBDateEdit(Components[i]).ImeName := SYSIME;
22 if Components[i] is TdxDateEdit then
23 TdxDateEdit(Components[i]).ImeName := SYSIME;
24 end;
2 for i := 0 to ComponentCount - 1 do
3 begin
4 if Components[i] is TdxDBEdit then
5 TdxDBEdit(Components[i]).ImeName := SYSIME;
6 if Components[i] is TdxEdit then
7 TdxEdit(Components[i]).ImeName := SYSIME;
8 if Components[i] is TdxDBMemo then
9 TdxDBMemo(Components[i]).ImeName := SYSIME;
10 if Components[i] is TdxMemo then
11 TdxMemo(Components[i]).ImeName := SYSIME;
12 if Components[i] is TdxDBButtonEdit then
13 TdxDBButtonEdit(Components[i]).ImeName := SYSIME;
14 if Components[i] is TdxButtonEdit then
15 TdxButtonEdit(Components[i]).ImeName := SYSIME;
16 if Components[i] is TdxDBPickEdit then
17 TdxDBPickEdit(Components[i]).ImeName := SYSIME;
18 if Components[i] is TdxPickEdit then
19 TdxPickEdit(Components[i]).ImeName := SYSIME;
20 if Components[i] is TdxDBDateEdit then
21 TdxDBDateEdit(Components[i]).ImeName := SYSIME;
22 if Components[i] is TdxDateEdit then
23 TdxDateEdit(Components[i]).ImeName := SYSIME;
24 end;
经lotsbug指点,重新写了代码
1 //统一输入法
2 if SYSIME <> '' then
3 for i := 0 to ComponentCount - 1 do
4 begin
5 if Components[i] is TWinControl then
6 if IsPublishedProp(Components[i], 'ImeName') then
7 if GetPropValue(Components[i], 'ImeMode', True) = 'ImChinese' then
8 SetPropValue(Components[i], 'ImeName', SYSIME);
9 end;
2 if SYSIME <> '' then
3 for i := 0 to ComponentCount - 1 do
4 begin
5 if Components[i] is TWinControl then
6 if IsPublishedProp(Components[i], 'ImeName') then
7 if GetPropValue(Components[i], 'ImeMode', True) = 'ImChinese' then
8 SetPropValue(Components[i], 'ImeName', SYSIME);
9 end;