我做了一个程序,
其中有一FORM中有一输入中文的EDIT,在刚刚进入程序这个FORM时,可以输入中文,但不知道在做过什么操作后(或者使用了其他对IMEMODE有设置的控件后),在程序中的所有控件就会失去切换输入法的功能。只好退出程序后,重新打开程序,才能使用输入法,
用户使用极不方便,
程序中没有对IME作过相关的编程处理,但有控件对IME等相关属性作过设置
这些对输入法有影响吗?
总不至于在点托盘的输入法图标,来作中英文切换都不行吧?
我都急疯了,白思不得其解,
可能你遇过类似问题,
请不吝指教
多谢!
其中有一FORM中有一输入中文的EDIT,在刚刚进入程序这个FORM时,可以输入中文,但不知道在做过什么操作后(或者使用了其他对IMEMODE有设置的控件后),在程序中的所有控件就会失去切换输入法的功能。只好退出程序后,重新打开程序,才能使用输入法,
用户使用极不方便,
程序中没有对IME作过相关的编程处理,但有控件对IME等相关属性作过设置
这些对输入法有影响吗?
总不至于在点托盘的输入法图标,来作中英文切换都不行吧?
我都急疯了,白思不得其解,
可能你遇过类似问题,
请不吝指教
多谢!
不会是OS的bug?
Font.Charset:=GB2312_CHARSET;
Font.Name:='宋体';有的字体或类型不支持中文输入,所以,只要一激活它们,就会自动取消中文输入,本人也遇到过。希望能帮你解决!!
你再改一下form的font试试
我直接改*。DFM文件,查找并设置了所有的FONT,
还是不行
怎么办??????
请帮忙UP,也会有分啊
我在两个不同地方的客户都有此现象WIN98
55~~~~~~~~~~~~
还没有人知道吗?
不改ime不就行了,如在录入界面只让用户有英文输入法和一种汉字输入法
这样做好象比较好!
"HKEY_CURRENT_USER\keyboard layout\preload"
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts\"
参考一下
可是现在问题绝对不是改IME引起的,
我没有动任何一个控件的IME,还是不行
在目前程序中加一按钮
如:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.Font.Name);
end;
以便侦测字体是否发生改变~~
如果用户的机子上没有安装一些字体,系统会不让激活中文输入~~Step.2 排除IME从新设置
在目前程序中加一按钮
如:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Format('%s,%d', [Edit1.ImeName, Ord(Edit1.ImeMode)]));
end;
以便侦测IME模式是否发生改变~~Step.3 排除窗体逻辑错误
编一简单应用程序~~
就只有输入筐~~
字体都为默认~~Step.4 排除操作系统问题
使用其他程序测试看看<后选方案>
硬性设置输入法
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.ImeName := Screen.Imes[1];
end;嘻嘻嘻 可怜不能亲手帮蚊蚊 嘻嘻嘻嘻
“看这个问题都快一个月了”
莫非你是打扫论坛卫生的时候发现的?
多谢板主高抬贵手 :)这个问题害得我头痛很久,
用你的方法试试看现在有点怀疑是OS的问题,因为我一直在NT中调程序,从没有出现过这个问题
我没有遇到这个问题,的确很奇怪! 我的建议:
1、窗体上就放个Edit运行看看。如果问题消失了,那么说明是你代码有问题
或者其他第三方控件有BUG!
如果还是存在这个问题,我想应该是输入法或者Delphi本身、Windows的问题
重装Windows、Delphi、输入法!!!!!
var
I: Integer;
HandleToSet: HKL;
begin
if not SysLocale.FarEast then Exit;
if ImeName <> '' then
begin
if (AnsiCompareText(ImeName, Screen.DefaultIme) <> 0)
and (Screen.Imes.Count <> 0) then
begin
HandleToSet := Screen.DefaultKbLayout;
I := Screen.Imes.IndexOf(ImeName);
if I >= 0 then
HandleToSet := HKL(Screen.Imes.Objects[I]);
ActivateKeyboardLayout(HandleToSet, KLF_ACTIVATE);
end;
end;
end;在formshow中执行该过程,在需要输入法的控件imeMode设为open方式,不需要输入汉字的设置为close方式;则光标到相应控件后,自动出现输入法