HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■15017 / inTopicNo.1)  数値型項目で入力の際数値以外のキーを受け付けない
  
□投稿者/ まさやん -(2025/07/09(Wed) 15:00:38)
    2025/07/09(Wed) 15:24:55 編集(投稿者)


    いつも お世話になっております

    桐9s Win11 イベント処理を行っています

    フォーム入力時に
    品名や 備考 などの 文字列型項目での入力では
    全キーボード入力を 拒まないのですが

    数値型項目入力時に
    数字キー以外の キーを受け付けないという 方法はできますか?

    イベント実行中 数字入力だけの (例えば 単価 とか 数量など)際に
    間違って 英字キー 押して 間違ってエンターキー押すと
    メッセが出て その先の 処理を受け付けてくれません

    そのための 回避策を探していますが
    そのようなことができるかどうかもわかりませんが

    宜しくお願い致します。

引用返信 [メール受信/OFF] 削除キー/
■15018 / inTopicNo.2)  Re[1]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/09(Wed) 15:34:19)
    > 桐9s Win11 イベント処理を行っています
    > 数値型項目入力時に
    > 数字キー以外の キーを受け付けないという 方法はできますか?
    >
    > イベント実行中 数字入力だけの (例えば 単価 とか 数量など)際に
    > 間違って 英字キー 押して 間違ってエンターキー押すと
    > メッセが出て その先の 処理を受け付けてくれません
    > そのための 回避策を探しています

    確認ですが、

    ・フォーム(.wfm)のテキストボックスに入力する場合

    と考えてよろしいでしょうか?

    あくまでも、↑その場合ですが、

    もしも、使用不可な文字を入力された場合には、

    1.キー入力中に使用不可な文字を除去する
    2.[Tab][Enter]で確定後に使用不可な文字を除去する

    のどちらでしょうか?

    なお、2の場合ですが、

    「手当て」をした事をユーザに通知しますか?

    それとも、スルーしますか??


引用返信 [メール受信/OFF] 削除キー/
■15019 / inTopicNo.3)  Re[2]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/09(Wed) 16:57:53)
    お世話になります

    > ・フォーム(.wfm)のテキストボックスに入力する場合

    はいそうです フォーム入力時です

    > もしも、使用不可な文字を入力された場合には、
    >
    > 1.キー入力中に使用不可な文字を除去する
    > 2.[Tab][Enter]で確定後に使用不可な文字を除去する
    >
    > のどちらでしょうか?

    はい 先ほど書くの忘れましたが

    入力後イベントで
    #IS数字関数で 
    if (#IS数字(&編集文字列,1)=0)
    メッセ・・・ ボタン=1,&入力継続
    end

    と組んだのですが

    ストレートに 数字キー 以外のキーを受け付けない・・・
    という方法が あるのかな・・  と思い立った次第です

    因みに
    1の場合 2の場合の 対処コマンド もご伝授願いたいと思います

    よろしくお願いいたします。
引用返信 [メール受信/OFF] 削除キー/
■15020 / inTopicNo.4)  Re[1]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ 通りすがり -(2025/07/09(Wed) 17:14:26)
    そういうの、確か[キーダウン]イベントでやったことあります
引用返信 [メール受信/OFF] 削除キー/
■15021 / inTopicNo.5)  Re[3]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/09(Wed) 17:35:08)
    2025/07/09(Wed) 18:03:06 編集(投稿者)

    >>・フォーム(.wfm)のテキストボックスに入力する場合
    > はいそうです フォーム入力時です

    了解しました。(^^ok

    > ストレートに 数字キー 以外のキーを受け付けない・・・
    > という方法が あるのかな・・  と思い立った次第です


    [あらかじめキーに割り当てられている機能の実行を、禁止するか]は[メソッド呼び出し キー変換]で出来ますが・・・

    でも、これは[キーに割り当てられている機能]ですから該当しませんね。

    [キーを受け付けない]というのは、PCとキーボードの接続を遮断するしかありませんよね。

    つまり、キーボードは全く使えないか、普通に使えるかのどちらかでしょ。

    なので、特定のキーだけをマスクするというのは、(普通には)出来ないと思いますよ。

    ※もちろん、ハードウェアを直接または間接に制御する何某かの方法があれば別ですが、私は知りません。(^^ゞ

    > 先ほど書くの忘れましたが
    > 入力後イベントで
    > #IS数字関数で 
    > if (#IS数字(&編集文字列,1)=0)
    > メッセ・・・ ボタン=1,&入力継続
    > end
    >
    > と組んだのですが

    [入力後]イベントハンドラでチェックするのが一番自然ですね。

    作ったものを見せていただければアドバイスしますよ。

    >>もしも、使用不可な文字を入力された場合には、
    >>1.キー入力中に使用不可な文字を除去する
    >>2.[Tab][Enter]で確定後に使用不可な文字を除去する
    >>のどちらでしょうか?
    >
    > 因みに
    > 1の場合 2の場合の 対処コマンド もご伝授願いたいと思います

    1.は、[キーダウン]イベントで引数:&仮想キーコードをチェックして、

    参照 長整数 &処理中止の値を 1イチ または 0ゼロ にすれば良いと思いますよ。

    ただし、テキスト編集中以外には[キーダウン]イベントはオフにしないと、無意味に[キーダウン]イベントが発生してしまいます。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    オンとオフを適宜するのがキモですね。(^^ok

    なお、この方法でキーをマスクすると、キーボードが壊れたんじゃないかと不審に思われるかもしれませんね。
                      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    なので、「やり過ぎ感がハンパ無しで満載」ですね。 ※何事もほどほどがいいですよ。

    だから、私( ONnoji )的にはお勧めしませんけれど。(^^ゞ

    2.は、すでにそちらで作成されているので申し上げることはありません。

引用返信 [メール受信/OFF] 削除キー/
■15022 / inTopicNo.6)  Re[1]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ MAKOTO -(2025/07/09(Wed) 17:51:45)
    まさやんさんこんにちは
    入力支援ボタンを使ったフォーム呼び出しを使えば
    以下のフォームでは数字キー以外は
    入力できないように思います。
    きりぎりす様作成の「電卓」です。
    https://tayu.o0o0.jp/download/file_051.htm
    一度使ってみてはいかがでしょうか。
引用返信 [メール受信/OFF] 削除キー/
■15023 / inTopicNo.7)  Re[4]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/09(Wed) 19:43:23)

    > [入力後]イベントハンドラでチェックするのが一番自然ですね。
    >
    > 作ったものを見せていただければアドバイスしますよ。

    はい ありがとうございます。


    > 1.は、[キーダウン]イベントで引数:&仮想キーコードをチェックして、
    >
    > 参照 長整数 &処理中止の値を 1イチ または 0ゼロ にすれば良いと思いますよ。
    >
    > ただし、テキスト編集中以外には[キーダウン]イベントはオフにしないと、無意味に[キーダウン]イベントが発生してしまいます。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > オンとオフを適宜するのがキモですね。(^^ok
    >
    > なお、この方法でキーをマスクすると、キーボードが壊れたんじゃないかと不審に思われるかもしれませんね。
    >                   ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > なので、「やり過ぎ感がハンパ無しで満載」ですね。 ※何事もほどほどがいいですよ。
    >

    今回は 桐の可能性を探ってみたいのも事実でした

    キーダウンイベントですね

    ちと 蛇足になるかもしれませんが 挑戦してみます。
    ありがとうございます。
引用返信 [メール受信/OFF] 削除キー/
■15024 / inTopicNo.8)  Re[2]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/09(Wed) 19:44:59)
    No15020に返信(通りすがりさんの記事)
    > そういうの、確か[キーダウン]イベントでやったことあります

    メッセ ありがとうございます。
    ちと試しにやってみたいと思います。
    ありがとうございます。
引用返信 [メール受信/OFF] 削除キー/
■15025 / inTopicNo.9)  Re[2]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/09(Wed) 19:46:47)

    > 入力支援ボタンを使ったフォーム呼び出しを使えば
    > 以下のフォームでは数字キー以外は
    > 入力できないように思います。
    > きりぎりす様作成の「電卓」です。
    > https://tayu.o0o0.jp/download/file_051.htm
    > 一度使ってみてはいかがでしょうか。

    メッセ ありがとうございます。
    この手もありましたね。
    ありがとうございます。
引用返信 [メール受信/OFF] 削除キー/
■15026 / inTopicNo.10)  Re[5]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/09(Wed) 20:47:46)
    2025/07/10(Thu) 00:07:31 編集(投稿者)

    >>なお、この方法でキーをマスクすると、キーボードが壊れたんじゃないかと不審に思われるかもしれませんね。
    >>                  ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >>なので、「やり過ぎ感がハンパ無しで満載」ですね。 ※何事もほどほどがいいですよ。
    >
    > 今回は 桐の可能性を探ってみたいのも事実でした
    > キーダウンイベントですね
    > ちと 蛇足になるかもしれませんが 挑戦してみます。

     &仮想キーコード の値を調べる手間が大変になりますので、拙作のユーティリティをご案内します。
     ・・・・・・・・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    【多遊】さんのダウンロードコーナーの

     #202 INF_Framework 第3.3版 改訂版(MkII) サンプル集 for 桐9-2012 / 桐9s / 桐10 / 桐10s / 桐sSL

    に同梱されている

     INF_VK_key_checker.kev
     INF_VK_key_checker.tbl
     INF_VK_key_checker.wfm



     &仮想キーコード → &VKmKeyNum / 長整数
     &スキャンコード → &VKmScanNum / 長整数
     &フラグ     → &VKmFlagNum / 長整数

    の値が確認できますので、便利ですよ。


    以下は同梱の 1st_Spec_Memo_VK.txt より抜粋

    ■VK とは(概要)

     機能名:VK( ブイキー )は、仮想キーコード( Virtual-Key Codes )の意味です。

     機能:VKは、仮想キーコードを識別して、コマンドまたはメソッドを実行するユーティリティです。

     仮想キーコードの値は、[キーダウン]イベントと[システムキーダウン]イベントのイベントハンドラの第1引数で求められます。

     (例)  フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)

     (例)フォーム::システムキーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)

     これらの引数は以下の局所変数に代入されます。 ※&処理中止 を除く

     &仮想キーコード → &VKmKeyNum / 長整数
     &スキャンコード → &VKmScanNum / 長整数
     &フラグ     → &VKmFlagNum / 長整数

     なお、押されたキーに対応するキーの名前は、&VKmKeyString / 文字列 に代入されます。

     ダウンロードコーナーの INF_VK_key_checker_2020-07-07.zip の INF_VK_key_checker.wfm を用いると変数の値を簡単に確認できます。

    p.s.

    老婆心ながら・・・

    > 今回は 桐の可能性を探ってみたいのも事実でした
    > キーダウンイベントですね
    > ちと 蛇足になるかもしれませんが 挑戦してみます。

    [キーダウン]イベントは、スタティック(静的)に使うよりも、ダイナミック(動的)に使う方がいいイベントですよ。

    これは、[タイマー]イベントでも同じです。

    なので、適用範囲は限定した方が無難(身のため?)だと思いますよ。

    もちろん、試すのは自由だから構いませんけれど。

    しかし、使い方には注意が必要だと思いますよ。お気を付けて行ってらっしゃいませ。(@^^)/~~~


引用返信 [メール受信/OFF] 削除キー/
■15027 / inTopicNo.11)  Re[1]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/10(Thu) 09:36:38)
    2025/07/10(Thu) 09:39:34 編集(投稿者)


    みなさん 色々ありがとうございます

     メソッド呼び出し @フォーム.更新モード取得(&更新モード)
     メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
      if (&更新モード≠0)
        if ((&仮想キーコード>=65 .and &仮想キーコード<=90 .and &仮想キーコード≠13) .or (&仮想キーコード>=106 .and &仮想キーコード≠110)
            &比較式=#項目属性(#項目番号(#部分列(&STR,#IS全角(&STR,0))),2)
             条件 (&比較式≠"文字列") &処理中止=1
           条件 (&比較式≠"文字列") メッセージボックス "","数字キーのみの入力です",ボタン=1
       end
    end


     とこんな感じで しばらくやってみたいと思います
     不具合が生じたときはまたその時に対処してみたいと思います

     また何かありましたらよろしくお願いいたします
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■15028 / inTopicNo.12)  Re[6]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/10(Thu) 09:53:36)
    2025/07/10(Thu) 09:56:28 編集(投稿者)

    ONnojiさんありがとうございます

    >  #202 INF_Framework 第3.3版 改訂版(MkII) サンプル集 for 桐9-2012 / 桐9s / 桐10 / 桐10s / 桐sSL
    >
    > に同梱されている
    >
    >  INF_VK_key_checker.kev
    >  INF_VK_key_checker.tbl
    >  INF_VK_key_checker.wfm
    >
    > は
    >
    >  &仮想キーコード → &VKmKeyNum / 長整数
    >  &スキャンコード → &VKmScanNum / 長整数
    >  &フラグ     → &VKmFlagNum / 長整数
    >
    > の値が確認できますので、便利ですよ。
    >
    >
    > 以下は同梱の 1st_Spec_Memo_VK.txt より抜粋
    >
    > ■VK とは(概要)
    >
    >  機能名:VK( ブイキー )は、仮想キーコード( Virtual-Key Codes )の意味です。
    >
    >  機能:VKは、仮想キーコードを識別して、コマンドまたはメソッドを実行するユーティリティです。
    >
    >  仮想キーコードの値は、[キーダウン]イベントと[システムキーダウン]イベントのイベントハンドラの第1引数で求められます。
    >
    >  (例)  フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)
    >
    >  (例)フォーム::システムキーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)
    >
    >  これらの引数は以下の局所変数に代入されます。 ※&処理中止 を除く
    >
    >  &仮想キーコード → &VKmKeyNum / 長整数
    >  &スキャンコード → &VKmScanNum / 長整数
    >  &フラグ     → &VKmFlagNum / 長整数
    >
    >  なお、押されたキーに対応するキーの名前は、&VKmKeyString / 文字列 に代入されます。
    >
    >  ダウンロードコーナーの INF_VK_key_checker_2020-07-07.zip の INF_VK_key_checker.wfm を用いると変数の値を簡単に確認できます。
    >

    拝見させていただきました。
    なるほど でした。


    > 老婆心ながら・・・
    >

    > [キーダウン]イベントは、スタティック(静的)に使うよりも、ダイナミック(動的)に使う方がいいイベントですよ。
    >

    動的に・・ですね?
    例えば どんな感じにでしょうか?
    すみません お手隙の時でいいです。
引用返信 [メール受信/OFF] 削除キー/
■15031 / inTopicNo.13)  Re[7]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/10(Thu) 11:37:36)
    >> 老婆心ながら・・・
    >> [キーダウン]イベントは、スタティック(静的)に使うよりも、ダイナミック(動的)に使う方がいいイベントですよ。
    >
    > 動的に・・ですね?
    > 例えば どんな感じにでしょうか?

    普通の[キーダウン]イベントハンドラの内容は次のように

     メソッド呼び出し @フォーム.更新モード取得(&更新モード)
     メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&STR)
    ┌if (&更新モード≠0)
    │┌if ((&仮想キーコード>=65 .and &仮想キーコード<=90 .and &仮想キーコード≠13) .or (&仮想キーコード>=106 .and &仮想キーコード≠110)
    ││ &比較式=#項目属性(#項目番号(#部分列(&STR,#IS全角(&STR,0))),2)
    ││ 条件 (&比較式≠"文字列") &処理中止=1
    ││ 条件 (&比較式≠"文字列") メッセージボックス "","数字キーのみの入力です",ボタン=1
    │└end
    └end

    ↑このように if が 入れ子になっていますよね。

    でも、他の場面でも[キーダウン]イベントを使いたくなったらどうでしょうか?

    さらに、他の場面でも、さらにさらに他でも・・・

    想像していただけると思いますが、これでは場面場面ごとに if を記述しなければなりませんね。

    もしも、if が少しだったらまだマシですが、

    際限なく if が増えてしまうとメンテナンスが困難になります。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    という理由から当方は、[キーダウン]イベントハンドラをブラックボックスにしたのでした。

    つまり、[キーダウン]イベントハンドラを直接編集することを止めたということです。

    そのためには、以下のブレークスルーが必要でした。

    【一部を転載】

    桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    https://silicon7565.cloudfree.jp/guide/guide_Part1.htm#section16-8

    16.8 [キーダウン]イベントと[システムキーダウン]イベント
     [キーダウン]イベントは、キーボード上のキーが押されているときに発生するイベントです。
    [システムキーダウン]イベントは、[Alt]キーまたは[F10]キーが押されているときに発生するイベントです。

     このイベントはいろいろな目的で使うことが出来ますが、
    一覧表形式(または伝票形式)のフォームの明細部の項目を疑似的にスクロールする目的に使用するのは止めた方がよいです。
    これは押されたキーを判定して、テキストの[ソース]を書き換えることで疑似的にスクロールしようという目論見なのですが、
    実際には、ロジックが非常に面倒であり、スクロールする項目数を変更するのも大変であることからおススメしません。
     ちなみに、拙作:INF_Framework でもスクロールが出来ますが、
    拙作では[フォーカス取得]イベントを利用してスクロールしていて[キーダウン]イベントは一切使っていません。

     とにかくキーが押されると発生するイベントなので、こいつは便利だと思う人が非常に多いイベントなのですが、
    際限なく利用すると、[キーダウン]イベントのイベントプロシージャに条件判断を非常に多く記述することになります。
    すなわち、押されたキーを判定するために[if ... else ... end]や[ケース開始 ... ケース終了]がテンコ盛りになります。
     [キーダウン]イベントのイベントプロシージャを夢中なって作っているその時には覚えているので良いのですが、
    後日メンテナンスのためにイベントプロシージャの中身を見た時には、何がどうなっているのかサッパリ分からない状況になります。
     また、複雑な論理を記述するのは大変であるし、
    そもそもすべての操作に対応して[if ... else ... end]や[ケース開始 ... ケース終了]で記述出来るわけでもありません。
    そういう理由から、[キーダウン]イベントを使うのならば、なるべくほどほどに使うのが望ましいです。
    ガッツリ[キーダウン]イベントを使って後で保守に苦しむのはつまらないことです。

     ガッツリ[キーダウン]イベントを使って後で保守に苦しむ理由は、
    [キーダウン]イベントのイベントプロシージャに何もかも全てを記述しようとしたからです。
    これはイベントプロシージャから一般プロシージャをサブルーチン化して呼び出すようにしても変わりません。
     この問題を解決する唯一の方法は[キーダウン]イベントの設定を動的に行うことしかありません。
    すなわち、任意に[キーダウン]イベントで実行する内容をセットして、また任意にその設定をクリアすることです。
    そこで、そのために用意したものが拙作:VK_Framework です。
    拙作:VK_Framework は、ガッツリ[キーダウン]イベントを使うためのブレイクスルーです。

     ― たかが[キーダウン]イベント、されど[キーダウン]イベント 2015/4/14(火) ― ブログ版 桐のイベント道場より
     [キーダウン]イベントのこと。
     今は昔、かっこうBBS(2代め)でハンドル名「しぼうかん」さんと[キーダウン]イベントに関してやり取りしたことが懐かしい。
     メイン&サブフォームで押された矢印キーに対応したイベント=つまり[キーダウン]イベント。
     フォームの製作が進むうちに、[キーダウン]イベントハンドラに if ... else ... end が増えていく。
     場合場合に対応するif 、更新モードに対応するif、そしてキーに対応するif。
     増え続ける if を見て、直感的に気が付いた。
     この if は増え続けて際限が無いし、if のネストが複雑になって判り易さが失われている。
     製作中に動作を確認している時にはデバッグはなんとかなるかもしれないが、後でメンテナンスするのは非常に大変だ。
     さらに重要な問題に気が付いた。
     それは、スタティックな動作は簡単に記述できるが、ダイナミックな動作は複雑すぎて記述不可能だろうということ。
     つまり、ハンドル名「しぼうかん」さんとのやり取りによって、泥沼のコードを書いた結果、
     [キーダウン]イベントの問題点に気が付いたという次第。
     そこで、ハンドル名「しぼうかん」さんのフォームは放置して、拙作:VK_library の開発に取り組んだというワケ。
     底なしの泥沼のような if のネスト、それは経験したことの無い者には絶対にワカラナイ世界。
     プログラムの書き方は自由だ。
     だから、拙作:VK_library を強要するつもりはない。
     しかし、肥大化した[キーダウン]イベントハンドラの if 文が意味するものは、メンテナンス困難という実態である。
     このことを判っていただければと思い投稿した次第。
     たかが[キーダウン]イベント、されど[キーダウン]イベント。


引用返信 [メール受信/OFF] 削除キー/
■15032 / inTopicNo.14)  Re[8]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/10(Thu) 11:54:38)
    ありがとうございます。

    色んなイベントを組まれての経験談で得た答えなんですね。

    勉強になります。

    また色々とご伝授してください。
    ありがとうございます。
引用返信 [メール受信/OFF] 削除キー/
■15033 / inTopicNo.15)  Re[9]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/10(Thu) 15:32:52)
    2025/07/10(Thu) 15:57:30 編集(投稿者)

    論より証拠。

    サンプルを作りました。

    INF_Framework をダウンロードしたフォルダに解凍してください。

    内容に関しては、AKomeさんのwebページの解説をお読みください。

    キーダウンイベントを簡単に|あこめの桐のプログラミング入門 桐10s・桐s-2024LT by AKome
    https://akome409102.cloudfree.jp/Kiri/INF33MkII_VK.html

    3-2. 動的運用:その都度 有効にして、処理を実行後無効にします
    https://akome409102.cloudfree.jp/Kiri/INF33MkII_VK.html#9

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    手続き定義開始 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, " ", _&処理中止
    手続き定義終了


    p.s.

    なお、サンプルは数日を目途に削除します。
引用返信 [メール受信/OFF] 削除キー/
■15036 / inTopicNo.16)  Re[10]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ まさやん -(2025/07/10(Thu) 20:43:43)
    サンプルまでいただいてありがとうございます。


    > INF_Framework をダウンロードしたフォルダに解凍してください。
    >

    解凍して フォームクリックしたのですが
    ○○ライブラリ が見つかりません とのメッセが出ますが・・


    先日 ダウンロードコーナーから ダウンロードしたのがありまして
    その中のと同じのかと思われますので 試してみます


    また AKOMEさんのと もひとつのURL 見てみました
    私のレベルでは まだ 解釈不足です

    ゆっくりとじっくりとみてみます


引用返信 [メール受信/OFF] 削除キー/
■15037 / inTopicNo.17)  Re[11]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/10(Thu) 20:50:28)
    2025/07/11(Fri) 08:51:12 編集(投稿者)

    > 論より証拠。
    > サンプルを作りました。
    > INF_Framework をダウンロードしたフォルダに解凍してください。

    > 先日 ダウンロードコーナーから ダウンロードしたのがありまして
    > その中のと同じのかと思われますので 試してみます
      ↑
    そのフォルダに解凍する

     または

    ダウンロードコーナーからダウンロードしたファイルが存在するフォルダの

    ・INF_Framework.cmd
    ・IPS_Framework.cmd

    この2つのファイルを VK_使用例.wfm/kev があるフォルダにコピーしてください

    p.s.

    > また AKOMEさんのと もひとつのURL 見てみました
    > 私のレベルでは まだ 解釈不足です

    そもそも初めて経験するインタフェースなのですから誰でも最初から理解・解釈出来ないのが普通ですよ。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    まず、考えずに AKomeさんの例を試してみることです。
       ・・・・・・・・・・・・・・・・・・・・・

    例えば、表示モードで[/][−]キーが押された時に現れる「スラッシュ・メニュー」を止めるとかなど・・・

    そうすれば、なるほど!と分かってくるハズですよ。

    ただ考えるのは何もしないのと同じです。(^^ゞ

    p.p.s.

    老婆心ながら・・・(^^ゞ

    フレームワークというものは内容を理解する必要は無いのです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・

    それよりも、使い方を理解する事が重要なんです。
          ・・・・・・・・・・・・・・・・

    フレームワークの内容に関心が無くて、フレームワークの使い方に関心がある人はソフトウェア開発に適性があります。

    そういう人はフレームワークを利用して、短時間に[フォーム+イベント処理]アプリケーションを作っています。

    それに対して、DOS桐からのベテラン組の人達は、長年一括処理、つまり[フロー駆動型]を使っていたので、

    [フロー]=[コーディング]=プログラミングと認識しているようです。

    つまり、全部自分でプログラムを書かないと気が済まない人が多いように思います。

    勿論、その方が気分が良い人も居ることでしょう。

    しかし、それではいつまでたっても[イベント駆動]のプログラミングを効率よく構築出来ないと思いますよ。
                    ・・・・・・・・・・・・・・・・・・・・・・・

    既に出来上がっている車輪=フレームワークを利用する方が、車輪を再発明するよりも効率がよいのですから・・・

    <用語>

    車輪の再発明 出典: フリー百科事典『ウィキペディア(Wikipedia)』

     車輪の再発明(しゃりんのさいはつめい、英: reinventing the wheel)とは、
    「広く受け入れられ確立されている技術や解決法を(知らずに、または意図的に無視して)再び一から作ること」を指すための慣用句。
    誰でも直観的にその意味が分かるように、車輪という誰でも知っていて古くから広く使われている既存の技術を比喩の題材として使った慣用表現で、世界中で使われている。

    再利用すべき「車輪」

     IT業界において、再発明するのではなく再利用すべき「車輪」の例としては以下のようなものがある[1]。

    ・ライブラリやフレームワーク

      ドキュメントが整備されていることや日々メンテナンスされてバグが無くなっていることが必要。
     使用するライブラリやフレームワークが広く知られている場合には、
     開発経験をもった人をアサインすることで引き継ぎなどもスムーズに行くというメリットもある。



引用返信 [メール受信/OFF] 削除キー/
■15038 / inTopicNo.18)  Re[12]: 数値型項目で入力の際数値以外のキーを受け付けない
□投稿者/ ONnoji -(2025/07/10(Thu) 23:53:47)
    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

引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -