我有几个键盘,它们输入不同的 TMemo。在英语中,一切正常,但在韩语中,击键在将其发送到我的 onKeypress (处理/识别不同的键盘)之前被发送到 IME,所以在此之前我无法准确判断它来自哪个键盘。
我不完全知道如何使用 WinApi,但我需要学习使用处理 IME 的部分。这里有很多信息,但我需要知道如何在 delphi 中应用它。我需要存储每个用户的击键并将它们发送到 IME。
也许有人可以帮助我学习使用IMM.PAS
让它工作。使用 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 循环。(但总体思路是存在的)
我怀疑 Windows 是否支持您想要做的事情,并且我怀疑您能否让 Windows 以不同的方式工作。听起来您正试图在一台计算机上使用两个物理键盘。
IMM.PAS 是 Windows IME API 的包装器,并且似乎没有被编写来帮助您完成您想要做的事情。
你为什么不用两台电脑,两个键盘?