| 2025/07/11(Fri) 07:53:55 編集(投稿者)
拙作:VK_Framework で試したところ当初の予想よりも簡単に[数値以外のキーを受け付けない]が実現できました。(^^ゞ
簡単なレビューを以下にご報告します。
◇ ◇ ◇ ◇ ◇ ◇
【イベントハンドラに直接記述する】
手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)
メソッド呼び出し @フォーム.更新モード取得(&更新モード) メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR) ┌if (&更新モード≠0) │┌if ((&仮想キーコード>=65 .and &仮想キーコード<=90 .and &仮想キーコード≠13) .or (&仮想キーコード>=106 .and &仮想キーコード≠110) ││ &比較式=#項目属性(#項目番号(#部分列(&STR,#IS全角(&STR,0))),2) ││ 条件 (&比較式≠"文字列") &処理中止=1 ││ 条件 (&比較式≠"文字列") メッセージボックス "","数字キーのみの入力です",ボタン=1 │└end └end
手続き定義終了
上↑と下↓
【VK_Framework を利用する】
手続き定義開始 txtA::入力前(参照 文字列 &編集文字列)
手続き実行 VKprcEventKeyDownON( ) 手続き実行 VKprcKeyON( ) 手続き実行 VKprcKeySet( "key", 1, "項目訂正,訂正", "手続き実行 prcTest( &VKmChr, &処理中止 )" )
手続き定義終了を
手続き定義開始 txtA::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
手続き実行 VKprcEventKeyDownOFF( ) /* キーダウンイベントをオフ */ 手続き実行 VKprcKeyOFF( ) /* 実行禁止 */ 手続き実行 VKprcKeyClear( "key", "項目訂正,訂正" ) /* クリア */
手続き定義終了
手続き定義開始 prcTest( 文字列 &key, 参照 長整数 &処理中止 ) 変数宣言 自動,文字列{ &keyList = "0,1,2,3,4,5,6,7,8,9,+,-" } /* 必要ならば小数点のドットも加える */
トレース出力 _( #対応番号( &keyList, &key ) <> 0 ) if ( #対応番号( &keyList, &key ) <> 0 ) &処理中止 = 0 end
トレース出力 _&key, " ", _&処理中止 手続き定義終了
比べてみると、
拙作:VK_Framework を利用する場合には
・65,90 といった恣意的な仮想キーコードに振り回されなくて分かり易い ・・・・・・・・・・・・・・・・・・
・[Enter][Tab][Esc]の各キーに対して透過的である
・更新モードによって実行内容を指定できる
・分かり易いから改造が簡単に出来る ・・・・・・・
というメリットがあることに気が付く事でしょう。
なお、VK_Framework は Thin INF_Framework / オートINF_Framework 等すべての INF_Framework で使用できます。
p.s.
>>なお、この方法でキーをマスクすると、キーボードが壊れたんじゃないかと不審に思われるかもしれませんね。 >> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ >>なので、「やり過ぎ感がハンパ無しで満載」ですね。 ※何事もほどほどがいいですよ。
これは杞憂、つまり「とりこし苦労」でしたね。
[入力後]イベントハンドラで不要文字を取り除くよりも、ストレートでパフォーマンスも悪く無いでした。アハハハha
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
余談ながらトレースの結果です。
┌when 手続き"txtA::入力前("0")"を実行開始しました │ │┌when 手続き"VKprcEventKeyDownON( )"を実行開始しました │└end │ │┌when 手続き"VKprcKeyON( )"を実行開始しました │└end │ │┌when 手続き"VKprcKeySet("key",1,"項目訂正,訂正","手続き実行 prcTest( &VKmChr, &処理中止 )")"を実行開始しました │└end │ └end
┌when 手続き"フォーム::キーダウン(97,79,0,0)"を実行開始しました │ │┌when 手続き"VKprcEventKeyEval(97,79,0,0)"を実行開始しました ││ ││┌when 手続き"prcTest("1",1)"を実行開始しました │││ │││ :( #対応番号( &keyList, &key ) <> 0 ) : 1 │││ :&key : 1 &処理中止 : 0 │││ ││└end ││ │└end │ └end
┌when 手続き"フォーム::キーダウン(98,80,0,0)"を実行開始しました │ │┌when 手続き"VKprcEventKeyEval(98,80,0,0)"を実行開始しました ││ ││┌when 手続き"prcTest("2",1)"を実行開始しました │││ │││ :( #対応番号( &keyList, &key ) <> 0 ) : 1 │││ :&key : 2 &処理中止 : 0 │││ ││└end ││ │└end │ └end
┌when 手続き"フォーム::キーダウン(99,81,0,0)"を実行開始しました │ │┌when 手続き"VKprcEventKeyEval(99,81,0,0)"を実行開始しました ││ ││┌when 手続き"prcTest("3",1)"を実行開始しました │││ │││ :( #対応番号( &keyList, &key ) <> 0 ) : 1 │││ :&key : 3 &処理中止 : 0 │││ ││└end ││ │└end │ └end
┌when 手続き"フォーム::キーダウン(13,28,0,0)"を実行開始しました │ │┌when 手続き"VKprcEventKeyEval(13,28,0,0)"を実行開始しました ││ │└end │ └end
┌when 手続き"txtA::入力後("123",1,0)"を実行開始しました │ │┌when 手続き"VKprcEventKeyDownOFF( )"を実行開始しました ││ │└end │ │┌when 手続き"VKprcKeyOFF( )"を実行開始しました │└end │ │┌when 手続き"VKprcKeyClear("key","項目訂正,訂正")"を実行開始しました │└end │ └end
|