過去の桐井戸端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 手続き定義終了 と、云うようなことをやっています。 分かりにくいとは思いますが、いったい何が原因でしょう。 |