Delphiプログラムネタ。
EditのWinControlに変換モードを指定する機能を追加しようとアレコレ調べる。
変換モードをセットするコード自体は、

procedure SetConversionMode(Handle : HWnd; mode : DWORD);
var
  Imc: HIMC;
  Conversion, Sentence: DWORD;
begin
  Imc := ImmGetContext(Handle);
  if Imc = 0 then Exit;
  ImmGetConversionStatus(Imc, Conversion, Sentence);
  ImmSetConversionStatus(Imc, Conversion, mode);
  ImmReleaseContext(Handle, Imc);
end;

こんなので十分なのだけど、与えるべき値がどうも微妙。
調べてみると、何故かImm.pasでも宣言されて無い値がある。

  • 一般: IME_SMODE_PHRASEPREDICT
  • 人名/地名 : IME_SMODE_PLAURALCLAUSE
  • 話し言葉優先 : 値は$0010でIME_SMODE〜の宣言が見当たらず
  • 無変換 : IME_SMODE_NONE

値の名前を見てもWin95の頃のIMEであった、複合語優先の値が
人名/地名用になっていたりして結構謎。
仕様が変わったのだろうけど、引数の意味が変更されてるのは頂けない。
引数追加にしとけと。


そもそも変換モードなんて見たことなかったけど、いつ頃変わったのだろう。
IME95では複合語優先等になってたようで、IME2000/2002は人名/地名になってる。


追記
Windowハンドルを引数に持つ為勘違いしてたが、
コントロール単位で変換モードは指定できないようだ。
フォーカスを受け取る度に設定してやらないとダメぽい。