[対象バージョン]
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;