我做了一个程序,
其中有一FORM中有一输入中文的EDIT,在刚刚进入程序这个FORM时,可以输入中文,但不知道在做过什么操作后(或者使用了其他对IMEMODE有设置的控件后),在程序中的所有控件就会失去切换输入法的功能。只好退出程序后,重新打开程序,才能使用输入法,
用户使用极不方便,
程序中没有对IME作过相关的编程处理,但有控件对IME等相关属性作过设置
这些对输入法有影响吗?
总不至于在点托盘的输入法图标,来作中英文切换都不行吧?
我都急疯了,白思不得其解,
可能你遇过类似问题, 
请不吝指教
多谢!

解决方案 »

  1.   

    有这样的事吗?
    不会是OS的bug?
      

  2.   

    你将所有控件设置为:
    Font.Charset:=GB2312_CHARSET;
    Font.Name:='宋体';有的字体或类型不支持中文输入,所以,只要一激活它们,就会自动取消中文输入,本人也遇到过。希望能帮你解决!!
      

  3.   

    你记下什么操作后输入不了中文,然后在那操作后改一改imeMode试试(FORM)
      

  4.   

    哦,根据 xzhifei(飞)所说
    你再改一下form的font试试
      

  5.   

    还是不行啊,
    我直接改*。DFM文件,查找并设置了所有的FONT,
    还是不行
    怎么办??????
    请帮忙UP,也会有分啊
      

  6.   

    应该不是操作系统的问题
    我在两个不同地方的客户都有此现象WIN98
    55~~~~~~~~~~~~
    还没有人知道吗?
      

  7.   

    你可从注册表中取当前输入法,也可让用户自定义使用哪种输入法。
    不改ime不就行了,如在录入界面只让用户有英文输入法和一种汉字输入法
    这样做好象比较好!
    "HKEY_CURRENT_USER\keyboard layout\preload"
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts\"
    参考一下
      

  8.   

    多谢楼上大侠关注
    可是现在问题绝对不是改IME引起的,
    我没有动任何一个控件的IME,还是不行
      

  9.   

    蚊蚊 :) 好久不见,工作还顺利吧~~看这个问题都快一个月~~所以来关注一下~~希望多一点思路能帮助解决问题~~最关键的是要找到问题的所在~~伴水的分析实施步骤如下:~~Step.1 排除字体从新设置
    在目前程序中加一按钮
    如:
    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;嘻嘻嘻 可怜不能亲手帮蚊蚊 嘻嘻嘻嘻
      

  10.   

    呵呵
    “看这个问题都快一个月了”
    莫非你是打扫论坛卫生的时候发现的?
    多谢板主高抬贵手 :)这个问题害得我头痛很久,
    用你的方法试试看现在有点怀疑是OS的问题,因为我一直在NT中调程序,从没有出现过这个问题
      

  11.   

    半水是女生吧?呵呵
      我没有遇到这个问题,的确很奇怪!  我的建议:
      1、窗体上就放个Edit运行看看。如果问题消失了,那么说明是你代码有问题
    或者其他第三方控件有BUG!
      如果还是存在这个问题,我想应该是输入法或者Delphi本身、Windows的问题
      重装Windows、Delphi、输入法!!!!!
      
      

  12.   

    procedure SetIme(ImeName:string);
    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方式;则光标到相应控件后,自动出现输入法
      

  13.   

    参数为输入法名称,可以从screen.imes里去,别忘了uses ime**