用户在录入数据的时候,切换了输入法,比如切换成某种中文输入法,在当前的界面中输入的时候没有问题,但如果在当前的界面中点了一个按钮弹出一个界面选择数据后,输入法就变成英文了。程序里面没有控制输入法的,怎样做才能让输入法恢复到点按钮之前的那个输入法呢?

解决方案 »

  1.   

    不明白楼主的意思,
    说得明白一下,在TControl类中有两个Protected的属性,
    ImeName,
    ImeMode,
    你看看是不是能用这个来实现。
      

  2.   

    转贴,没找到原文出处---- 常 用 函 数 有: 
    API函数:BOOL ImmSimulateHotKey(HWND hWnd,DWORD dwHotKeyID);//模拟热键其中Hwnd为程序窗口的句柄,dwHotHKeyID为模拟的热键,若成功则返回True
    HKL GetKeyboardLayout(DWORD dwLayout);//获得当前键盘状态
    BOOL ImmIsIME(HKL hKL);//判断当前是否处于中文输入状态,若是则返回True自定义函数:打开相应输入法:OpenIme(imename:string),例OpenIme('全拼输入法');关闭中文输入法:CloseIme;
    以下是一个简单的例子,仅起参考作用。
    使用时uses中加上imm 
    具体的实现方法及源代码如下: unit Unit1;
    interface
    usesWindows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs,StdCtrls, Buttons,imm;
    typeTForm1 = class(TForm)ComboBox1: TComboBox;BitBtn1: TBitBtn;BitBtn2: TBitBtn;BitBtn3: TBitBtn;procedure FormShow(Sender: TObject);procedure OpenIme(imename:string);procedure closeIme;procedure ComboBox1Change(Sender: TObject);procedure BitBtn1Click(Sender: TObject);procedure BitBtn2Click(Sender: TObject);procedure BitBtn3Click(Sender: TObject);
    private{ Private declarations }public{ Public declarations }end;
    varForm1: TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.FormShow(Sender: TObject);varj:integer;beginfor j:=0 to screen.imes.count-1 dobeginComBoBox1.Items.Add(screen.Imes.strings[j]);//获取系统中已安装的中文输入法end;end;
    procedure Tform1.OpenIme(imename:string);var
    I:integer;
    myhkl:hkl;
    begin
    if ImeName<>'' then
    begin
    if Screen.Imes.Count<>0 then
    begin
    I:=screen.Imes.indexof(imename);
    if I>=0 then
      myhkl:=hkl(screen.Imes.objects[i]);
      activatekeyboardlayout(myhkl,
      KLF_ACTIVATE);//设置相应的输入法
    end;
    end; 
    end;
    procedure TForm1.closeime;varmyhkl:hkl;begin
      myhkl:=GetKeyBoardLayOut(0);
      if ImmIsIME(myhkl) then 
      //判断是否在中文状态,若是则关闭它
      immsimulateHotkey(handle,
      IME_CHotKey_IME_NonIME_Toggle);
    end;procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      OpenIme(ComboBox1.Text);
    end;
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      immsimulateHotkey(handle,
      IME_CHotKey_shape_Toggle);//切换半角和全角模式
    end;
    procedure TForm1.BitBtn2Click(Sender: TObject);begin
      immsimulateHotkey(handle,
      IME_CHotKey_symbol_Toggle);  //切换中文标点模式和英文标点模式
    end;  procedure TForm1.BitBtn3Click(Sender: TObject);
    begin
      closeime;
    end;
    end.
      

  3.   

    控件的ImeMode设为imChinese;
    再把ImeName设为"五笔输入法";
      

  4.   

    原因是因为两个窗体上控件的ImeMode或者ImeName不一样
    把控件的ImeMode都设成imDontCare,再把ImeName设为空
    这样切换控件或窗体的时候,就不会换输入法了如果没有程序的源代码,就只好用上面的办法自己设置
      

  5.   

    cncharles(旺仔)的 
    up