2010-06-24 77 views
1

我有幾個鍵盤,他們鍵入不同的TMemos。在英語中,一切正常,但在韓語中,擊鍵會在發送給我的onKeypress(它處理/識別不同的鍵盤)之前發送給IME,因此我無法準確地知道它之前來自哪個鍵盤。如何在delphi中使用windows IME?

我不完全知道如何使用WinApi,但我需要學習使用與IME相關的部分。有很多信息HERE,但我需要知道如何在delphi中應用它。我需要存儲每個用戶的擊鍵並將它們發送到IME。

也許有人可以幫助我瞭解如何使用IMM.PAS

+0

你想完成什麼任務? – Alex 2010-06-24 08:24:30

+0

(可能)存儲我的擊鍵並將它們發送到IME。 或任何作品,使不同鍵盤的擊鍵不會互相干擾。 – Dian 2010-06-24 08:39:00

+0

試圖在一臺計算機上使用兩個物理鍵盤,或試圖在應用程序內部支持語言切換? – 2010-06-25 14:22:28

回答

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-loop。 (但總體思路是有的)

0

我懷疑Windows支持你想要做什麼,我懷疑你可以使Windows的工作方式不同。這聽起來像你正試圖在一臺計算機上使用兩個物理鍵盤。

IMM.PAS是Windows IME API的包裝,看起來並沒有寫出來幫助你完成你想要做的事情。

爲什麼不使用兩臺電腦,兩個鍵盤?

+0

這是我公司給我的規範的一部分。我成功地分離了我從IME收到的按鍵/字符,但現在我無法獲取需要多個擊鍵的字符。 我想知道如果可能其他功能我沒有嘗試過可以解決這個像RECONVERTSTRING一樣,但沒有太多的delphi示例代碼,這有助於我弄清楚如何使用這些功能。 – Dian 2010-06-26 07:09:49