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