1

私はいくつかのキーボードを持っており、それらは異なる TMemos を入力しています。英語ではすべて正常に動作しますが、韓国語ではキーストロークが IME に送信されてから onKeypress (さまざまなキーボードを処理/識別します) に送信されるため、その前にどのキーボードから来たのか正確にわかりません。

WinApi の使い方はよくわかりませんが、IME を扱う部分の使い方を覚える必要があります。HEREには多くの情報がありますが、デルファイでの適用方法を知る必要があります。各ユーザーのキーストロークを保存し、IME に送信する必要があります。

IMM.PASの使い方を教えてくれる人がいるかもしれません

4

2 に答える 2

3

動作するようになりました。ImmGetContext、ImmSetComposition、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を別の方法で動作させることができるとは思えません。1台のコンピューターで2つの物理キーボードを使用しようとしているようです。

IMM.PASはWindowsIMEAPIのラッパーであり、実行したいことを正確に実行するために作成されたものではないようです。

2台のキーボードを備えた2台のコンピューターを使用しないのはなぜですか?

于 2010-06-25T14:25:54.783 に答える