if (length(RichEdit2.Text)>=Length(RIchEdit1.Text))and(RichEdit1.Text<>'') then
     begin
       RichEdit4.Enabled:=true;
       RichEdit4.SetFocus;
       RichEdit4.ImeName:=RichEdit2.ImeName;
       //showmessage(Richedit4.ImeName);//问题就在这里,加上这一句,RichEdit4的输入法就和RichEdit2一样,不加上就得不到RichEdit2的输入法,郁闷啊。,对了,RichEdit2的输入法是从另一个窗体获得的RichEdit2.ImeName:=Form2.Combobox1.Text;//combobox1.Text列出了系统的中文输入法       RichEdit2.Enabled:=false;
       start:=0;
       if RichEdit3.Text='' then
        begin
          Form3:=TForm3.create(Application);
            try
             Form3.ShowModal;
            Finally
             Form3.Free;
            end;        end;
     end;

解决方案 »

  1.   

    ImeName应该用一个公共变量来保存。在各个组件的OnEnter和OnExit中编写代码,分别设置当前组件所使用的IME,或者保存当前控件之前所使用的IME。这样就可以实现按用户所选用的输入法,当各个组件获得输入焦点时,自动切换到相应的输入法。
      

  2.   

    同意楼上的,单独保存很乱,只能通过切换IME产生的消息来记录判断,麻烦而且没效率
      

  3.   

          RichEdit4.ImeName:=RichEdit2.ImeName;
          RichEdit4.SetFocus;    // 调下来
      

  4.   

    为什么得不到上一个Edit的输入法。!!
    -----------------------------------------------------------------------------------
    原因应该是在设计的时候,输入法就没有设定和上一个Edit一致,所以切换到下一个Edit时输入法就变了;
    有2种方法可以实现你的功能:1、重新打开设计界面,在设计界面上设定你需要的输入法;
    2、就是统一管理,如果要求每个Edit的输入法是一致的,则设定一个全局变量就可以了,然后使用代码在
       窗口创建或者显示的时候动态设置一下每个Edit的输入法。或者高级一点你可以搞个配置文件,给不同的
       控件配置不同的输入法,每个窗口在创建的时候读取这个配置文件,动态设定输入;总之,肯定有办法解决这个问题的;如果想深入讨论可以加入QQ高级群:9642802,找管理员大海讨论。
      

  5.   

    ImeName应该用一个类变量、单元变量或者全局变量来保存。