Delphi輸入法切換

Delphi-IME
由於微軟內附的螢幕小鍵盤還真的有點小,加上POS餐飲系統開發需要螢幕小鍵盤,所以乾脆自己寫一個”大”鍵盤。

裡面需要做輸入法的切換,所以分享給大家。

需要Uses到Winapi.imm;

Uses Winapi.Imm;

1取得所有的輸入法名稱

var
   i: integer;
begin
   for i := 0 to screen.imes.count - 1 do
   begin
      ComBoBox1.Items.Add(screen.Imes.strings[i]);
   end;
end;

2切換到輸入法

var
   I: integer;
   myhkl: hkl;
begin
  if ComboBox1.Text <> '' then
  begin
    if Screen.Imes.Count <> 0 then
    begin
      I := screen.Imes.indexof(ComboBox1.Text);
      if I >= 0 then
        myhkl := hkl(screen.Imes.objects[i]);
      activatekeyboardlayout(myhkl, KLF_ACTIVATE);
    end;
  end;
end;

3關閉輸入法

begin
  ImmSimulateHotKey(Handle, IME_THOTKEY_IME_NONIME_TOGGLE);
  ComBobox1.Text := '';
end;

4取得目前輸入法

var
  IMEHandle: THandle;
  Idx: Integer;
  IMEName: String;
begin
  IMEName := '';
  ImeHandle := GetKeyBoardLayOut(0);
  for Idx := 0 to Pred(Screen.Imes.Count) do
    if HKL(Screen.Imes.Objects[Idx]) = ImeHandle then
        IMEName :=Screen.Imes[Idx];
  ShowMessage(IMEName);
end;

GitHub連結: https://github.com/superlevin/DelphiIme