設定したIMEを戻すには?


やまだ  2014-09-10 14:33:55  No: 46663

こんにちは。
いつもお世話になっております。

開発環境は、delphiXE3 enterprise(update2適用)、win7(sp1)、MSIME2010です。

以下のように、いろいろ参考にして、半角カナ無変換にしました。

procedure TForm1.Button1Click(Sender: TObject);
var
  Imc          : HIMC;
  dwConversion : Cardinal;
  dwSentence   : Cardinal;
begin
  //入力コントロールにフォーカス移動
  Edit1.SetFocus;

  //IMEをオープン
  SetImeMode(Edit1.Handle, imOpen);
  //入力コンテキストを取得
  Imc := ImmGetContext(Edit1.Handle);

  try
    //パラメータを設定
    dwConversion := IME_CMODE_KATAKANA or IME_CMODE_NATIVE or IME_CMODE_JAPANESE;
    dwSentence   := IME_SMODE_NONE;

    //IMEの状態を設定
    ImmSetConversionStatus(Imc, dwConversion, dwSentence);
  finally
    //ImmGetContextしたら必ず解放する
    ImmReleaseContext(Edit1.Handle, Imc);
  end;
end;

これは、半角カナのテキストボックスenter時に書こうと思っています。

この半角カナのテキストボックスから、郵便番号や住所のテキストボックスに移動したとき、そのテキストボックスのIMEモードと一般でIMEをセットしようと考えています。

ImmGetConversionStatusを呼んだ後、取得したdwConversionとdwSentenceをImmSetConversionStatusに充てて読んでみたのですが、IMEが変わることはありませんでした。

IMEの状態を切り替えるにはどうすれば良いのでしょうか。

よろしくお願いします。


通りすがり  2014-09-10 14:44:38  No: 46664

Edit1.ImeModeをプロパティエディタでimSKataにしておく、っていうのはダメなんですね?


やまだ  2014-09-10 15:10:15  No: 46665

実はそのようにしていたんですが、スペースを押して変換できないようにして欲しいと要望がありまして。

スペースを押しても反応しないようにkeypressでやろうとしたんですが、スペースを入力できなくなるのもまずいということになって。

それで、無変換を探しだしてenter時に書こうと思いました。


igy  2014-09-11 09:44:17  No: 46666

>スペースを押して変換できないようにして欲しいと要望がありまして。

MS−IME2000を使っています。スペースキーで変換しない方法ありますか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q139171888

では、ダメですか?


tor  2014-09-11 18:24:59  No: 46667

ン

一応確認ですけれど、やりたいことは
・エディットボックスがいくつか並んでいて、それぞれ別々のノヘが設定されている
・そのうち特定の一つだけを「半角カナ入力、漢字変換禁止」にしたい
ということですよね。(フリガナ入力用?)
で、ノヘをモヒやトにするのでは、どちらか片方しか満たさないので要求に合わないと。

試してみたところ、以下のような感じでいけてそうなんですが。


ヲサヲサヤニアヲサスヲサィヤニゥ
ヲサヲサョョョ
ヲサヲサ
ヲサヲサヲサヲサッッヲサ元の状態を覚えておくための変数を用意
ヲサヲサヲサヲサニマノヘコヲサツサ
ヲサヲサヲサヲサニマテャヲサニマモコヲサトラマメトサ
ヲサヲサョョョ

ッッヲサ目的のナのヲサマナャヲサマナヲサイベントハンドラを作成

ヲサヤニアョナアナィモコヲサヤマゥサ

ヲサヲサナコヲサネラホトサ
ヲサヲサコヲサネノヘテサ
ヲサヲサテャヲサモコヲサトラマメトサ

ヲサヲサナヲサコスヲサィモヲサヲサヤラテゥョネサ
ヲサヲサヲサコスヲサノヌティナゥサ
ヲサヲサ
ヲサヲサヲサヲサッッヲサ元の状態を覚えておく
ヲサヲサヲサヲサニマノヘヲサコスヲサノヌマモィゥサ
ヲサヲサヲサヲサノヌテモィャヲサニマテャヲサニマモゥサ
ヲサヲサヲサヲサッッヲサノヘナの状態を設定
ヲサヲサヲサヲサノモマモィャヲサゥサ
ヲサヲサヲサヲサテヲサコスヲサノヘナ゜テヘマトナ゜ヒチヤチヒチホチヲサヲサノヘナ゜テヘマトナ゜ホチヤノヨナヲサヲサノヘナ゜テヘマトナ゜ハチミチホナモナサ
ヲサヲサヲサヲサモヲサヲサヲサコスヲサノヘナ゜モヘマトナ゜ホマホナサ
ヲサヲサヲサヲサノモテモィャヲサテャヲサモゥサ
ヲサヲサ
ヲサヲサヲサヲサノメティナャヲサゥサ
ヲサヲササ
サ

ヲサヤニアョナアナィモコヲサヤマゥサ

ヲサヲサナコヲサネラホトサ
ヲサヲサコヲサネノヘテサ

ヲサヲサナヲサコスヲサィモヲサヲサヤラテゥョネサ
ヲサヲサヲサコスヲサノヌティナゥサ
ヲサヲサ
ヲサヲサヲサヲサッッヲサ元の状態に戻す
ヲサヲサヲサヲサノモマモィャヲサニマノヘゥサ
ヲサヲサヲサヲサノモテモィャヲサニマテャヲサニマモゥサ
ヲサヲサ
ヲサヲサヲサヲサノメティナャヲサゥサ
ヲサヲササ
サ

ただこれだと、トのナとの間で移動した時に、カナロック状態のまま残ってしまうことがあるみたいですね……
同じような問題が出るようだったら、下の記事を参考にしてみてください。

ヲサトイーーケ、ラキでノヘ制御が?
ヲサコッッョョョッュットツツモッョソォイーアアーオッアアーオーーアウョ

真ん中へんにあるさんのコードを参照。
こちらでは、特定のナを英数字入力固定にするため
「トにしておき、フォーカスが当たった時にカナキーがマだったらマにする」
という手段で実現していますが、ニヒヘの判定を逆にして
「カナキーがマだったらマにする」としてやれば目的の動作になるのではないかと思います。
スススススススススススススススススススススススススススススススススススススススス
ニコ やまだ
トコ イーアエッーケッイオィ木ゥ アオコエエコイク  書込者ノト:ロ 「。「 「「 ン
モコ 

こんにちは。
遅くなりまして申し訳ございません。

大きなバグがあって、別のところなんですが、その改修で大変な状況に陥っていました。

教えていただいたコードを参考に、改修して上手くいきました。

お騒がせしました。

ありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加