我有幾個鍵盤,他們鍵入不同的TMemos。在英語中,一切正常,但在韓語中,擊鍵會在發送給我的onKeypress(它處理/識別不同的鍵盤)之前發送給IME,因此我無法準確地知道它之前來自哪個鍵盤。如何在delphi中使用windows IME?
我不完全知道如何使用WinApi,但我需要學習使用與IME相關的部分。有很多信息HERE,但我需要知道如何在delphi中應用它。我需要存儲每個用戶的擊鍵並將它們發送到IME。
也許有人可以幫助我瞭解如何使用IMM.PAS
我有幾個鍵盤,他們鍵入不同的TMemos。在英語中,一切正常,但在韓語中,擊鍵會在發送給我的onKeypress(它處理/識別不同的鍵盤)之前發送給IME,因此我無法準確地知道它之前來自哪個鍵盤。如何在delphi中使用windows IME?
我不完全知道如何使用WinApi,但我需要學習使用與IME相關的部分。有很多信息HERE,但我需要知道如何在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-loop。 (但總體思路是有的)
我懷疑Windows支持你想要做什麼,我懷疑你可以使Windows的工作方式不同。這聽起來像你正試圖在一臺計算機上使用兩個物理鍵盤。
IMM.PAS是Windows IME API的包裝,看起來並沒有寫出來幫助你完成你想要做的事情。
爲什麼不使用兩臺電腦,兩個鍵盤?
這是我公司給我的規範的一部分。我成功地分離了我從IME收到的按鍵/字符,但現在我無法獲取需要多個擊鍵的字符。 我想知道如果可能其他功能我沒有嘗試過可以解決這個像RECONVERTSTRING一樣,但沒有太多的delphi示例代碼,這有助於我弄清楚如何使用這些功能。 – Dian 2010-06-26 07:09:49
你想完成什麼任務? – Alex 2010-06-24 08:24:30
(可能)存儲我的擊鍵並將它們發送到IME。 或任何作品,使不同鍵盤的擊鍵不會互相干擾。 – Dian 2010-06-24 08:39:00
試圖在一臺計算機上使用兩個物理鍵盤,或試圖在應用程序內部支持語言切換? – 2010-06-25 14:22:28