[対象バージョン]

Delphi 2.0J

[説明]

IME から直接、結果の文字列を取得する方法

[対処法]

つまり、結果が返されるときデフォルトの処理を行わないようにします。そうすればWM_CHARは送られずに済みます。
GCS_関係はヘルプにもWindows95APIバイブル2にも載っています。ちなみにAPIバイブル2はメッセージについて大体すべて載っています。

 

[サンプルソース]

procedure TEditAreaControl.WMImeComPosition(var Message: TMessage);
var
  hImc: THandle;  L: Integer;  WorkBuf: PChar;
begin
  if (Message.lParam and GCS_RESULTSTR) = GCS_RESULTSTR then
  begin
    hImc := ImmGetContext(Handle);
    if hImc <> 0 then
    begin
      L := ImmGetCompositionString(hImc, GCS_RESULTSTR, nil, 0);
      if L > 0 then
      begin
        GetMem(WorkBuf, L);
        ImmGetCompositionString(hImc, GCS_RESULTSTR, WorkBuf, L);
        InsertLines(WorkBuf, L);//これは挿入メソッド
        FreeMem(WorkBuf, L);
      end;
      ImmReleaseContext(Handle, hImc);
    end;
  end
  else
    inherited;end;
end;

 

FAQ目次に戻る