最近偶然发现一个dbgrid中的问题,直接在dbgrid界面录入的时候,选定了一种汉语输入法,但是当切换到别的窗口的时候,输入法又换了回去,成了默认的英语。
我试验了各个属性,可惜找不到解决的办法,有兴趣的朋友请帮忙解决一下,感激不尽^-^

解决方案 »

  1.   

    自己将她切换掉前的输入法机录下来,然后再放回去uses imm.代码自己写。类似于这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
      myhkl:hkl;
    begin
      myhkl:=GetKeyBoardLayOut(0);
      if ImmIsIME(myhkl) then
    //判断是否在中文状态,若是则关闭它
        immsimulateHotkey(handle,
      IME_CHOTKEY_IME_NONIME_TOGGLE);
    end;
      

  2.   

    這好像不是dbgrid才有呀,好象edit,memo等都是這樣的,它有一個地方設置輸入法的,你把它去掉。
      

  3.   

    错了,是DELPHI有个BUG吧(也不知道是不是DELPHI的BUG),
    在DBGrids.pas内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.   

    有可能你要重新编译此PAS,生成新的DCU文件
      

  5.   

    这样不行吗?
    在指定的位置,也就是要输入中文的地方可以接其他的控件,如dbedit,edit等来实现所说的
    在celldraw事件中