お世話になっております。
カナ入力とローマ字入力の切り替えで躓いてしまい識者の方の
お知恵をお借りしたく投稿させて頂きました。
カナ入力とローマ字入力の切り替えをユーザーに意識させること
なく切り替えを行いたいと考えております。
キーボードでALT+カタカナ/ひらがなで切り替えれば済む事なの
ですが少しでもオペレーションを減らす事ができればと思います。
識者の方、アドバイス・ご回答の程よろしくお願い致します。
環境は
・Delphi6 Professional
・Windows XP Professional
です。
TEditなどの入力関連コンポーネントにはImeModeというプロパティが付いていてそこを切り替えることで可能だと思いますよ。
imKataにするとフォーカスが入ると勝手にカナ入力になります。
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(VK_KANA, 0, 0, 0);
keybd_event(VK_KANA, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
# フォーカスが入力可能なコントロールにあることが必要
一応、これで出来ますが、IMEを操作するのは苦労しますよ。OS任せにしておいた方が無難です。
キーを押したことにする以外にも、APIで出来るかもしれませんが、MSIME、ATOK、Wnn、Cannaなど、それぞれIMEによって違うと思います。
# 未確認です。メッセージだけでできるかも。
LupinⅢ様、にしの様
ご回答ありがとうございます。
>LupinⅢ様
ご回答頂いたのに私の書き方が悪かったようです。
私が思っているカナ入力とはキーボードで「A」の位置にある
「ち」を入力できるようにという意味だったのです。
(最近はカナ入力とは言わないのかな?)
私の言葉足らずでご迷惑おかけしました。
ありがとうございました。
>にしの様
ご回答頂いた方法で切り替えることができました。
IMEの操作はほんと難しいようですね。
キーボードでALT+カタカナ/ひらがなで切り替えができるため
簡単にできるものと高をくくっていましたが甘かったです。
この度はありがとうございました。
>私が思っているカナ入力とはキーボードで「A」の位置にある
>「ち」を入力できるようにという意味だったのです。
ということですが.以下のURLも将来IMEを操作する時の参考になるかも
知れません.ご参考までに.
http://hp.vector.co.jp/authors/VA015730/delphi/TipsTips.html#IMEの制御
なるほど、ImmGetConversionStatusで取得できるのであれば、ImmSetConversionStatusで設定出来そうですね。
# Mr.XRAYさんが紹介されたURLにあるGetInputModeを使用しています
procedure SetInputMode(const winctr :TWinControl; Mode: TImeInputMode);
var
Imc:HIMC;
dwConversion : DWORD;
dwSentence : DWORD;
begin
winctr.SetFocus;
Imc := ImmGetContext(winctr.Handle);
ImmGetConversionStatus(Imc,dwConversion,dwSentence);
If (dwConversion And IME_CMODE_ROMAN) = IME_CMODE_ROMAN Then
begin
//ROMAN
if Mode = HIRA then
begin
dwConversion := dwConversion and (not IME_CMODE_ROMAN);
ImmSetConversionStatus(Imc, dwConversion, dwSentence);
end;
end
else
begin
//HIRA
if Mode = ROMAN then
begin
dwConversion := dwConversion or IME_CMODE_ROMAN;
ImmSetConversionStatus(Imc, dwConversion, dwSentence);
end;
end;
ImmReleaseContext(winctr.Handle, Imc);
end;
Mr.XRAY様、にしの様
さらなるご回答ありがとうございます。
>Mr.XRAY様
とても参考になるサイトを紹介して頂きありがとうございました。
今回の件にとても役にたちそうです。
ありがとうございました。
>にしの様
ソースを掲示して頂きありがとうございます。
私の力不足・理解力不足のため上記のソースでの
切り替えができませんでした。
Mr.XRAY様に教えて頂いたサイトなどを参考に
各々の意味を理解し再度挑戦したいと思います。
ありがとうございました。
私もテストしてみました.
かな方式の入力から,ローマ字入力に変更すると,IMEのステータスウィンド
には[ローマ]と表示されるのですが,実際入力を開始するとかなに戻って
しまいました.
(ボタン使用とEditのOnEnterの両方で確認.IMEはWXG4.MS IMEでは未確認)
Delphi MLの過去ログをみたら,Windows95では動作するとの情報がありまし
たが,Windows98以上では動作しない報告がありました.
前出のサイトのコードは,実際には自分で試してのは初めてでして,
かえって混乱させてしまったようです.
時間ができたら,またテストして見たいとは思ってはいますが...
WindowsXP Pro, ATOK17でのテストでは、上のSetIMEModeで、
procedure TForm1.Edit1Enter(Sender: TObject);
begin
SetInputMode(Edit1, ROMAN);
end;
procedure TForm1.Edit2Enter(Sender: TObject);
begin
SetInputMode(Edit1, HIRA);
end;
としてやると、Edit1ではローマ字入力、Edit2ではカナ入力になりました。ATOK17では、特に問題なさそうです。
# どちらも、ImeMode=imHiraです。
他のIMEはインストールしていないので試していません。
IME関連は、再変換で苦労した事があります。いろいろ試してみないと、1つが出来ても他で出来ない場合が出てきますね。
前の結果はにしのさんと同じテストでした.ImeMode=imHira.
(ImeMode=imHira, Windows XP(SP1)+Delphi5(UP2))
多分,IMEによって内部の処理が違うのではないでしょうか.
私のWXG4では,文字入力開始と同時にWXG4の基本設定が機能するのでは
ないかと思います.う〜ん.
でも,これが制御可能だと意外と便利かもしれませんね.
ローマ字入力派とかな入力派がいて...
Mr.XRAY様・にしの様
度重なるご検証ありがとうございます。
当方MS-IME スタンダード 2002 Ver8.1 を使用しております。
以前の動作確認はこのMS-IMEでしておりましたが
ATOK15の環境で確認したところ問題なく動作致しました。
大変失礼致しました。
2種類しか試してませんがIMEによって違うようですね。
標準でついてくるのはMS-IMEだと思いますのでこれだけの
ために別のIMEを導入するか否か。
みんながみんなローマ字入力なら問題はないんですが
そうでないのが現状です。
うーん、ますます悩みの種が増えそうです^^;
この度は色々ありがとうございました。
なるほど,ATOKなら操作可能ということらしいですね.
ちょっと悔しいけど,情報としては貴重です.感謝します.
ツイート | ![]() |