我们开发的系统中,不同的用户使用不同的输入法,因此不能在输入控件的IME属性中设定默认输入法。
    我想提供一个模块让用户设定自己的默认输入法,系统把该输入法记录下来(记在哪里也请高手指教),在用户每次启动系统时系统自动设定windows的默认输入法为该输入法(怎么设?)。这样用户在输入数据时,系统就自动采用默认输入法了。不知上述方案是否可行,有没有其他更好的方案呢?请大家指教

解决方案 »

  1.   

    每个编辑控件都有属性imename,创建时给其赋值就可!
      

  2.   

    设置个控件的属性:imemode/imename,把这些东西和用户保存到ini文件,可以吗?
      

  3.   

    procedure SetMyIme(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;
    procedure ResetMyIme(ImeName:string);
    begin
      if not SysLocale.FarEast then Exit;
      if ImeName<>' ' then
      begin
        if (AnsiCompareText(ImeName,Screen.DefaultIme)<>0) then
        ActivateKeyboardLayout(Screen.DefaultKbLayout,KLF_ACTIVATE);
      end;
    end;
    procedure TForm1.Memo1Click(Sender: TObject);
    begin
    SetMyIme('微软拼音输入法');
    end;在use下面手工添加:IMM
    ActivateKeyboardLayout的帮助文件在Windows SDK里面,
      

  4.   

    两处 ImeName&lt;&gt  改为 ImeName<>
      

  5.   

    用INI文件实现修改程序的输入法
    procedure TfrmIMENAME.FormCreate(Sender: TObject);
     var
        j:integer;
        path:string;
        shurufa:string;
        a:integer;
    begin
      for j:=0 to screen.imes.count-1 do
        begin
           suibutton1.Enabled:=false;
           ComBoBox1.Items.Add(screen.Imes.strings[j]);
    //获取系统中已安装的中文输入法
         end;       Path := ExtractFilePath(Application.Exename);
           system_inifile:=Tinifile.Create(path+'tailong.ini');
           shurufa:=system_inifile.ReadString('shuru','1','');
           DM.imeshurufa:=system_inifile.ReadString('shuru','1','');        for a:=0 to combobox1.Items.Count-1 do
                begin
                     if combobox1.Items.Strings[a]=shurufa then
                         begin
                            combobox1.ItemIndex:=a;
                            exit;
                          end;
                end;
    end;procedure TfrmIMENAME.ComboBox1Change(Sender: TObject);
    begin
    suibutton1.Enabled:=true;
    end;procedure TfrmIMENAME.suiButton1Click(Sender: TObject);
    begin
    system_inifile.WriteString('shuru','1',combobox1.Text);
    DM.imeshurufa:=combobox1.Text;
    close;
    end;