過去の桐井戸端BBS (桐ver.8)
14340 フォーム入力時に、通常は日本語変換をONにしておきテンキー入力の時にはOFFになるよう自動切替したい mudagami 2001/12/01-12:53
 桐8のsp6です。
 フォームである項目の入力モードを通常は日本語モードをONに設定しておき、
テンキー入力時の際、日本語モードを自動でOFFに切り替えという具合に、
日本語モードのON/OFFの自動切替を行いたいのですが、
イベントなりで行うにはどの様にすればよいのでしょう?
 IEM自体の設定を変えれば可能ですが(ATOKを使用)、桐の方で切り替えたいのです。
 キーダウンイベントを使ったりしましたが、思うようにはいきません。

14344 Re:入力時の日本語変換ON/OFFの自動切替に付いて質問 Ogo 2001/12/02-16:41
記事番号14340へのコメント

> フォームである項目の入力モードを通常は日本語モードをONに設定しておき、
>テンキー入力時の際、日本語モードを自動でOFFに切り替えという具合に、
>日本語モードのON/OFFの自動切替を行いたいのですが、
>イベントなりで行うにはどの様にすればよいのでしょう?

私が調べた時は、桐のイベントで「入力時初期モード」の設定を変更することはできても、
入力途中で IME のモードを変更する方法はなかったと記憶しますが。

14345 Re:入力時の日本語変換ON/OFFの自動切替に付いて質問 hidetake 2001/12/02-17:53
記事番号14344へのコメント
>私が調べた時は、桐のイベントで「入力時初期モード」の
>設定を変更することはできても、入力途中で IME のモード
>を変更する方法はなかったと記憶しますが。

と言う事は「キーダウン」イベントででも、キーコードや編集状態(更新モード)を確認して、
編集状態であれば一旦表示モードに設定し、オブジェクト操作で「入力モード」切り換えて、
再度、編集モードに突入すれば良いのかと思って、

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード \
,長整数 &スキャンコード \
,長整数 &フラグ \
,参照 長整数 &処理中止)
if (&仮想キーコード>=96 .and &仮想キーコード<=105)
method @フォーム.更新モード設定(0)
オブジェクト操作 @テキスト.入力モード="漢字変換OFF"
method @フォーム.更新モード設定(2)
else
オブジェクト操作 @テキスト.入力モード="漢字変換ON"
end
手続き定義終了

と言ったふうにしてみても、「キーダウン」イベントは
IME が ON の状態で日本語入力中の状態では発生しないのですよね!
だから、IME OFF の状態から IME ON の状態は可能だけれど、逆は出来ない・・・

あとは IME を制御(APIを操作)する方法しか無いのかも知れません。

ちなみに、キーダウンイベントを多用する事は避けた方が良いと思います。
条件によっては非常に遅くなります。
例えば一覧表での連続スクロールなど・・・

14346 Re:入力時の日本語変換ON/OFFの自動切替に付いて質問 hidetake 2001/12/02-18:09
記事番号14345へのコメント
>あとは IME を制御(APIを操作)する方法しか無いのかも
>知れません。

これは外部プログラムに任せる(を呼び出す)と書きたかったのですけど、
桐自身で、メイン側の数字か、テンキーの数字か区別できなければ
呼び出す手段もありませんね・・・

あとは IME の固有の API を制御して、テンキー入力時の固定入力を制御できるかどうか?
そのような外部プログラムがあるのかどうか?
でしょうか・・・


14347 Re:入力時の日本語変換ON/OFFの自動切替に付いて質問 hidetake 2001/12/02-18:45
記事番号14346へのコメント
>と言ったふうにしてみても、「キーダウン」イベントは
>IME が ON の状態で日本語入力中の状態では発生しないの
>ですよね!

これはウソです! (;_;)

&仮想キーコードでは判定できないけど
&スキャンコードでは判定できそうです。

でも、&スキャンコードの使い方は少し
面倒なので、ここまで・・・
(今日は時間が無いものですから)

&スキャンコードの使い方は一部【多遊】さんのところで出した事があります。


14371 Re:質問の経過 mudagami 2001/12/03-20:55
記事番号14347へのコメント
 Ogoさん、hidetakeさん、コメントありがとうございます。
どうしてこの様な質問をしたかというと。
少し前に悲しげさんが、入力中のフォーカス取得項目の反転処理について質問をし、
その後マノ抜けたことにわたしが同じ質問をした件…文字列の反転処理…に関することからです。

 当初は、この処理をが出来ないために『カーソル以降削除』のコマンドボタンを使い、
その後下記の「文字列の半角処理」を行っていました。
ところが『カーソル以降削除』に代えて『反転処理』を加えるようになって
おかしな現象が発生するようになりました。
日本語入力がONの状態で、数字や子音を最初に入力すると最初の1文字だけが
半角で確定してまうのです。2文字目からは日本語ONの状態での入力となります。
1文字目が母音の場合は半角で確定しません。

 せっかく、『反転処理』出来るようになったのもつかの間、
またひとつ問題が出来てしまいました。
何が原因でしょう

 以下手順を記述しますと。

 複数の似たような項目があり、各項目のファミリーの『フォーカス取得』イベントで

If (#編集状態(&hwindow)=1)
  オブジェクト操作 @フォーム.タイマー1 = "1"
End If

手続き定義開始 フォーム::タイマー1()
  メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&focus)
  メソッド呼び出し &focus.編集選択位置設定(1, -1)
  オブジェクト操作 @フォーム.タイマー1 = "0"
手続き定義終了


各項目の『編集文字列変更』イベントで
『手続き実行』コマンド→半角変換()を呼出。

**入力文字列半角変換**(変数は宣言済み)
手続き定義開始 半角変換()
  メソッド呼び出し &this.編集文字列取得(&k文字)
  if (#IS英字(&k文字,0)>0 .or #IS数字(&k文字,0)>0)
    メソッド呼び出し &this.編集選択位置取得(&k位置,&k範囲)
    &k文字=#半角(&k文字)
    メソッド呼び出し &this.編集文字列設定(&k文字)
    メソッド呼び出し &this.編集選択位置設定(&k位置,0)
  end
手続き定義終了

と、云うようなことをやっています。
分かりにくいとは思いますが、いったい何が原因でしょう。


戻る