我只想在一个窗体中的任何一个可以编辑的控件间或者不同窗体间切换时能够保证当前输入法不变,否则在编辑时经常要重新打开中文输入法,非常不方便,但试了好多次,都出现DBGRID失去焦点时,输入法变成系统默认,不同窗体间切换也是这种情况,请问如果不采用穷举每个控件设置IME的话有没有更好的解决方法

解决方案 »

  1.   

    你试试这种,
    在 属性设置中,不 是可以 设置 输入框的 输入法吗 ?
    是 imename 属性,你 设置为你想要的 看看 是否符合你的意思
      

  2.   

    to swyer(木鱼):
      如何取得用户最常用的输入法?
      

  3.   

    DBGRID有BUG,重载以下
    procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
    begin
      if SysLocale.FarEast then inherited
      else
      begin
        ImeName := Screen.DefaultIme;
        ImeMode := imDontCare;
        inherited;
        if not ((InplaceEditor <> nil) and
          (HWND(Message.WParam) = InplaceEditor.Handle)) then
          ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
      end;
    end;
      

  4.   

    这个问题提得好,我也被此困扰。
    to jinjintalk(文文): 该如何重载呢?
      

  5.   

    Delphi中不光是DBGrid是这样,Edit也是这样,离开Edit后,到另一个Edit输入法就要改变,这对使用中文的朋友是非常不便的。
      

  6.   

    用ImeName全部设成空,ImeMode为那个DontCare.最好用cnPack专家统一修改.
      

  7.   

    我在DBGrid的OnEnter事件中保存了Screen.Imes中输入法的名称。在DBGrid的Exit事件中如何恢复回去呢?