DOWN LOAD BBS

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

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

■626 / inTopicNo.1)  HDLVARprcWindowAppearVarSendの使用感
  
□投稿者/ ジェダイの桐 -(2025/07/31(Thu) 09:38:25)
    ONnojiさん

    おはようございます!

    初めて HDLVARprcWindowAppearVarSend を使いましたがとても便利でした。

     ・目的       : 年に一度、商品群の基準価格を見直し価格変更をする

     ・想定される不都合 : 物理的な表でユーザーに価格変更を依頼すると、更新漏れ・更新時期外の意図しない変更( 手が当たった等 )が起こり得そう

     ・解決方法     : 更新表フォームからNUllフォーム( モーダル )を開き、商品群A 商品群B 商品群C の基準価格入力フィールド( テキストボックス )を作って、入力値を更新表にリターンして基準価格を一括更新する

    意図した結果を導く方法が無いか考えた結果、HDLVARprcWindowAppearVarSend がうってつけでした(^^ゞ


    1つ悩んだ事は、更新表の 基準価格項目 を更新禁止 にするかどうかです。
    ちょっと桐になれたユーザーあれば、更新表フォームを開かずに表を直接開いて何かしないかな?と思いました。
    私は表での更新禁止が好きではないのですが、今回は更新禁止にしました。

    どう対応したかと言えば、

     ・更新表フォームの cmd基準価格設定ボタン をクリックして、 手続き実行 HDLVARprcWindowAppearVarSend を呼び出す。

     ・手続き定義開始 cmd基準価格設定ClickRETURN の最初に 項目属性変更2 変更, [基準価格], { , , , , , , 許可 } を行う。

     ・基準価格の一括変更を行う。

     ・項目属性変更2 変更, [基準価格], { , , , , , , 禁止 } をして、cmd基準価格設定ClickRETURN を終了する。

    と言う手順にしました。

    後は、ユーザーがどう感じるかですが、感想は来年の基準価格更新時に聞けると思います(^^ゞ


    便利にフレームワークを使わせて貰ってます!
引用返信 [メール受信/OFF] 削除キー/
■627 / inTopicNo.2)  Re[1]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/04(Mon) 13:31:38)
    ジェダイの桐さんへのお返事です。

    > 初めて HDLVARprcWindowAppearVarSend を使いましたがとても便利でした。
    >
    > ・目的       : 年に一度、商品群の基準価格を見直し価格変更をする
    > ・想定される不都合 : 物理的な表でユーザーに価格変更を依頼すると、更新漏れ・更新時期外の意図しない変更( 手が当たった等 )が起こり得そう
    > ・解決方法     : 更新表フォームからNUllフォーム( モーダル )を開き、商品群A 商品群B 商品群C の基準価格入力フィールド( テキストボックス )を作って、
    > 入力値を更新表にリターンして基準価格を一括更新する
    >
    > 意図した結果を導く方法が無いか考えた結果、HDLVARprcWindowAppearVarSend がうってつけでした(^^ゞ

    INF_Framework をご利用いただきありがとうございます。

    実際に使用した際のフィードバックをいただくと作者としては非常に嬉しいです。

    INF_Framework のドキュメントは次のwebページからリンクしていますので、ご参考にしてください。

     桐の釣魚大全のトップ > 仕様メモ集
     https://silicon7565.cloudfree.jp/INF_Framework/INF_Framework_Spec_Memo.htm

    > 1つ悩んだ事は、更新表の 基準価格項目 を更新禁止 にするかどうかです。
    > ちょっと桐になれたユーザーあれば、更新表フォームを開かずに表を直接開いて何かしないかな?と思いました。
    > 私は表での更新禁止が好きではないのですが、今回は更新禁止にしました。
    > 後は、ユーザーがどう感じるかですが、感想は来年の基準価格更新時に聞けると思います(^^ゞ

    プログラム開発はユーザの思わぬ挙動に注意する必要がありますね。

    しかし、心配し過ぎてもキリが有りませんから、ほどほどにして置くのが精神的に良いですね。

    もちろん、安全第一の方向にしてあれば問題ありませんね。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    p.s.

    実はジェダイの桐さんのご感想をお聞きしたい件がありました。

    ちょうどよいタイミングなので・・・(^^ゞ

    【桐質問掲示板】
    https://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=all&namber=15017&type=0&space=0&no=0

    Nomal 数値型項目で入力の際数値以外のキーを受.. /まさやん (25/07/09(Wed) 15:00) #15017
    ├Nomal Re[1]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 15:34) #15018
    │└Nomal Re[2]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/09(Wed) 16:57) #15019
    │ └Nomal Re[3]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 17:35) #15021
    │  └Nomal Re[4]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/09(Wed) 19:43) #15023
    │   └Nomal Re[5]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 20:47) #15026
    │    └Nomal Re[6]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/10(Thu) 09:53) #15028
    │     └Nomal Re[7]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/10(Thu) 11:37) #15031
    │      └Nomal Re[8]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/10(Thu) 11:54) #15032
    │       └Nomal Re[9]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/10(Thu) 15:32) #15033
    │        └Nomal Re[10]: 数値型項目で入力の際数値以外の.. /まさやん (25/07/10(Thu) 20:43) #15036
    │         └Nomal Re[11]: 数値型項目で入力の際数値以外の.. /ONnoji (25/07/10(Thu) 20:50) #15037
    │          └Nomal Re[12]: 数値型項目で入力の際数値以外の.. /ONnoji (25/07/10(Thu) 23:53) #15038

    内容は↑上のツリーの VK_Framework なのですが、

    その後いろいろと考慮して完成度を上げております。

    そこで、明日以降にサンプルを投稿しますので、ご意見・ご感想をよろしくお願いいたします。m(__)m

引用返信 [メール受信/OFF] 削除キー/
■628 / inTopicNo.3)  Re[2]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェダイの桐 -(2025/08/05(Tue) 15:38:38)
    ONnojiさん

    > 【桐質問掲示板】
    > https://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=all&namber=15017&type=0&space=0&no=0
    >
    > Nomal 数値型項目で入力の際数値以外のキーを受.. /まさやん (25/07/09(Wed) 15:00) #15017
    > ├Nomal Re[1]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 15:34) #15018
    > │└Nomal Re[2]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/09(Wed) 16:57) #15019
    > │ └Nomal Re[3]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 17:35) #15021
    > │  └Nomal Re[4]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/09(Wed) 19:43) #15023
    > │   └Nomal Re[5]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/09(Wed) 20:47) #15026
    > │    └Nomal Re[6]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/10(Thu) 09:53) #15028
    > │     └Nomal Re[7]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/10(Thu) 11:37) #15031
    > │      └Nomal Re[8]: 数値型項目で入力の際数値以外の .. /まさやん (25/07/10(Thu) 11:54) #15032
    > │       └Nomal Re[9]: 数値型項目で入力の際数値以外の .. /ONnoji (25/07/10(Thu) 15:32) #15033
    > │        └Nomal Re[10]: 数値型項目で入力の際数値以外の.. /まさやん (25/07/10(Thu) 20:43) #15036
    > │         └Nomal Re[11]: 数値型項目で入力の際数値以外の.. /ONnoji (25/07/10(Thu) 20:50) #15037
    > │          └Nomal Re[12]: 数値型項目で入力の際数値以外の.. /ONnoji (25/07/10(Thu) 23:53) #15038
    >
    > 内容は↑上のツリーの VK_Framework なのですが、
    >
    > その後いろいろと考慮して完成度を上げております。
    >
    > そこで、明日以降にサンプルを投稿しますので、ご意見・ご感想をよろしくお願いいたします。m(__)m
    >

    これなんですけど、まさやんさんの質問されていた時
    ONnojiさんが提示されていたサンプルプログラムをダウンロードして
    実際に試してみたんですよ。

    まさやんのやりたかった事が見事に実現されていて感動しました(^^ゞ
    VK_Frameworkは使いどころをキッチリ押さえたら、強力なツールになると思いました!

    サンプルの件分かりました(^^ゞ
    楽しみにしています。
引用返信 [メール受信/OFF] 削除キー/
■629 / inTopicNo.4)  Re[3]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/05(Tue) 22:03:03)
    2025/08/05(Tue) 22:05:44 編集(投稿者)

    ジェダイの桐さんへのお返事です

    >>その後いろいろと考慮して完成度を上げております。
    >>そこで、明日以降にサンプルを投稿しますので、ご意見・ご感想をよろしくお願いいたします。m(__)m
    >
    > これなんですけど、まさやんさんの質問されていた時
    > ONnojiさんが提示されていたサンプルプログラムをダウンロードして
    > 実際に試してみたんですよ。
    >
    > まさやんのやりたかった事が見事に実現されていて感動しました(^^ゞ
    > VK_Frameworkは使いどころをキッチリ押さえたら、強力なツールになると思いました!

    なるほど!そうでしたか、それならば、なお好都合です。

    添付ファイル test_NumInputFilter.zip があります。

    添付ファイルを解凍すると次の3つのファイルがあります。

     VK_数値のテキストボックス使用例.kex
     VK_数値のテキストボックス使用例.tbx
     VK_数値のテキストボックス使用例.wfx

    これはその後いろいろと考慮して完成度を上げたつもりの手続きです。

    是非そちらで試していただいて、ご意見・ご感想をよろしくお願いいたします。m(__)m

    p.s.

    ■VK_数値のテキストボックス使用例.wfx

     フォーム
     ├ ファミリ
     │ └ famModernUI
     ├ ワークスペース
     │ ├ INFtxtCommon
     │ └ INFcmdCommon
     ├ フォーム操作バー ← 桐10sで追加したオブジェクトなので全角カタカナです
     ├ フォームヘッダ部
     │ ├ lblFlatButtonBorder_1
     │ ├ EZWcmdズームイン
     │ ├ EZWcmdズームアウト
     │ ├ EZWtxtMagnification
     │ ├ INFcmdWhoAreYou
     │ ├ HDLVARcmdWhoAreYou
     │ └ ONEcmdUI変換
     ├ フォーム明細部
     │ ├ txt整数
     │ │ └ lbl整数
     │ ├ txt長整数
     │ │ └ lbl長整数
     │ ├ txt数値
     │ │ └ lbl数値
     │ ├ txt通貨
     │ │ └ lbl通貨
     │ └ lblFlatButtonBorder_2
     └ フォームフッタ部
       └ lblFlatButtonBorder_3

    ■手続きのネスト ※かっこで囲まれたものは VK_Framework の手続き

    txt整数::入力前

    └ prcNumInputKeySetON
      ├ ( VKprcEventKeyDownON )
      ├ ( VKprcKeyON )
      └ ( VKprcKeySet)

    txt整数::入力後

    └ prcNumInputKeySetOFF
      ├ ( VKprcEventKeyDownOFF )
      ├ ( VKprcKeyOFF )
      └ ( VKprcKeyClear )

    ■トレース出力

    【入力前イベントハンドラを実行/VK_Frameworkをセットする】

    ┌when 手続き"txt整数::入力前( )"を実行開始しました

    │┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>txt整数::入力前( )を実行開始しました
    ││
    ││┌when 手続き"prcNumInputKeySetON("txt整数")"を実行開始しました
    │││
    │││┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>prcNumInputKeySetON( )を実行開始しました
    ││││
    ││││ :&objectName : txt整数  &dataType : 整数  &source : [整数]
    ││││ :( #対応番号( &dataTypeList, &dataType ) <> 0 ) : 1
    ││││
    ││││┌when 手続き"VKprcEventKeyDownON( )"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"VKprcKeyON( )"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"VKprcKeySet("key",1,"項目訂正,訂正,行挿入","手続き実行 prcNumInputFilter( &VKmChr, &処理中止, &VKmRepeat, 0)")"を実行開始しました
    ││││└end
    ││││
    ││││ :手続き実行 VKprcKeySet( "key", 1, ・・・
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

    【キー:1 を押した】

    ┌when 手続き"フォーム::キーダウン(97,79,0,0)"を実行開始しました

    │┌when 手続き"VKprcEventKeyEval(97,79,0,0)"を実行開始しました
    ││
    ││┌when 手続き"prcNumInputFilter("1",1,0,0)"を実行開始しました
    │││
    │││┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>prcNumInputFilter( )を実行開始しました
    ││││
    ││││ :( #対応番号( &keyList, &key ) <> 0 ) : 1  &key : 1  &repeat : 0
    ││││ :&key : 1  &処理中止 : 0
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

    【キー:2 を押した】

    ┌when 手続き"フォーム::キーダウン(98,80,0,0)"を実行開始しました

    │┌when 手続き"VKprcEventKeyEval(98,80,0,0)"を実行開始しました
    ││
    ││┌when 手続き"prcNumInputFilter("2",1,0,0)"を実行開始しました
    │││
    │││┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>prcNumInputFilter( )を実行開始しました
    ││││
    ││││ :( #対応番号( &keyList, &key ) <> 0 ) : 1  &key : 2  &repeat : 0
    ││││ :&key : 2  &処理中止 : 0
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

    【キー:3 を押した】

    ┌when 手続き"フォーム::キーダウン(99,81,0,0)"を実行開始しました

    │┌when 手続き"VKprcEventKeyEval(99,81,0,0)"を実行開始しました
    ││
    ││┌when 手続き"prcNumInputFilter("3",1,0,0)"を実行開始しました
    │││
    │││┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>prcNumInputFilter( )を実行開始しました
    ││││
    ││││ :( #対応番号( &keyList, &key ) <> 0 ) : 1  &key : 3  &repeat : 0
    ││││ :&key : 3  &処理中止 : 0
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

    【キー:Enter を押した】

    ┌when 手続き"フォーム::キーダウン(13,284,0,0)"を実行開始しました

    │┌when 手続き"VKprcEventKeyEval(13,284,0,0)"を実行開始しました
    ││
    │└end

    └end


    【入力後イベントハンドラを実行/VK_Frameworkをクリア】

    ┌when 手続き"txt整数::入力後("123",1,0)"を実行開始しました

    │┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>txt整数::入力後( )を実行開始しました
    ││
    ││┌when 手続き"prcNumInputKeySetOFF( )"を実行開始しました
    │││
    │││┌when :VK_数値のテキストボックス使用例.wfx hdl= 2>prcNumInputKeySetOFF( )を実行開始しました
    ││││
    ││││┌when 手続き"VKprcEventKeyDownOFF( )"を実行開始しました
    │││││
    ││││└end
    ││││
    ││││┌when 手続き"VKprcKeyOFF( )"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"VKprcKeyClear("key","項目訂正,訂正,行挿入")"を実行開始しました
    ││││└end
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

引用返信 [メール受信/OFF] 削除キー/
■632 / inTopicNo.5)  Re[4]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェダイの桐 -(2025/08/06(Wed) 15:58:39)
    ONnojiさん

    こんにちは!

    -----------------------------------------------------------------------------------

    触ってみた感想

     整数 長整数

      数字のみ入力可能( 文字列( ドット含む )は入力不可 )

     数値 通貨

      数字のみ入力可能( 文字列は入力不可。但し .( ドット )入力可 )


    -----------------------------------------------------------------------------------

    やってみた事

     1、VK_数値のテキストボックス使用例.wfx をトレース出力 プログラム内容 を見ずに
       兎に角使ってみました。
       文字列は入力出来ない事を確認しました。

     2、次にプログラムを見てみました。
       手続き定義開始 prcNumInputKeySetON( 文字列 &objectName )の引数は何のために有るのかな?
       と思ったんですが、トレース出力を使用した時に理解しました。
       どのテキストボックスで発生したプルグラムかをトレース出力で確認するのに便利な引数ですね!

    -----------------------------------------------------------------------------------

    疑問

     1、手続き実行 VKprcKeySet( "key", 1, "項目訂正,訂正,行挿入", "手続き実行 prcNumInputFilter( &VKmChr, &処理中止, &VKmRepeat, " + #str( &decimal ) + ")" )
       ここで&処理中止が引数になっています。
       手続き定義開始 prcNumInputFilter( 文字列 &key, 参照 長整数 &処理中止, 整数 &repeat, 整数 &decimal )
       &処理中止が参照引数になっていました。

       どのプロシージャが参照するのかな?と思いましたが、多分フレームワーク側で何かしているんでしょうね(^^ゞ

     2、見事に開発者の目論見通り、入力制限がかかる訳ですが、ユーザーは直感的に制限(今回で言えば、文字列入力制限)に気づくものなのかな?
       と感じました。( 確かオリジナルのスレッドでも、ONnojiさんがやり過ぎは良くないと言われていた様な記憶があります )

    -----------------------------------------------------------------------------------  

    これだけ大掛かりな制限を あの少ないコードで実現しているのでフレームワークの威力は凄いと感じています(^^ゞ
    使ってみて違和感は有りませんでした。

    今回の使用方法は入力制限でしが、応用すれば Ctrl + 任意のアルファベット で実行したいプロシージャを実行すると言うような事も出来るんでしょうね(^^ゞ



引用返信 [メール受信/OFF] 削除キー/
■633 / inTopicNo.6)  Re[5]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/06(Wed) 19:37:35)
    2025/08/07(Thu) 00:24:46 編集(投稿者)

    ジェダイの桐さんへのお返事です

    > 触ってみた感想
    >  整数 長整数
    >   数字のみ入力可能( 文字列( ドット含む )は入力不可 )
    >
    >  数値 通貨
    >   数字のみ入力可能( 文字列は入力不可。但し .( ドット )入力可 )
    >
    > やってみた事
    >  1、VK_数値のテキストボックス使用例.wfx をトレース出力 プログラム内容 を見ずに
    >    兎に角使ってみました。
    >    文字列は入力出来ない事を確認しました。

    ご確認いただきましてありがとうございます。m(__)m

    >  2、次にプログラムを見てみました。
    >    手続き定義開始 prcNumInputKeySetON( 文字列 &objectName )の引数は何のために有るのかな?
    >    と思ったんですが、トレース出力を使用した時に理解しました。
    >    どのテキストボックスで発生したプルグラムかをトレース出力で確認するのに便利な引数ですね!

    確かにどのテキストオブジェクトで発生しているかが判るのですが・・

    実際には、テキストオブジェクトのソースを調べることが第一の目的でした。

    なぜならば、うっかりソースが文字列型だったりしたら、スルーしなければなりませんよね。

    ちなみに、サンプルでは &objectName を引数で渡した意味がありませんので、次のように訂正してください。m(__)m

     × オブジェクト操作 &this{ &dataType = データ型, &source = ソース }
     ○ オブジェクト操作 &objectName{ &dataType = データ型, &source = ソース }

    でした。

       手続き定義開始 prcNumInputKeySetON( 文字列 &objectName )
        :

        変数宣言 自動,文字列{ &dataTypeList = "整数,長整数,数値,通貨" }

        オブジェクト操作 &objectName{ &dataType = データ型, &source = ソース }

        条件 ( &traceON ) トレース出力 _&objectName, "  ", _&dataType, "  ", _&source

        条件 ( &traceON ) トレース出力 _( #対応番号( &dataTypeList, &dataType ) <> 0 )
        if ( #対応番号( &dataTypeList, &dataType ) <> 0 )

         :

        end

       手続き定義終了

    > 疑問
    >
    >  1、手続き実行 VKprcKeySet( "key", 1, "項目訂正,訂正,行挿入", "手続き実行 prcNumInputFilter( &VKmChr, &処理中止, &VKmRepeat, " + #str( &decimal ) + ")" )
    >    ここで&処理中止が引数になっています。
    >    手続き定義開始 prcNumInputFilter( 文字列 &key, 参照 長整数 &処理中止, 整数 &repeat, 整数 &decimal )
    >    &処理中止が参照引数になっていました。
    >    どのプロシージャが参照するのかな?と思いましたが、多分フレームワーク側で何かしているんでしょうね(^^ゞ

     簡単にすると

      手続き実行 VKprcKeySet( "key", 1, "実行許可モードリスト", "実行するコマンド" )
                      ↑
     です。              ↑
                  処理中止のデフォルト値

     VKprcKeySet では、処理中止のデフォルト値を指定しているのですが、prcNumInputFilter の参照引数でデフォルトを変更できます。

     実は、prcNumInputFilter は、[フォーム::キーダウン]イベントハンドラから呼び出しているのです。

     なので、prcNumInputFilter では、[フォーム::キーダウン]イベントハンドラの引数:&処理中止 を参照渡が出来るワケです。

     これによって、数字と正負記号のキーの場合に限り、 &処理中止の値は 0ぜロにしているのです。

     つまり、数字と正負記号のキーの場合に限りキー入力を有効にしているのです。

     ちなみに、拙作:Spec_Memo_VK.txtでは、この説明が抜けていますので、
          ・・・・・・・・・・・・・・・・・・・・・・・・・

     旧拙作:[桐のイベント道場]の記事をベースにした AKomeさんのwebページを参照してください。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

       補足1:&処理中止|キーダウンイベントを簡単に|あめの桐のプログラミング入門
       https://akome409102.cloudfree.jp/Kiri/INF33MkII_VK.html#81

    >  2、見事に開発者の目論見通り、入力制限がかかる訳ですが、ユーザーは直感的に制限(今回で言えば、文字列入力制限)に気づくものなのかな?
    >    と感じました。( 確かオリジナルのスレッドでも、ONnojiさんがやり過ぎは良くないと言われていた様な記憶があります )

    確かに私の第一感・直感では、使用できるキーを数字と正負記号に制限するのは、解決策の本命には思えませんでした。
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ちなみに、今回の prcNumInputFilter は、Ctrl + V や Ctrl + X や Tab や Enter のような制御キーに対しては透過なので単純にマシなだけなんですよ。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    つまり、問題解決の本質部分は、[キーダウン]イベントハンドラにあるのではなくて、[入力後]イベントハンドラにあると確信しています。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    > これだけ大掛かりな制限を あの少ないコードで実現しているのでフレームワークの威力は凄いと感じています(^^ゞ
    > 使ってみて違和感は有りませんでした。
    > 今回の使用方法は入力制限でしが、応用すれば Ctrl + 任意のアルファベット で実行したいプロシージャを実行すると言うような事も出来るんでしょうね(^^ゞ

    使い方次第でいろいろと出来ますよ。アハハハha


    p.s.

    > つまり、問題解決の本質部分は、[キーダウン]イベントハンドラにあるのではなくて、[入力後]イベントハンドラにあると確信しています。

    まったくPCのリテラシーがない人が桐を操作することもありますよね。

    そういう人は開発者が予想もしていな値を入力をするものです。

    そして、エラーメッセージの意味が理解できずに立ち往生するのが普通のことです。

    単に入力した値を削除すればイイだけなのに、それすら気が付かないでPCをシャットダウンしてしまったり・・・。

    このようなトラブルは普通にありますよね。

    私はこの件に関する解決の本質は[入力後]イベントハンドラの作り方だと思っています。

    ということで、明日以降に新しいサンプルを用意しますので、それを見てください。m(__)m

引用返信 [メール受信/OFF] 削除キー/
■634 / inTopicNo.7)  Re[6]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/08(Fri) 11:49:36)
    2025/08/08(Fri) 12:07:33 編集(投稿者)

    ジェダイの桐さんへ

    添付ファイル test_NumInputControl.zip があります。

    添付ファイルを解凍すると次の3つのファイルがあります。

     test_数値のテキストボックス使用例.tbx
     test_数値のテキストボックス使用例.kex
     test_数値のテキストボックス使用例.wfx

    これはその後いろいろと考慮して完成度を上げたつもりの手続きです。

    是非そちらで試していただいて、ご意見・ご感想をよろしくお願いいたします。m(__)m

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    前回の

     VK_数値のテキストボックス使用例.wfx

    これの項目名[長整数]のデータ型が"整数"になっていました。

    お手数ですが、項目名[長整数]のデータ型を"長整数"に修正してください。(^^ゞ

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    手続き実行 VKprcKeySet( "key", 1, "項目訂正,訂正,行挿入", "手続き実行 prcNumInputFilter( &VKmChr, &処理中止, &VKmRepeat, " + #str( &decimal ) + ")" )

    変数:&VKmRepeat は、VK_Framework の局所変数です。

    キーを長押しすると、同じキーがリピート(繰り返し)されますが、その状態の場合に1(イチ)で、それ以外では0(ゼロ)です。

     拙作:Spec_Memo_VK.txt

     ■リピートの判定 &VKmRepeat/整数

     イベントハンドラが実行されて、イベントに対するスイッチ変数の値が真( 1:イチ )の時、
     &VKmRepeat/整数 にはキーを押し続けている(リピート状態)かの否かの情報が格納されます。

     リピート状態の場合には、真( 1:イチ )が格納されます。
     リピート状態ではない場合には、偽( 0:ゼロ )が格納されます。

     ※&VKmOnKey の値が偽( 0:ゼロ、または未定義値 )の時でもリピートの判定は格納されます。

     ※一般手続き:VKprcEventKeyDownON( ) / VKprcEventKeyDownOFF( ) を実行すると未定義値になります。
     ※一般手続き:VKprcEventSystemKeyDownON( ) / VKprcEventSystemKeyDownOFF( ) を実行すると未定義値になります。

     AKomeさんのwebページはこちら
                  ↓
       リピートの判定 &VKmRepeat/整数|キーダウンイベントを簡単に|あめの桐のプログラミング入門
       https://akome409102.cloudfree.jp/Kiri/INF33MkII_VK.html#55

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ・テキストボックスの"ソース"が整数型と長整数型の場合には

     ⇒ 範囲を超える値を入力するとメッセージが表示されます

     ⇒ ペースト( Ctrl + V )で小数点を含む値を入力するとメッセージが表示されます

    ※コピー( Ctrl + C )・ペースト( Ctrl + V )のような制御文字はフィルター(制限)されていません。←これは重要です。

    p.s.

    >>つまり、問題解決の本質部分は、[キーダウン]イベントハンドラにあるのではなくて、[入力後]イベントハンドラにあると確信しています。
    >
    > まったくPCのリテラシーがない人が桐を操作することもありますよね。
    >
    > そういう人は開発者が予想もしていな値を入力をするものです。
    >
    > そして、エラーメッセージの意味が理解できずに立ち往生するのが普通のことです。
    >
    > 単に入力した値を削除すればイイだけなのに、それすら気が付かないでPCをシャットダウンしてしまったり・・・。
    >
    > このようなトラブルは普通にありますよね。
    >
    > 私はこの件に関する解決の本質は[入力後]イベントハンドラの作り方だと思っています。

    ということです。(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■635 / inTopicNo.8)  Re[7]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェダイの桐 -(2025/08/08(Fri) 17:30:01)
    ONnojiさん


    こんにちは!

    -----------------------------------------------------------------------------------

    感想

     ・整数に範囲外入力をした時

       VK_数値のテキストボックス使用例.wfx
        → KD1008:値が範囲外です

       test_数値のテキストボックス使用例.wfx
        → このテキストのソースは[整数型]なので、
          -32768 〜 32767 の範囲外の整数は入力できません
          ・値を削除する
            または
          ・範囲内の値を入力してください

       桐側のメッセージより、prcNumInputControlのメッセージの方が具体的で分かりやすい


     ・小数点を含む数値を Ctrl + C して、整数 若しくは 長整数 へ Ctrl + V した時

       VK_数値のテキストボックス使用例.wfx
        → 小数点以下を アナウンス無しで削除

       test_数値のテキストボックス使用例.wfx
        → このテキストのソースは[整数]なので、小数点以下の数値は切り捨てられます
          ⇒ 入力値( 例えば 1.1 )

      prcNumInputControlのメッセージが有る事で、ユーザの認識がエラー時に直ぐ修正される


     ・Ctrl + V Ctrl + C Ctrl + X Ctrl + Z を使用したが、制限がかからない( 文字列なのに制限がスルーされる )

       → ユーザは意図した操作が出来る為 ストレスがかからない


    -----------------------------------------------------------------------------------

    疑問

     1、整数 長整数 数値 通貨 で文字列が入力出来ない事を知らないユーザが 初回どう感じるのだろう?と思った。
       但し、テキストボックスの左隣にデータ型ラベルがあるので、余程 感の悪いユーザで無い限り分かるとは思いました。

       純粋に 初回ユーザ の感じ方が気になりました(^^ゞ( 私は、制限がある事を知った上で操作しているので便利だという感情しかありません )


     2、prcNumInputFilter で リピート制限をかけている意図は何なのかな?と思いました。

        試しに
         * if ( .not &repeat )  /* コメントアウト */

            if ( #対応番号( &keyList, &key ) <> 0 )
              &処理中止 = 0
            end

         * end          /* コメントアウト */

        コメントアウトしてみたのですが、リピート入力出来ても不具合がある様に感じませんでした。( 不具合に気づけてないだけかもしれませんが・・・ )


     3、&keyList = "0,1,2,3,4,5,6,7,8,9,+,-" 及び 数値 若しくは 通貨 の時 .( ドット )を追加
       &keyList の入力時は 項目訂正,訂正,行挿入 が実行可能になるはずです。

       なのにどうして、Ctrl + V Ctrl + C Ctrl + X Ctrl + Z は制限スルーになるんだろう??と思いました。

       > ※コピー( Ctrl + C )・ペースト( Ctrl + V )のような制御文字はフィルター(制限)されていません。←これは重要です。
       この文章を実感しました。本当に重要ですね(^^ゞ


    -----------------------------------------------------------------------------------


    VK_数値のテキストボックス使用例.wfx でも便利でしたが、ユーザにとっては
    test_数値のテキストボックス使用例.wfx の方が 間違いなく親切です。

    特に、整数 長整数 へ 小数点を含む値を Ctrl + V した時のメッセージは絶対ユーザは助かると思います。
    あのメッセージがないと、ユーザは小数点を含む値が入力出来てると勘違いしてしまう可能性が排除出来ないと思いました(^^ゞ

    自分自身で VK_framework を使用したいと思った時、このスレッドの経験が役に立つ事が間違いありません。


    [入力後]イベントの仕掛けが、ユーザが安心してアプリを使用できる気持ちにする鍵になりますね(^^ゞ



引用返信 [メール受信/OFF] 削除キー/
■636 / inTopicNo.9)  Re[8]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/08(Fri) 22:52:29)
    2025/08/08(Fri) 23:50:31 編集(投稿者)

    ジェダイの桐さんへのお返事です。

    > 感想
    >  ・整数に範囲外入力をした時
    >    VK_数値のテキストボックス使用例.wfx
    >     → KD1008:値が範囲外です
    >
    >    test_数値のテキストボックス使用例.wfx
    >     → このテキストのソースは[整数型]なので、
    >       -32768 〜 32767 の範囲外の整数は入力できません
    >       ・値を削除する
    >         または
    >       ・範囲内の値を入力してください
    >
    >    桐側のメッセージより、prcNumInputControlのメッセージの方が具体的で分かりやすい
    >
    >  ・小数点を含む数値を Ctrl + C して、整数 若しくは 長整数 へ Ctrl + V した時
    >    VK_数値のテキストボックス使用例.wfx
    >     → 小数点以下を アナウンス無しで削除
    >
    >    test_数値のテキストボックス使用例.wfx
    >     → このテキストのソースは[整数]なので、小数点以下の数値は切り捨てられます
    >       ⇒ 入力値( 例えば 1.1 )
    >
    >   prcNumInputControlのメッセージが有る事で、ユーザの認識がエラー時に直ぐ修正される
    >
    >  ・Ctrl + V Ctrl + C Ctrl + X Ctrl + Z を使用したが、制限がかからない( 文字列なのに制限がスルーされる )
    >    → ユーザは意図した操作が出来る為 ストレスがかからない

    ご感想のフィードバックありがとうございます。m(__)m

    > 疑問
    >
    >  1、整数 長整数 数値 通貨 で文字列が入力出来ない事を知らないユーザが 初回どう感じるのだろう?と思った。
    >    但し、テキストボックスの左隣にデータ型ラベルがあるので、余程 感の悪いユーザで無い限り分かるとは思いました。
    >
    >    純粋に 初回ユーザ の感じ方が気になりました(^^ゞ( 私は、制限がある事を知った上で操作しているので便利だという感情しかありません )

    [テキストボックス]に対応する[ラベルオブジェクト]のキャプションを見れば、数字キーを打つのだという事は自明ですね。

    つまり、自然と数字を打つのだと判るはずです。

    問題なのは[誤った入力に対するフィードバック]なのです。

    「KD1008:値が範囲外です」といったように、何が間違えなのかが分らないフィードバックは意味が有りません。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    もちろん、コンピュータに詳しい人ならば、「KD1008:値が範囲外です」という文言でエラーの理由が判るハズです。

    しかし、[フォーム+イベント処理]の利用者はコンピュータに詳しい人とは限りません。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だから、[誤った入力に対するフィードバック]が大切なのです。

    ジェダイの桐さんは、「誰のためのデザイン」という書籍をお読みになっていますね。

    今回の件は、ユーザインタフェースの基本そのものだと思いますよ。(^^ゞ

    残念ながら、「KD1008:値が範囲外です」は間違えではありませんが、開発者以外には伝わらない表現なのです。
                                    ・・・・・・・・・・・・・・・・・・

    桐に限りませんが、エラーメッセージの多くが開発者の目線のメッセージなので、一般人には理解できないのです。
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >  2、prcNumInputFilter で リピート制限をかけている意図は何なのかな?と思いました。
    >     試しに
    >     コメントアウトしてみたのですが、リピート入力出来ても不具合がある様に感じませんでした。( 不具合に気づけてないだけかもしれませんが・・・ )

    詳しく探求していただいてありがとうございます。m(__)m

    キーのリピートに関しては、場面場面の応じて取捨選択するべきだと思いますよ。

    すなわち、数値を入力する場合には、[キーのリピートを許可しない]が本筋だと思います。

    ちなみに、手持ちの「電卓」の挙動を確認しましたが、[キーのリピートを許可しない]でした。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    PC操作での入力は、[キーのリピートを許可する]がデフォルトですので、ユーザの感覚がそれに慣れているだけだと思いますよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >  3、&keyList = "0,1,2,3,4,5,6,7,8,9,+,-" 及び 数値 若しくは 通貨 の時 .( ドット )を追加
    >    &keyList の入力時は 項目訂正,訂正,行挿入 が実行可能になるはずです。
    >
    >    なのにどうして、Ctrl + V Ctrl + C Ctrl + X Ctrl + Z は制限スルーになるんだろう??と思いました。
    >    > ※コピー( Ctrl + C )・ペースト( Ctrl + V )のような制御文字はフィルター(制限)されていません。←これは重要です。
    >    この文章を実感しました。本当に重要ですね(^^ゞ

    VK_Framework では通常はキートップの文字を指定しますが、

    例外として、"key"という指定があります。

    コチラ
     ↓
    桐の釣魚大全のトップ > 仕様メモ集
    https://silicon7565.cloudfree.jp/INF_Framework/1st_Spec_Memo_VK.txt

     ■キーの名前:key に関して

     キーの名前には、基本的にキートップの文字を指定しますが、いくつかの例外もあります。

     ここで説明する "key" という名前は、制御キー以外のすべての文字キーを対象にします。

     (例1) 手続き実行 VKprcKeySet( "key", 1, "0", "確認 &VKmChr" )

     (例2) 手続き実行 VKprcKeySet( "key", 1, "0", "prc任意のプロシージャ( &VKmChr )" )

     キーの名前に "key" を指定した場合には、以下のキーに反応してコマンドを実行します。

     <普通にキーを押した場合>

     次のキーを押すとVK の局所変数:&VKmChr には次の値が代入されます。

     [英字]   キー ・・・ "A" to "Z"
     [記号]   キー ・・・ "- ^ \ @ [ ; : ] . /"
     [コンマ]   キー ・・・ "comma"
     [バックスラッシュ]キー ・・・ "backslash"

     <シフト+キーを押した場合>

     次のキーを押すとVK の局所変数:&VKmChr には次の値が代入されます。

     [Shift]+[1]・・・ !
     [Shift]+[2]・・・ "" ← ※2重引用符が二つ返ります
     [Shift]+[3]・・・ #
     [Shift]+[4]・・・ $
     [Shift]+[5]・・・ %
     [Shift]+[6]・・・ &

     [Shift]+[7]・・・ '
     [Shift]+[8]・・・ (
     [Shift]+[9]・・・ )
     [Shift]+[-]・・・ =
     [Shift]+[^]・・・ ~
     [Shift]+[\]・・・ |

     [Shift]+[@]・・・ `
     [Shift]+[[]・・・ {
     [Shift]+[;]・・・ +
     [Shift]+[:]・・・ *
     [Shift]+[[]・・・ }

     [Shift]+[,]・・・ <
     [Shift]+[.]・・・ >
     [Shift]+[/]・・・ ?
     [Shift]+
     [バックスラッシュ]・・・ _

     <注意>

     次のキーを押すと、VK の局所変数:&VKmChr には次の値が代入されます。

     ・[コンマ]キー    ・・・ "comma"
     ・[バックスラッシュ]キー ・・・ "backslash"
     ・[shif]+[2]キー ・・・ "" ← ※2重引用符が二つ返ります


    > VK_数値のテキストボックス使用例.wfx でも便利でしたが、ユーザにとっては
    > test_数値のテキストボックス使用例.wfx の方が 間違いなく親切です。
    >
    > 特に、整数 長整数 へ 小数点を含む値を Ctrl + V した時のメッセージは絶対ユーザは助かると思います。
    > あのメッセージがないと、ユーザは小数点を含む値が入力出来てると勘違いしてしまう可能性が排除出来ないと思いました(^^ゞ

    ご明察です。(^^v

    桐やエクセルを含めて、世の中のすべてのプログラムのエラーメッセージは、開発者へのフィードバックのためのメッセージなのです。
               ・・・・・・・・・・・・・・・・・・・・・・・・↑↑↑・・・・・・・・・・・・・・・・・・・・・・

    だって、そうでしょ。(^^ゞ

    だから、私はエラーメッセージをエンドユーザ向けに修正(翻案)する必要があると確信しています。v(^^)v
          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    > 自分自身で VK_framework を使用したいと思った時、このスレッドの経験が役に立つ事が間違いありません。
    > [入力後]イベントの仕掛けが、ユーザが安心してアプリを使用できる気持ちにする鍵になりますね(^^ゞ

    お忙しいなかの投稿ありがとうございます。m(__)m

    地球が温暖化して毎日が猛暑ですが、ジェダイの桐さんにはお体をご自愛くださいませ。

    明日( 2025/08/09 )は、立秋です。(^^ゞ

    p.s.

    以前に[ソフトウェアは柔らかな機械]だと説明しましたね。(^^ゞ

    同じ[柔らかな機械]だとしても、機械のメーカや、機械の設計者によって様々ですよね。
                    ・・・・・・・・・・・・・・・・・・・・・・

    だから、分かり難い点が有っても気にしない事ですよ。(^^ok


引用返信 [メール受信/OFF] 削除キー/
■637 / inTopicNo.10)  Re[9]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/09(Sat) 13:52:23)
    2025/08/09(Sat) 16:56:55 編集(投稿者)

    >>つまり、問題解決の本質部分は、[キーダウン]イベントハンドラにあるのではなくて、[入力後]イベントハンドラにあると確信しています。
    >
    > まったくPCのリテラシーがない人が桐を操作することもありますよね。
    >
    > そういう人は開発者が予想もしていな値を入力をするものです。
    >
    > そして、エラーメッセージの意味が理解できずに立ち往生するのが普通のことです。
    >
    > 単に入力した値を削除すればイイだけなのに、それすら気が付かないでPCをシャットダウンしてしまったり・・・。
    >
    > このようなトラブルは普通にありますよね。
    >
    > 私はこの件に関する解決の本質は[入力後]イベントハンドラの作り方だと思っています。

    結論としては、VK_Framework は必要ないです。

    なぜならば、[入力後]イベントハンドラが呼び出す prcNumAccept( ) ですべて処理できるからです。

    結局、先回りして数字と正負記号以外の文字キーをブロックしても、ほとんど無意味という事なんです。
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >>つまり、問題解決の本質部分は、[キーダウン]イベントハンドラにあるのではなくて、[入力後]イベントハンドラにあると確信しています。

    ということで、[入力後]イベントハンドラの工夫次第ということで解決になります。ガッハハハha (^^♪


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

    ■ test_数値のイベントハンドラ.kex

    (注意)かっこで囲まれた手続き名は INF_Framework の手続きです。

    名札 メイン
    └ ( INF_Framework の手続き群 )

    txt数値::入力後
    └ prcNumAccept

    txt整数::入力後
    └ prcNumAccept

    txt長整数::入力後
    └ prcNumAccept

    txt通貨::入力後
    └ prcNumAccept

    txt数値::入力後
    └ prcNumAccept

    INFprcStartup
    └ ( INFprcUTLStartup )

    prcNumAccept

    手続き定義開始 prcNumAccept(文字列 &objectName, 参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
     変数宣言 自動,文字列{ &icon, &title = "prcNumAccept( )", &msg }
     変数宣言 自動,文字列{ &string }
     変数宣言 自動,文字列{ &dataType }
     変数宣言 自動,文字列{ &source }
     変数宣言 自動,文字列{ &dataTypeList = "整数,長整数,数値,通貨,実数" }
     変数宣言 自動,数値 { &num }
     変数宣言 自動,数値 { &mod }
     変数宣言 自動,整数 { &isError = 0 }

     ** 2025.08.09 prcNumInputControl( ) を流用して VK_Framework に関する部分をコメントアウトした

     変数宣言 自動,文字列{ &traceMsg = #cond( #変数( "INFmTraceFormPathAdd" ), &INFmMyWfmPath ) + &INFmMyWfmName + " hdl=" + #last( " " + #str( &hwindow ), 2 ) + ">" + &title }
     変数宣言 自動,整数 { &traceON = #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "ALL" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "INF" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "HDL" ) }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &traceMsg + "を実行開始しました"

     オブジェクト操作 &objectName{ &dataType = データ型, &source = ソース }
     条件 ( &traceON ) トレース出力 _&objectName, "  ", _&dataType, "  ", _&source

     条件 ( &traceON ) トレース出力 _( #対応番号( &dataTypeList, &dataType ) <> 0 )
    ┌if ( #対応番号( &dataTypeList, &dataType ) <> 0 )

    │ &string = &編集文字列
    │ オブジェクト操作 &this{ &dataType = データ型, &source = ソース }

    │ 条件 ( &traceON ) トレース出力 _&string
    │ 条件 ( &traceON ) トレース出力 _&dataType, "  ", _&source

    │ &string = #str( #num( &string ) )
    │ 条件 ( &traceON ) トレース出力 _#str( #num( &string ) )

    │ &num = #未定義値変換( #num( &string ), 0 )
    │ &mod = #mod( &num, 1 )
    │ 条件 ( &traceON ) トレース出力 _&num
    │ 条件 ( &traceON ) トレース出力 _&mod

    │┌if ( &dataType = "整数" .or &dataType = "長整数" )
    ││
    ││ 条件 ( &traceON ) トレース出力 _( &mod <> 0 )
    ││┌if ( &mod <> 0 )
    │││
    │││ &msg = "このテキストのソースは[" + &dataType + "]なので、小数点以下の数値は切り捨てられます"
    │││ &msg = &msg + "\n\n⇒ " + &string
    │││ &icon = "!"
    │││ 手続き実行 INFprcMsgPause( &icon, &title, &msg )
    │││ &isError = 1
    ││└end
    ││
    ││ 条件 ( &traceON ) トレース出力 _( ( &dataType = "整数" .and ( &num < -32768 .or &num > 32767 ) ) .or ( &dataType = "長整数" .and ( &num < -2147483648 .or &num > 2147483647 ) ) )
    ││┌if ( ( &dataType = "整数" .and ( &num < -32768 .or &num > 32767 ) ) .or ( &dataType = "長整数" .and ( &num < -2147483648 .or &num > 2147483647 ) ) )
    │││
    │││ メソッド呼び出し &this.編集選択位置設定( 1 ,-1 )
    │││ 条件 ( &traceON ) トレース出力 "メソッド呼び出し &this.編集選択位置設定( 1 ,-1 )"
    │││
    │││ &msg =      "このテキストのソースは[" + &dataType + "型]なので、"
    │││ 条件 ( &dataType = "整数"  ) &msg = &msg + "\n\n-32768 〜 32767 の範囲外の整数は入力できません"
    │││ 条件 ( &dataType = "長整数" ) &msg = &msg + "\n\n-2147483648 〜 2147483647 の範囲外の整数は入力できません""
    │││ &msg = &msg + "\n\n⇒ " + &string
    │││ **&msg = &msg + "\n\nお手数ですが"
    │││ &msg = &msg + "\n\n・値を削除する"
    │││ &msg = &msg + "\n  または"
    │││ &msg = &msg + "\n・範囲内の値を入力してください"
    │││ &icon   = "e"
    │││ 手続き実行 INFprcMsgPause( &icon, &title, &msg )
    │││
    │││ &isError = 1
    │││ &入力継続 = 1
    │││ 条件 ( &traceON ) トレース出力 _&isError
    │││ 条件 ( &traceON ) トレース出力 _&入力継続
    ││└end
    │└end

    │ &編集文字列 = &string
    │ 条件 ( &traceON ) トレース出力 _&編集文字列

    │ /* 2025.08.09 prcNumInputControl( ) を流用して VK_Framework に関する部分をコメントアウトした */
    │ **条件 ( &traceON ) トレース出力 _( .not &isError )
    │ **if ( .not &isError )
    │ **
    │ ** 手続き実行 prcNumInputKeySetOFF( )
    │ **end
    └end

     条件 ( &traceON ) トレース出力 &traceMsg + "を実行終了しました"
    手続き定義終了

引用返信 [メール受信/OFF] 削除キー/
■638 / inTopicNo.11)  Re[10]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/09(Sat) 19:17:47)
    実行に障害はありませんが、訂正がありました。

    prcNumInputControl

    │ オブジェクト操作 &this{ &dataType = データ型, &source = ソース } ←←← 不要です。削除してください。

    prcNumAccept

    │ オブジェクト操作 &this{ &dataType = データ型, &source = ソース } ←←← 不要です。削除してください。

    老眼のせいかねぇ〜。アハハハハ。

     ◇ ◇ ◇ ◇

    【test_数値のテキストボックス使用例.kex】

    手続き定義開始 prcNumInputControl(文字列 &objectName, 参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
     変数宣言 自動,文字列{ &icon, &title = "prcNumInputControl( )", &msg }
     変数宣言 自動,文字列{ &string }
     変数宣言 自動,文字列{ &dataType }
     変数宣言 自動,文字列{ &source }
     変数宣言 自動,文字列{ &dataTypeList = "整数,長整数,数値,通貨,実数" }
     変数宣言 自動,数値 { &num }
     変数宣言 自動,数値 { &mod }
     変数宣言 自動,整数 { &isError = 0 }

     変数宣言 自動,文字列{ &traceMsg = #cond( #変数( "INFmTraceFormPathAdd" ), &INFmMyWfmPath ) + &INFmMyWfmName + " hdl=" + #last( " " + #str( &hwindow ), 2 ) + ">" + &title }
     変数宣言 自動,整数 { &traceON = #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "ALL" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "INF" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "HDL" ) }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &traceMsg + "を実行開始しました"

     オブジェクト操作 &this{ &dataType = データ型, &source = ソース }
     条件 ( &traceON ) トレース出力 _&objectName, "  ", _&dataType, "  ", _&source

     条件 ( &traceON ) トレース出力 _( #対応番号( &dataTypeList, &dataType ) <> 0 )
    ┌if ( #対応番号( &dataTypeList, &dataType ) <> 0 )

    │ &string = &編集文字列
    │ オブジェクト操作 &this{ &dataType = データ型, &source = ソース } ←←← 不要です。削除してください。



    【test_数値のイベントハンドラ.kex】

    手続き定義開始 prcNumAccept(文字列 &objectName, 参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
     変数宣言 自動,文字列{ &icon, &title = "prcNumAccept( )", &msg }
     変数宣言 自動,文字列{ &string }
     変数宣言 自動,文字列{ &dataType }
     変数宣言 自動,文字列{ &source }
     変数宣言 自動,文字列{ &dataTypeList = "整数,長整数,数値,通貨,実数" }
     変数宣言 自動,数値 { &num }
     変数宣言 自動,数値 { &mod }
     変数宣言 自動,整数 { &isError = 0 }

     ** 2025.08.09 prcNumInputControl( ) を流用して VK_Framework に関する部分をコメントアウトした

     変数宣言 自動,文字列{ &traceMsg = #cond( #変数( "INFmTraceFormPathAdd" ), &INFmMyWfmPath ) + &INFmMyWfmName + " hdl=" + #last( " " + #str( &hwindow ), 2 ) + ">" + &title }
     変数宣言 自動,整数 { &traceON = #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "ALL" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "INF" ) .or #対応番号( #uc2( #変数( "INFmTraceModuleNameList" ) ), "HDL" ) }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &traceMsg + "を実行開始しました"

     オブジェクト操作 &objectName{ &dataType = データ型, &source = ソース }
     条件 ( &traceON ) トレース出力 _&objectName, "  ", _&dataType, "  ", _&source

     条件 ( &traceON ) トレース出力 _( #対応番号( &dataTypeList, &dataType ) <> 0 )
    ┌if ( #対応番号( &dataTypeList, &dataType ) <> 0 )

    │ &string = &編集文字列
    │ オブジェクト操作 &this{ &dataType = データ型, &source = ソース } ←←← 不要です。削除してください。





引用返信 [メール受信/OFF] 削除キー/
■639 / inTopicNo.12)  Re[11]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェタイの桐 -(2025/08/09(Sat) 20:31:42)
    ONnojiさん


    こんばんは!

    私事なのですが、珍しく長期連休であります。
    よってプログラム体験が8/18となりますm(_ _)m

    体験後また感想をコメントさせてもらいます(^-^)
引用返信 [メール受信/OFF] 削除キー/
■640 / inTopicNo.13)  Re[12]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/10(Sun) 12:07:12)
    2025/08/11(Mon) 01:37:34 編集(投稿者)

    なぜ VK_Framework に "key"という指定があるのかについて説明します。

    案外というか、ほとんどの人が[エクスプローラ]などで、ファイルの先頭文字 A から Z を押して移動できることを知らないんですよ。
           ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    例えば、フォルダに test_NumAccept.zip というファイルが存在したとします。

    [エクスプローラ]でフォルダ内のファイル一覧を表示した状態でキートップが[T]のキーを押したとします。

    そうすると、ファイルの先頭文字が "T" または "t" のファイルへ移動します。

    再び、キートップが[T]のキーを押すと、次のファイルの先頭文字が "T" または "t" のファイルへ移動します。

    という具合でとても便利なんですよ。(^^v

    これは、[開く]ダイアログでも同じです。

    もちろん、ファイルの先頭文字が半角文字で無い場合には、うんともすんとも移動しませんけれどね。アハハハha
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そこで、VK_Framework では、文字キーだけを返す "key" という指定を後で追加したのでした。

    身近な例では、拙作:toy_launcher3.wfx で試すことが出来ますよ

    【再掲載】

    VK_Framework では通常はキートップの文字を指定しますが、

    例外として、"key"という指定があります。

    コチラ
     ↓
    桐の釣魚大全のトップ > 仕様メモ集
    https://silicon7565.cloudfree.jp/INF_Framework/1st_Spec_Memo_VK.txt

     ■キーの名前:key に関して

     キーの名前には、基本的にキートップの文字を指定しますが、いくつかの例外もあります。

     ここで説明する "key" という名前は、制御キー以外のすべての文字キーを対象にします。

     (例1) 手続き実行 VKprcKeySet( "key", 1, "0", "確認 &VKmChr" )

     (例2) 手続き実行 VKprcKeySet( "key", 1, "0", "prc任意のプロシージャ( &VKmChr )" )

     キーの名前に "key" を指定した場合には、以下のキーに反応してコマンドを実行します。

     <普通にキーを押した場合>

     次のキーを押すとVK の局所変数:&VKmChr には次の値が代入されます。

     [英字]   キー ・・・ "A" to "Z"
     [記号]   キー ・・・ "- ^ \ @ [ ; : ] . /"
     [コンマ]   キー ・・・ "comma"
     [バックスラッシュ]キー ・・・ "backslash"

     <シフト+キーを押した場合>

     次のキーを押すとVK の局所変数:&VKmChr には次の値が代入されます。

     [Shift]+[1]・・・ !
     [Shift]+[2]・・・ "" ← ※2重引用符が二つ返ります
     [Shift]+[3]・・・ #
     [Shift]+[4]・・・ $
     [Shift]+[5]・・・ %
     [Shift]+[6]・・・ &

     [Shift]+[7]・・・ '
     [Shift]+[8]・・・ (
     [Shift]+[9]・・・ )
     [Shift]+[-]・・・ =
     [Shift]+[^]・・・ ~
     [Shift]+[\]・・・ |

     [Shift]+[@]・・・ `
     [Shift]+[[]・・・ {
     [Shift]+[;]・・・ +
     [Shift]+[:]・・・ *
     [Shift]+[[]・・・ }

     [Shift]+[,]・・・ <
     [Shift]+[.]・・・ >
     [Shift]+[/]・・・ ?
     [Shift]+
     [バックスラッシュ]・・・ _

     <注意>

     次のキーを押すと、VK の局所変数:&VKmChr には次の値が代入されます。

     ・[コンマ]キー    ・・・ "comma"
     ・[バックスラッシュ]キー ・・・ "backslash"
     ・[shif]+[2]キー ・・・ "" ← ※2重引用符が二つ返ります

    p.s.

    > 私事なのですが、珍しく長期連休であります。
    > よってプログラム体験が8/18となりますm(_ _)m
    > 体験後また感想をコメントさせてもらいます(^-^)

    たまには仕事から離れてリフレッシュするのがいいですね。

    南半球は冬ですから、オーストラリアかニュージーランドだと涼しそうですね。

    ボンボヤージュ

引用返信 [メール受信/OFF] 削除キー/
■641 / inTopicNo.14)  Re[10]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェダイの桐 -(2025/08/18(Mon) 12:40:16)
    ONnojiさん


    こんにちは!


    個人的に今回の test_数値の入力後イベントハンドラ.wfx が一番シックリきました(^^ゞ


    -----------------------------------------------------------------------------------

    感想

     ・どの入力フィールドでも、入力制限がないのに結果として、意図した結果が求まる様に設計されている
       整数 長整数 数値 通貨 に文字列が入力可能。しかし、入力フィールドからキャレットが脱出したら入力フィールドは未定義になる
       整数 長整数 に関しては、
        .( ドット )が含まれた数値の時はアナウンスが流れた後、小数点以下を削除する
        入力範囲外の時はアナウンスを流して、適正範囲への入力をユーザへ促す

     ・ユーザに対して親切な仕組をどうやって実現しているのかな?と思いプログラムを見たんですが最初は分かりませんでした。
      トレース出力を見て理解出来ました(^^ゞ

      prcNumAccept の &string = &編集文字列 これが判断基準になるんですね(^^ゞ

      文字列以外の入力は 必ず if ( #対応番号( &dataTypeList, &dataType ) <> 0 ) の if節に入ります。
      if ( &dataType = "整数" .or &dataType = "長整数" ) で 整数 or 長整数 チェックが入る。
      整数 or 長整数 の時は、 少数点 及び 入力範囲がエラーの時、ユーザにアナウンスを流す。

      最後に &編集文字列 = &string で 文字列の値を返し、入力後イベントへ復帰する。( &stringが数値以外の時は、&編集文字列へ未定義が代入される )

     ・私が桐のプログラムを本腰を入れて勉強し始めたキッカケのスレッドが ■14187 / 親階層)  行制約について なんです。
      その時 ONnojiさんが提示してくれたサンプルが ■14199 / 7階層)  行制約について なんですよ。

      そのサンプルのキモも 入力後イベント だったんです。
      ユーザの入力自体は制限なしで、入力結果が開発者の意図した結果かどうかによって、次の作業へ進むかどうかが決まる。
      意図しない結果の時は、ユーザへ分かりやすいアナウンスを流し、意図した結果へと導く。

      この時 ONnojiさんに教えて貰った事が 私の考え方のベースにあるので、入力制限( 入力自体出来ない )をするアプローチは基本的に違和感を抱く様になりました。

      prcNumAccept は ユーザ目線で操作も違和感がないプログラムだと実感しました(^^ゞ


    -----------------------------------------------------------------------------------

    疑問

     個人的には test_数値の入力後イベントハンドラ.wfx が好みです。
     一方で test_数値のテキストボックス使用例.wfx の 入力制限も 違和感がありませんでした。

     数字の入力フィールド へ 制限無く入力可能 だが 文字列の場合 未定義を返す
     数字の入力フィールド へ 文字列の入力は不可能

     入力に対するアプローチが違うだけで、エラー時のユーザへのアナウンスを含む最終的な結果は 同じ です。
     ユーザにとってはどちらが便利に感じるんでしょうかね??


引用返信 [メール受信/OFF] 削除キー/
■642 / inTopicNo.15)  Re[11]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ONnoji -(2025/08/19(Tue) 10:46:39)
    ジェダイの桐さんへのお返事です

    > 個人的に今回の test_数値の入力後イベントハンドラ.wfx が一番シックリきました(^^ゞ
    >
    > 感想
    >
    > ・どの入力フィールドでも、入力制限がないのに結果として、意図した結果が求まる様に設計されている
    >  整数 長整数 数値 通貨 に文字列が入力可能。しかし、入力フィールドからキャレットが脱出したら入力フィールドは未定義になる
    >  整数 長整数 に関しては、
    > .( ドット )が含まれた数値の時はアナウンスが流れた後、小数点以下を削除する
    >   入力範囲外の時はアナウンスを流して、適正範囲への入力をユーザへ促す
    > ・ユーザに対して親切な仕組をどうやって実現しているのかな?と思いプログラムを見たんですが最初は分かりませんでした。
    >  トレース出力を見て理解出来ました(^^ゞ
    >   prcNumAccept の &string = &編集文字列 これが判断基準になるんですね(^^ゞ
    >
    > 文字列以外の入力は 必ず if ( #対応番号( &dataTypeList, &dataType ) <> 0 ) の if節に入ります。
    > if ( &dataType = "整数" .or &dataType = "長整数" ) で 整数 or 長整数 チェックが入る。
    > 整数 or 長整数 の時は、 少数点 及び 入力範囲がエラーの時、ユーザにアナウンスを流す。
    >   最後に &編集文字列 = &string で 文字列の値を返し、入力後イベントへ復帰する。( &stringが数値以外の時は、&編集文字列へ未定義が代入される )

    フィードバックありがとうございます。m(__)m

    > ・私が桐のプログラムを本腰を入れて勉強し始めたキッカケのスレッドが ■14187 / 親階層)  行制約について なんです。
    > その時 ONnojiさんが提示してくれたサンプルが ■14199 / 7階層)  行制約について なんですよ。
    >   そのサンプルのキモも 入力後イベント だったんです。
    > ユーザの入力自体は制限なしで、入力結果が開発者の意図した結果かどうかによって、次の作業へ進むかどうかが決まる。
    > 意図しない結果の時は、ユーザへ分かりやすいアナウンスを流し、意図した結果へと導く。
    > この時 ONnojiさんに教えて貰った事が 私の考え方のベースにあるので、入力制限( 入力自体出来ない )をするアプローチは基本的に違和感を抱く様になりました。
    > prcNumAccept は ユーザ目線で操作も違和感がないプログラムだと実感しました(^^ゞ

    そんなことがありましたね。アハハha

    とりあえず入力してもらう、その後問題があればフィードバックするというユーザインタフェースですね。

      > &msg =      "<警告>"
      > &msg = &msg + "\n\n・[数量]の値が書き換えられましたが、この操作は許可されていません"
      > &msg = &msg + "\n\n⇒自動的に数量の値を直前の数値( " + &m編集文字列 + " )に戻します"
      > &msg = &msg + "\n\n<ヒント>"
      > &msg = &msg + "\n\n納期の値が未定義の時のみ、数量が変更可能可能です"
      > &msg = &msg + "\n\n[納期]= " + #str( [納期] )
      > &msg = &msg + "\n\n[数量]の値を書き換える必要が有る場合には[納期]の値を空欄にしてください"
      > メッセージボックス  &title, &msg, アイコン = e, ボタン指定 = 1, 制御文字展開 = する, &ans

    懐かしいですね。(^^

    > 疑問
    >
    >  個人的には test_数値の入力後イベントハンドラ.wfx が好みです。
    >  一方で test_数値のテキストボックス使用例.wfx の 入力制限も 違和感がありませんでした。
    >
    >  数字の入力フィールド へ 制限無く入力可能 だが 文字列の場合 未定義を返す
    >  数字の入力フィールド へ 文字列の入力は不可能
    >
    >  入力に対するアプローチが違うだけで、エラー時のユーザへのアナウンスを含む最終的な結果は 同じ です。
    >  ユーザにとってはどちらが便利に感じるんでしょうかね??

    VK_Framework を使ってキー入力をフィルターしても、フィルターしなくても結果は同じなんですよね。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だったら、余計な手続きは不要でしょう。
    ・・・・・・・・・・・・・・・・・・

    つまり、この場面で VK_Framework を使うのはプログラミング的には過剰な装飾なんですよね。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だから、「過剰なものを取り除いた」のが test_数値の入力後イベントハンドラ.wfx の方なんです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    <改良前>
    ■ test_数値のテキストボックス使用例.kex

    txt数値::入力前
     └ prcNumInputKeySetON
       ├ VKprcEventKeyDownON
       ├ VKprcKeyON
       └ VKprcKeySet

    txt数値::入力後
     └ prcNumInputControl
       └ prcNumInputKeySetOFF
         ├ VKprcEventKeyDownOFF
         ├ VKprcKeyOFF
         └ VKprcKeyClear

    <改良後>
    ■ test_数値のイベントハンドラ.kex

    txt数値::入力後
     └ prcNumAccept ← prcNumInputControl を流用して prcNumInputKeySetOFF を呼び出さないようにした

    p.s.

    当方は現在、日時型の場合を研究しています。prcDateAccept というところです。(^^ゞ

    完成したらこの掲示板に投稿します。



引用返信 [メール受信/OFF] 削除キー/
■643 / inTopicNo.16)  Re[12]: HDLVARprcWindowAppearVarSendの使用感
□投稿者/ ジェダイの桐 -(2025/08/19(Tue) 11:38:39)
    ONnojiさん


    こんにちは!


    > VK_Framework を使ってキー入力をフィルターしても、フィルターしなくても結果は同じなんですよね。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > だったら、余計な手続きは不要でしょう。
    > ・・・・・・・・・・・・・・・・・・
    >
    > つまり、この場面で VK_Framework を使うのはプログラミング的には過剰な装飾なんですよね。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > <改良前>
    > ■ test_数値のテキストボックス使用例.kex
    >
    > txt数値::入力前
    >  └ prcNumInputKeySetON
    >    ├ VKprcEventKeyDownON
    >    ├ VKprcKeyON
    >    └ VKprcKeySet
    >
    > txt数値::入力後
    >  └ prcNumInputControl
    >    └ prcNumInputKeySetOFF
    >      ├ VKprcEventKeyDownOFF
    >      ├ VKprcKeyOFF
    >      └ VKprcKeyClear
    >
    > <改良後>
    > ■ test_数値のイベントハンドラ.kex
    >
    > txt数値::入力後
    >  └ prcNumAccept ← prcNumInputControl を流用して prcNumInputKeySetOFF を呼び出さないようにした


    なるほど。
    図示してみると一目瞭然ですね。

    結果が同じであれば、シンプルなプログラミングの方が 可読性・保守性 から考えても良いですね(^^ゞ

    勉強になりました!


    > p.s.
    >
    > 当方は現在、日時型の場合を研究しています。prcDateAccept というところです。(^^ゞ
    >
    > 完成したらこの掲示板に投稿します。


    分かりました!
    楽しみにしています(^^ゞ


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



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

このトピックに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -