1

我有几个键盘,它们输入不同的 TMemo。在英语中,一切正常,但在韩语中,击键在将其发送到我的 onKeypress (处理/识别不同的键盘)之前被发送到 IME,所以在此之前我无法准确判断它来自哪个键盘。

我不完全知道如何使用 WinApi,但我需要学习使用处理 IME 的部分。这里有很多信息,但我需要知道如何在 delphi 中应用它。我需要存储每个用户的击键并将它们发送到 IME。

也许有人可以帮助我学习使用IMM.PAS

4

2 回答 2

3

让它工作。使用 ImmGetContext、ImmSetCompositon、ImmGetComposition 和 NormalizeString。

procedure TForm1.IMEFUNCTION(var msg: TMsg);
var
  buf: array [0..20] of char;
  hHimc: HIMC;
  i, j: integer;
  str: string;
  temporary: PWideChar;
begin

   hHimc:= ImmGetContext (msg.hwnd);
   if hHimc = 0 then
    Exit;
   fillchar (buf, 20, 0);
   ImmSetCompositionStringW (hHimc, SCS_SETSTR, PChar (''), Length(''), nil, 0);
   ImmGetCompositionString (hHimc, GCS_COMPSTR, @buf, 20);

  temporary:= PWideChar(Edit1.Text+buf[0]);
  NormalizeString(5 , temporary, -1, buf, 20);
  Edit1.Text:=buf;

    end;//end if
  end;//end for
  ImmReleaseContext (handle, hHimc);

end;

旁注:我并没有真正使用 TEdit,我使用了 StringGrid 和 for 循环。(但总体思路是存在的)

于 2010-06-28T09:52:39.987 回答
0

我怀疑 Windows 是否支持您想要做的事情,并且我怀疑您能否让 Windows 以不同的方式工作。听起来您正试图在一台计算机上使用两个物理键盘。

IMM.PAS 是 Windows IME API 的包装器,并且似乎没有被编写来帮助您完成您想要做的事情。

你为什么不用两台电脑,两个键盘?

于 2010-06-25T14:25:54.783 回答