DOWN LOAD BBS

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

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

■486 / inTopicNo.41)  Re[5]: Thin_INF_Framework のご案内
  
□投稿者/ ONnoji -(2024/09/09(Mon) 16:01:50)
    2024/09/09(Mon) 17:48:58 編集(投稿者)

    ジェダイの桐さん

    > 何度もすみませんm(__)m
    > 要件(仕様?)を開発者に具体的 且つ 適格 に伝える事は難しいですね(T_T)

    そうですよ。

    桐の質問のほとんどすべてが、何をしたいのか不明瞭で曖昧なんです。

    一番困るのは、「何々したけれど、上手くいきません。(>_<)」という質問ですね。

    「上手くいきません」では、状況がサッパリわかないのですから本当にバンザイですよ。アハハハ。

    >>1.事前に必ず[発注トランザクション]からランチャーで[入荷トランザクション]を開くのでOKなのですか??
    > 基本的に [発注トランザクション]からランチャーで[入荷トランザクション]を開く 想定です。
    > しかし、困った事に [入荷トランザクション] を先に開いたとしても内容的には 不自然ではないです。
    >
    > [発注トランザクション]からランチャーで[入荷トランザクション]を開く想定はあくまで私の想定なだけです。
    > 他者は [発注トランザクション] を何らかの理由で 閉じてしまうかもしれません。
    >
    > なので、
    >>2.[入荷トランザクション]の[コマンドボタン:cmd納品データ読込]を実行した時に、
    >>  [発注トランザクション]が開いていなければ、[発注トランザクション]を開くことにする??
    >
    > [発注トランザクション]が開いていなければ、[発注トランザクション]を開き &m伝票番号 へ 値を転送する。
    > こちらが、最適解だと思います。

    了解しました。

    簡単なサンプルを用意します。

    少し面倒な仕様なので、少々お時間をいただきますね。


引用返信 [メール受信/OFF] 削除キー/
■487 / inTopicNo.42)  Re[6]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/09(Mon) 17:14:19)
    ONnojiさん


    > 少し面倒な仕様なので、少々お時間をいただきますね。


    はい。分かりました。
    よろしくお願いいたしますm(__)m
引用返信 [メール受信/OFF] 削除キー/
■488 / inTopicNo.43)  Re[7]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/10(Tue) 16:44:43)
    2024/09/11(Wed) 15:35:05 編集(投稿者)
    2024/09/10(Tue) 17:09:57 編集(投稿者)

    ジェダイの桐さん

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

    sample_ランチャー.kex
    sample_ランチャー.wfx

    sample_入荷トランザクション.kex
    sample_入荷トランザクション.tbx
    sample_入荷トランザクション.wfx

    sample_発注トランザクション.kex
    sample_発注トランザクション.tbx
    sample_発注トランザクション.wfx

    納品書CSV.csv

    p.s.

    ギリギリ5時前にアップ出来ました。(^^ゞ

    いろいろ試してみてください。

    p.p.s.

    最初は難しそうに見えると思います。

    でも、慣れれば簡単ですよ。

    INF_Frameworkの[ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)]を使っています。

    これらを使うと、膨大なコマンドを書かなくて済みます。

    もちろん、同じく[ランチャー]もプログラムを簡略にします。

    追って解説しますから、ご安心を。(^^ok

    p.p.s.

    今回のサンプルは、たぶんこういう事なんだろうなぁ〜と想像しながら作ったワケです。

    だから、即戦力にはならないと思いますよ。

    よーく内容を咀嚼してから応用してください。

     ◇ ◇ ◇ ◇ ◇ ◇

    追記 2024.09.11

    プログラムを見直し(レビュー)ていたら、ミススペルが見つかりました。

    お手数ですが、以下を参考にして修正してください。m(__)m

    ■sample_入荷トランザクション.kex

    手続き定義開始 cmdCSV読み込み処理Click( )
     変数宣言 自動,文字列{ &icon, &title = "cmdCSV読み込み処理Click( )", &msg }

     条件 ( &traceON ) トレース出力 _ ( #ファイルサイズ( &targetFileName ) > 0 ), " ", &targetFileName
    ┌if ( #ファイルサイズ( &fileNameCSV ) > 0 )


    │┌if ( &ans )
    ││
    ││   ここです
    ││    ↓
    ││┌if ( found .and &status ) /* フォームのウィンドウが見つかった */
    │││

    × if ( found .and &status )

    〇 if ( &found .and &status )
        ↑
      アンパサンド記号( & )を付けてください。


    ちなみに、ミススペルの場合でも動作は正しいです。

     if ( found .and &status ) は if ( "found" .and &status ) と同じです。

    "found" は未定義値では無いので、常に真です。

    結局、&status の値次第なので正しく動いていたワケです。
    ・・・・・・・・・・・

    プログラムは正しく動いていたわけですから、こういうミススペルは中々気が付きませんね。

    だから、完成したと思っても、念のためにレビューした方がよいのです。ガハハハ



引用返信 [メール受信/OFF] 削除キー/
■490 / inTopicNo.44)  Re[8]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/10(Tue) 17:45:16)
    ONnojiさん


    サンプルのご提供ありがとうございますm(__)m
    実際に動かしてみて イメージ 通りとなっています。

    私の イメージ
     → 入荷トランザクション の 値を 局所変数代入する


    サンプルの 値の渡し方(推測)
     → 入荷トランザクション から 発注トランザクション へ文字通り 値を転送する


    結果は同じになりますが、アプローチが全然違います。


    > INF_Frameworkの[ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)]を使っています。
    >
    > これらを使うと、膨大なコマンドを書かなくて済みます。
    >
    > もちろん、同じく[ランチャー]もプログラムを簡略にします。
    >
    > 追って解説しますから、ご安心を。(^^ok


    はい!
    解説を楽しみにしています(^^♪


    > 今回のサンプルは、たぶんこういう事なんだろうなぁ〜と想像しながら作ったワケです。


    正にこういう事で、一番やりたかった事です。


    私が最初に言ったのは 局所変数代入 でした。
    これは ONnojiさん の提供してくれた Thin_INF_Framework によって
    私が取得するより、精度の高いハンドル番号取得をやってくれるからです。


    しかし本当は、HDLVAR の様な 局所変数の受け渡し(局所変数を渡したい)をやりたかったのです。


    ただ今の私では ハードルが高いので、ハンドル番号を取得出来るのであれば、HDLVARの代わりに 局所変数代入 で 局所変数の値を渡せるな と考えました。


    今回 ONnojiさん に提供頂いたプログラムで 直近の私の一番高い目標 値を転送 するを実現されているので、解説を見るのが楽しみです。


引用返信 [メール受信/OFF] 削除キー/
■491 / inTopicNo.45)  Re[9]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/10(Tue) 18:33:52)
    2024/09/10(Tue) 21:14:59 編集(投稿者)

    ジェダイの桐さん

    > サンプルのご提供ありがとうございますm(__)m
    > 実際に動かしてみて イメージ 通りとなっています。
    >
    > 私の イメージ
    >  → 入荷トランザクション の 値を 局所変数代入する
    > サンプルの 値の渡し方(推測)
    >  → 入荷トランザクション から 発注トランザクション へ文字通り 値を転送する
    > 結果は同じになりますが、アプローチが全然違います。

    以前ですが、

    >> 最終的には モードレスな「フォーム+イベント処理」+モードレスな「フォーム+イベント処理」 を目指したいですが、
    >> モードレスA → こんにちは。モードレスB → モードレスB で こんにちは。モードレスB を表示
    >> モードレスB → こんにちは。モードレスA → モードレスA で こんにちは。モードレスA を表示
    >> と言う、やり取りを作る所からというイメージを抱きました。

    > アラ!懐かしいですね、思い出してしまいました。
    > 私は20年以上前にAフォームとBフォームでジャンケンの勝負をさせようと思ったことがありましたっけ。
    > ただし、考えただけで実際には作りませんでしたけれどね。グァハハハ。
    > ここにある「こんにちは」はアラン・ケイが言う所のメッセージングのような意味かと思いますが・・・(^^ゞ
    > 実に面白いですね。v(^^)v
    >
    > ちなみに、拙作フレームワーク:INF_Framework の場合には、
    >
    >  ** HDLCOM var 第 2.1 版で追加された変数
    >  変数宣言 局所,文字列{ &HDLCOMmSendMacro, &HDLCOMmReceiveMacro }
    >  変数宣言 局所,整数 { &HDLCOMmOnMacro, &HDLCOMmReceiveReady = 1 }
    >
    >  一般手続き:HDLCOMprcMacroSend( 整数 &hdl, 文字列 &sendMacro, 参照 整数 &done )
    >
    > といった具合に、ハンドル+通信( communication )の意味合いで HDLCOM という機能名を用意していますよ。

    ↑上は、■14517  Re[6]: 主ウィンドウ と 補助ウィンドウについて□投稿者/ ONnoji -(2024/07/11(Thu) 12:50:35)

    の一部です。

    覚えていますか??

    この時の、ハンドル+通信( communication )の意味合いから名付けた HDLCOM という機能を使ったのです。

    そうです、まさしく「こんにちは。モードレスA」でしょ。ガハハハha

    >>INF_Frameworkの[ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)]を使っています。
    >>これらを使うと、膨大なコマンドを書かなくて済みます。
    >>もちろん、同じく[ランチャー]もプログラムを簡略にします。
    >>追って解説しますから、ご安心を。(^^ok

    この機能は、桐ver.8 の時代の INF_Framework からあるのですが、巷ではイマイチ受けなかったようですねぇ〜。

    拙作の[整形ユーティリティ]等ではバンバン使っているんですけれどね。(^^ゞ

    ウン十年という長い時間が経ちましたが、ようやく日の目を見るようになって、当方は感慨深いです。ウルウル(T_T)

    >>今回のサンプルは、たぶんこういう事なんだろうなぁ〜と想像しながら作ったワケです。
    > 正にこういう事で、一番やりたかった事です。
    > 私が最初に言ったのは 局所変数代入 でした。
    > これは ONnojiさん の提供してくれた Thin_INF_Framework によって
    > 私が取得するより、精度の高いハンドル番号取得をやってくれるからです。

    はい。[局所変数代入]コマンドです。ご明察ですよ。(^^♪

    もちろん、これでも良いのですが、今回は変数:&m伝票番号の値を渡しただけでは面白くないでしょう。

    というわけで、変数:&m伝票番号の値を渡して、さらに受け取ったフォーム側でアクション出来るようにしたのですよ。

    受け取ったフォーム側でアクション出来れば応用範囲が広くなるでしょう。

    ちなみに、[HDLVAR]の方は、ランチャー+[局所変数代入]で開く機能です。※基本的にランチャーですよ。
                                 ・・・・

    変数を受け取った側のフォームからは、あらかじめ送った側が指定しておいた手続きを[HDLCOM]で送ることもできます。

    そう、この時に、「こんにちは」をやっているんですよ。

    つまり、[HDLVAR]は、[HDLLNC]+[局所変数代入]と[HDLCOM]がコラボしているワケです。

    > しかし本当は、HDLVAR の様な 局所変数の受け渡し(局所変数を渡したい)をやりたかったのです。
    > ただ今の私では ハードルが高いので、ハンドル番号を取得出来るのであれば、HDLVARの代わりに 局所変数代入 で 局所変数の値を渡せるな と考えました。
    > 今回 ONnojiさん に提供頂いたプログラムで 直近の私の一番高い目標 値を転送 するを実現されているので、解説を見るのが楽しみです。

    もしも、今からジェダイの桐さんが[HDLVAR][HDLLNC][HDLCOM]などといった機能を作り始めたらきっと長い時間が必要になりますよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だから、既に出来上がっている拙作フレームワークを利用するのがクールだと思いますよ。

    でもね、なんでも自作しないと気持ち悪いと思う人が実に多いんですよ。

    それはそうでしょう、どこの馬の骨とも知らない輩が作ったプログラムですから胡散臭く思われても仕方ないですよね。アハハハha

    でも、拙作フレームワークはK3公認で桐を使った受託開発をしている会社さんでも使っていただいた実績があるんですよ。

    だから、安心して使ってみてください。

    ちなみに、こちらが参考になると思いますよ。(^^ゞ

    こちら
     ↓
    フリー百科事典『ウィキペディア(Wikipedia)』
    車輪の再発明 https://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E





引用返信 [メール受信/OFF] 削除キー/
■492 / inTopicNo.46)  Re[10]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/10(Tue) 23:36:19)
    2024/09/11(Wed) 00:13:39 編集(投稿者)

    ジェダイの桐さん

    以下は、毎度お馴染みのトレース出力です。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ┌when :sample_入荷トランザクション.wfx hdl= 3>cmdCSV読み込み処理Click( )を実行開始しました

    │ :( #ファイルサイズ( &targetFileName ) > 0 ) : 0

    │┌when :sample_入荷トランザクション.wfx hdl= 3>cmd発注トランザクションを開くClick( )を実行開始しました
    ││
    ││ :&wfm : D:\〇〇〇〇\sample_発注トランザクション.wfx &tbl : D:\〇〇〇〇\sample_発注トランザクション.tbx
    ││ :&hdl : 4 &openStatus : 1
    ││ :&windowStatus : 0
    ││
    │└end

    │ : &targetFileName = D:\〇〇〇〇\sample_発注トランザクション.wfx
    │ : &found     = 4
    │ : &status     = 4
    │ : &multi     = 0
    │ : &mode      = 0

    │┌when :sample_入荷トランザクション.wfx hdl= 3>prcCSV読み込み処理( )を実行開始しました
    ││
    ││ :&return : 1  &objectName : cmd納品書CSVを読み込む
    ││ :( .not #eof ) : 1  [伝票番号] : 240825
    ││
    ││┌when :sample_入荷トランザクション.wfx hdl= 3>prc別のフォームへ変数の値を送る( )を実行開始しました
    │││
    │││ :&sendMacro : 手続き実行 prc文字列を受け取る( "m伝票番号","240825" )
    │││
    │││┌※これはセンダー( HDLCOMprcMacroSend )が出力しているトレースです このトレース出力は自動で行われて止められません
    ││││
    ││││:sample_入荷トランザクション.wfx hdl= 3>
    ││││    HDLCOMprcMacroSend( ) --> ハンドル番号:4 のフォームの局所変数:&HDLCOMmOnMacro に 1 を代入しました
    ││││
    ││││:sample_入荷トランザクション.wfx hdl= 3>
    ││││    HDLCOMprcMacroSend( ) --> ハンドル番号:4 のフォームの局所変数:&HDLCOMmReceiveMacro に
    ││││       手続き実行 prc文字列を受け取る( "m伝票番号","240825" ) を代入しました
    ││││
    ││││:sample_入荷トランザクション.wfx hdl= 3>HDLCOMprcMacroSend( )
    ││││    HDLCOMprcMacroSend( ) 自身のフォームの局所変数:&HDLCOMmSendMacro に
    ││││    手続き実行 prc文字列を受け取る( "m伝票番号","240825" ) を代入しました
    ││││
    ││││:sample_入荷トランザクション.wfx hdl= 3>
    │││└    HDLCOMprcMacroSend( ) --> ハンドル番号:4 のフォームの[タイマー2]イベントを予約しました(インターバルは0.1秒)
    │││
    │││ :&hdl : 4  &sendMacro : 手続き実行 prc文字列を受け取る( "m伝票番号","240825" )  &done : 1
    │││
    ││└end
    ││
    │└end

    └end

    ┌when :sample_発注トランザクション.wfx hdl= 4>prc文字列を受け取る( )を実行開始しました
    └end


    ハンドル:3の[sample_入荷トランザクション.wfx]から、※ハンドル番号は、使用中の桐のハンドルの使用状態によって変動します。

    ハンドル:4の[sample_発注トランザクション.wfx]向けて。

    コマンドまたはメソッドとして実行可能なメッセージを送っています。

    メッセージの内容は、[手続き実行 prc文字列を受け取る( "m伝票番号","240825" )]です。

    これを[コマンド]コマンドで実行しますので、最後に

    ┌when :sample_発注トランザクション.wfx hdl= 4>prc文字列を受け取る( )を実行開始しました
    └end

    というトレースが得られます。

    手続き定義開始 prc文字列を受け取る( 文字列 &variableName, 文字列 &string )
     変数宣言 自動,文字列{ &icon, &title = "prc文字列を受け取る( )", &msg }
     変数宣言 自動,文字列{ &setString }

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

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

     &setString = #set( &variableName, &string )

     &msg =       "メッセージを受け取りました"
     &msg = &msg + "\n\n&variableName   = " + &variableName
     &msg = &msg + "\n\n&string      = " + &string
     &msg = &msg + "\n\n変数に代入した値 = " + #変数( &variableName )
     &icon = "i"
     手続き実行 INFprcMsgPause( &icon, &title, &msg )

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

    p.s.

    このような[トレース出力]をするのは、決して「ジェダイの桐」さんが理解し易くなるように配慮したワケではありませんよ。

    こういうのは、作者(今回の場合は ONnoji )が、プログラムが正しく動いているか否かを確認するために書いたのです。
                           ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    もちろん、「ジェダイの桐」さんも同じように[トレース出力]コマンドを活用されていると存じます。

    一般手続きやイベントハンドラに[トレース出力]コマンドを記述するのは、一見すると単なるお無駄な作業に見えるかもしれませんが、

    実は、[一般手続き]や[イベントハンドラ]の実行経過を確認するために[必須のルーティン(「決まった行動」や「日課」)]なんですよね。

    当たり前のルーティン(「決まった行動」や「日課」)として[トレース出力]コマンドを使っていれば、

    当該の[一般手続き]や[イベントハンドラ]の実行を誰でも簡単にテスト(検証)出来るワケです。
                                   ・・・・・・・

    ということで、手間が掛かるかもしれませんが[トレース出力]コマンドを記述する習慣は忘れないでくださいね。

    世の中には、[トレース出力]コマンドを使ったテスト(検証)が無い、[一般手続き]や[イベントハンドラ]を書く人もあります。

    むしろ、その方が圧倒的多数だろうと思いますけれど。

    しかし、それではその[一般手続き]や[イベントハンドラ]は到底信用できないに決まっていますよね。
                                 ・・・・・・・・・・・・・・・・

    だから、[一般手続き]や[イベントハンドラ]の信頼性を確認・確保・担保する意味で、[トレース出力]コマンドを記述する習慣は忘れないでくださいね。

    <余談>

    桐10sの前の桐10のリリース当時には、[トレース出力]ウィンドウの出力結果は文字化けして使い物になりませんでしたよ。

    もちろん、当方だけが気が付いたワケではないと思いますが、

    早々に当方からK3さんへ虫報告をしまして、

    現況のようにマシな出力がされるようにしてもらいましたっけ。アハハハha (^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■493 / inTopicNo.47)  Re[10]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/11(Wed) 10:05:20)
    ONnojiさん


    おはようございます!


    >>アラ!懐かしいですね、思い出してしまいました。
    >>私は20年以上前にAフォームとBフォームでジャンケンの勝負をさせようと思ったことがありましたっけ。
    >>ただし、考えただけで実際には作りませんでしたけれどね。グァハハハ。
    >>ここにある「こんにちは」はアラン・ケイが言う所のメッセージングのような意味かと思いますが・・・(^^ゞ
    >>実に面白いですね。v(^^)v
    >>
    >>ちなみに、拙作フレームワーク:INF_Framework の場合には、
    >>
    >> ** HDLCOM var 第 2.1 版で追加された変数
    >> 変数宣言 局所,文字列{ &HDLCOMmSendMacro, &HDLCOMmReceiveMacro }
    >> 変数宣言 局所,整数 { &HDLCOMmOnMacro, &HDLCOMmReceiveReady = 1 }
    >>
    >> 一般手続き:HDLCOMprcMacroSend( 整数 &hdl, 文字列 &sendMacro, 参照 整数 &done )
    >>
    >>といった具合に、ハンドル+通信( communication )の意味合いで HDLCOM という機能名を用意していますよ。
    >
    > ↑上は、■14517  Re[6]: 主ウィンドウ と 補助ウィンドウについて□投稿者/ ONnoji -(2024/07/11(Thu) 12:50:35)
    >
    > の一部です。
    >
    > 覚えていますか??


    勿論覚えています!
    但し、 HDLCOM の事に触れて頂いた事は失念していました。
    (多分、HDLCOM の意味が理解出来なかったので失念したのだと思います)


    > そうです、まさしく「こんにちは。モードレスA」でしょ。ガハハハha


    はい!
    これが一番やってみたかったのです。
    これを具体的に利用する想定は無いのですが、値を 送信 したかったのです。


    > >>INF_Frameworkの[ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)]を使っています。
    > >>これらを使うと、膨大なコマンドを書かなくて済みます。
    > >>もちろん、同じく[ランチャー]もプログラムを簡略にします。
    > >>追って解説しますから、ご安心を。(^^ok
    >
    > この機能は、桐ver.8 の時代の INF_Framework からあるのですが、巷ではイマイチ受けなかったようですねぇ〜。
    >
    > 拙作の[整形ユーティリティ]等ではバンバン使っているんですけれどね。(^^ゞ
    >
    > ウン十年という長い時間が経ちましたが、ようやく日の目を見るようになって、当方は感慨深いです。ウルウル(T_T)


    私の想像なのですが、利用者が [ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)] の機能を知らないのじゃないかな?
    と思います。


    これが使えたら、やりたい事の幅が広がりますからね(^^♪


    > もちろん、これでも良いのですが、今回は変数:&m伝票番号の値を渡しただけでは面白くないでしょう。
    >
    > というわけで、変数:&m伝票番号の値を渡して、さらに受け取ったフォーム側でアクション出来るようにしたのですよ。
    >
    > 受け取ったフォーム側でアクション出来れば応用範囲が広くなるでしょう。


    本日は、解説 と sample_入荷トランザクション.kex と sample_発注トランザクション.kex をにらめっこして 意味を咀嚼します!


    > もしも、今からジェダイの桐さんが[HDLVAR][HDLLNC][HDLCOM]などといった機能を作り始めたらきっと長い時間が必要になりますよ。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > だから、既に出来上がっている拙作フレームワークを利用するのがクールだと思いますよ。


    まさしくその通りだと思います。
    自作する意味がそもそもないですね(^^ゞ


    Thin_INF_Framework を紹介して頂くまでの 私は

     INF_Framework が フォームが 表の様に便利に使用できる
     じゃあ自分のプログラムのプログラムはどうする??

    位の認識で、INF_Framework の 探知機能 送信機能 も理解していませんでした。
    (つまり、オートフォーム として 表の代わりに使用する位の理解でした)


    と言う事は、 送信システム を 真似る しかなかったんですね・・・
    (出来るかどうかは別ですが・・・)

    今は Thin_INF_Framework のおかげで フレームワークの入り口に立てたので、
    真似る必要が無くなったのでした(^^ゞ


    > でも、拙作フレームワークはK3公認で桐を使った受託開発をしている会社さんでも使っていただいた実績があるんですよ。


    純粋に凄いです。
    企業が採用すると言う事は、個人 若しくは 一部署 が使用するのとはやっぱり次元が違いますよね。



    > ちなみに、こちらが参考になると思いますよ。(^^ゞ
    >
    > こちら
    >  ↓
    > フリー百科事典『ウィキペディア(Wikipedia)』
    > 車輪の再発明 https://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E


    情報ありがとうございますm(__)m
    こちらのwikiも読みますね!!


    p.s.


    今回の件で気付いた事があります。
    INF_Framework の事を知らない状態で
    プログラムを自分で書ける人がいたとします。(プログラムの内容は別として)


    そうしたら、フォームとプログラムを自作しているはずです。
    自作した後に INF_Framework の事を知った場合、
    Thin_INF_Framework であれば、簡単なステップで 自作の物に組み込めます。


    使っていくうちに、INF_Framework の使い方に気づいていくはずなんです。


    気付いた人は 新しくフォームとプログラムを開発する時は モダンINF_Framework で開発していくと思います。


    私は、そうします。
    Thin_INF_Framework のおかげで INF_Framework の印象(導入・利用方法)が変わったのでした(^^ゞ


    今回のご提案、本当にありがとうございましたm(__)m




引用返信 [メール受信/OFF] 削除キー/
■494 / inTopicNo.48)  Re[11]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 11:44:48)
    2024/09/11(Wed) 11:58:02 編集(投稿者)

    ジェダイの桐さん

    >>そうです、まさしく「こんにちは。モードレスA」でしょ。ガハハハha
    > はい!
    > これが一番やってみたかったのです。
    > これを具体的に利用する想定は無いのですが、値を 送信 したかったのです。

    常々思っている事なのですが、↑こういう発想をする人って案外と少ないと思いますよ。

    私( ONnoji )は、フォームや表のウィンドウを自由自在に開いて、

    フォームとフォームの間で通信し合うようになったら便利だろうなと発想したのです。

    調べてみると、それを INF_Framework に実装したのは、2006年の頃です。

    ↓以下に修正履歴のごく一部を抜粋しますね。

     ** Rev.47 2006.08.25 HDLSELprcProcessRun を追加しました
     ** Rev.47 2006.08.25 INFprcEventTimerSecondaryRun 変数:&HDLCOMmReceiveMacro に対応
     ** Rev.48 2006.09.06 コマンド送信機能( HDLCOM )を追加しました
     ** HDLCOMprcFormMacroSend         Rev.48 New!
     ** HDLCOMprcFormToHdlGet         Rev.48 New! Rev.60 modify
     ** HDLCOMprcMacroSend           Rev.48 New!
     ** HDLCOMprcMacroSendWindowSelect     Rev.48 New!
     ** HDLSELprcFocusWindowSelect       Rev.48 New!
     ** Rev.48 2006.09.06 HDLSELprcProcessRun を修正しました
     ** Rev.48 2006.09.06 INFprcObjVarInitialize 旧LNCの変数をコメントにしました

    そして、数年間現場でテスト兼ねて実用した後で、満を持して公開したのが

     2008.06 #165 INF Tools Framework 第2.1版

    です。

    この段階でようやくフレームワークというレベルになったと思ったので、

    この時に、第1世代 INF Tools から第2世代 INF Tools Framework に名称を変更しました。

    ちなみに、現在の名称は、第3世代 INF Framework で "Tools" を削っています。

    >>>>INF_Frameworkの[ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)]を使っています。
    >>>>これらを使うと、膨大なコマンドを書かなくて済みます。
    >>>>もちろん、同じく[ランチャー]もプログラムを簡略にします。
    >>>>追って解説しますから、ご安心を。(^^ok
    >>この機能は、桐ver.8 の時代の INF_Framework からあるのですが、巷ではイマイチ受けなかったようですねぇ〜。
    >>拙作の[整形ユーティリティ]等ではバンバン使っているんですけれどね。(^^ゞ
    >>ウン十年という長い時間が経ちましたが、ようやく日の目を見るようになって、当方は感慨深いです。ウルウル(T_T)
    > 私の想像なのですが、利用者が [ハンドル・シーカー(探索器)]と[メッセージ・センダー(送信器)] の機能を知らないのじゃないかな?
    > と思います。

    冒頭で触れたように、こういう発想をする人って案外と少ないと思いますよ。

    また、もしも[ハンドル・シーカー(探索器)]等を自作していても、わざわざ一般公開しようとする人も居なかったのでしょうね。

    私は、他の人の作品が公開されるのを密かに期待していたのですが、とうとう出てきませんでしたね。

    >>もしも、今からジェダイの桐さんが[HDLVAR][HDLLNC][HDLCOM]などといった機能を作り始めたらきっと長い時間が必要になりますよ。
    >>・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >>だから、既に出来上がっている拙作フレームワークを利用するのがクールだと思いますよ。
    > まさしくその通りだと思います。
    > 自作する意味がそもそもないですね(^^ゞ

    拙作はテストが十分されているいるので、安心して使ってください。

    だから、[車輪の再発明]をする必要はないですよ。(^^ok

    > Thin_INF_Framework を紹介して頂くまでの 私は
    >  INF_Framework が フォームが 表の様に便利に使用できる
    >  じゃあ自分のプログラムのプログラムはどうする??
    > 位の認識で、INF_Framework の 探知機能 送信機能 も理解していませんでした。
    > (つまり、オートフォーム として 表の代わりに使用する位の理解でした)

    オートフォームは、INF_Framework のある一面でしかないんですよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・

    これは、表に施してある装飾をフォーム側でするのが2度手間だから、装飾を引き継いでしまおうという発想です。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これはこれで、相当な手間を軽減してくれる便利な機能ですよ。

    > と言う事は、 送信システム を 真似る しかなかったんですね・・・
    > (出来るかどうかは別ですが・・・)
    > 今は Thin_INF_Framework のおかげで フレームワークの入り口に立てたので、
    > 真似る必要が無くなったのでした(^^ゞ

    常に[ハリウッドの原則]を思い出してください。

      桐の釣魚大全のトップ > ワークショップ
      http://silicon7565.html.xdomain.jp/workshop_Framework/workshop_Framework_Top.html
      ■ハリウッドの原則
       フレームワークの性質を端的に表す良く知られた言葉として、ハリウッドの原則(Hollywood Principle)があります。
      これは「Don't call us. We'll call you.」で、
      本来は、「お電話は不要です。こちらからお掛けします」、という意味です。
      つまり、INF_Frameworkの利用者は、INF_Framework.cmdの内容を知っている必要がまったありません。
      もしも、問題があれば、INF_Framework 側からメッセージボックスでお知らせします。

    >>でも、拙作フレームワークはK3公認で桐を使った受託開発をしている会社さんでも使っていただいた実績があるんですよ。
    > 純粋に凄いです。
    > 企業が採用すると言う事は、個人 若しくは 一部署 が使用するのとはやっぱり次元が違いますよね。

    企業または個人事業主のどちらか不明ですが、拙作を採用してアプリケーションを開発されている人からのお問い合わせを受けたことがありますね。

    しかし、当方には具体的な導入事例のご連絡を頂いたことがありません。

    もう慣れてしまったので気にもしませんが、拙作に関する反響はほぼほぼ伝わって来たことはないんですよ。アハハハha

    今回、ガントチャートと Thin INF_Framework に同梱する INF_Framework では次のような

     ** Rev.266 2023.05.14 HDLprcOnErrorウィンドウ情報取得コマンド コンマ挿入{ &hdl &return }→{ &hdl, &return }
     ** Rev.266 2023.05.14 INFprcEventFormBeginRun WBS 風のダイアグラムを追加 / コメントを整理
     ** Rev.266 2023.05.14 INFprcEventFormEndRun WBS 風のダイアグラムを追加 / コメントを整理
     ** Rev.267 2024.03.31 INFprcFileStatus 桐コンバータで変換したためにプロパティが旧ファイル名のままの場合をfix
     ** Rev.268 2024.08.03 フォーム::タイマー1() コメントアウト:条件 ( &traceON ) トレース出力 &traceMsg + " if ( #変数(
     ** Rev.269 2024.09.07 INFprcFileStatus Thin INF_Framework 対応
     ** 以上は 公開バージョン ガントチャート / Thin INF_Framework を予定中

    ごく一部の修正を行っています。

    「Thin INF_Framework 対応」というのは、[?]ボタンを実行した時に現れる「INF_Framework のファイル情報」に、

    Thin INF_Framework が組み込まれている場合、ハンドル番号の右側に "Thin INF_Framework" と表示されるようになることです。

    ただし、編集対象表が無いフォーム、つまり NULLフォームでは識別出来ないので、"NULL INF_Framework" と表示されます。

    > 今回の件で気付いた事があります。
    > INF_Framework の事を知らない状態で
    > プログラムを自分で書ける人がいたとします。(プログラムの内容は別として)
    > そうしたら、フォームとプログラムを自作しているはずです。
    > 自作した後に INF_Framework の事を知った場合、
    > Thin_INF_Framework であれば、簡単なステップで 自作の物に組み込めます。
    > 使っていくうちに、INF_Framework の使い方に気づいていくはずなんです。
    > 気付いた人は 新しくフォームとプログラムを開発する時は モダンINF_Framework で開発していくと思います。
    > 私は、そうします。
    > Thin_INF_Framework のおかげで INF_Framework の印象(導入・利用方法)が変わったのでした(^^ゞ

    最初のプロトタイプ作りは Thin INF_Framework を使って、完成版で モダンINF_Framework を使うのが良いんじゃないでしょうかね。

    プロトタイプで使用した手続きはそのまま流用出来ますし、

    プロトタイプで作成したオブジェクトも、コピー&ペーストで流用出来ます。

    ちなみに、NULLフォームの場合には、 Thin INF_Framework のままで何も問題ありませんよ。






引用返信 [メール受信/OFF] 削除キー/
■495 / inTopicNo.49)  Re[1]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 14:17:37)
    2024/09/11(Wed) 15:35:34 編集(投稿者)

    ジェダイの桐さん

    プログラムを見直し(レビュー)ていたら、ミススペルが見つかりました。

    お手数ですが、以下を参考にして修正してください。m(__)m

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ■sample_入荷トランザクション.kex

    手続き定義開始 cmdCSV読み込み処理Click( )
     変数宣言 自動,文字列{ &icon, &title = "cmdCSV読み込み処理Click( )", &msg }

     条件 ( &traceON ) トレース出力 _ ( #ファイルサイズ( &targetFileName ) > 0 ), " ", &targetFileName
    ┌if ( #ファイルサイズ( &fileNameCSV ) > 0 )


    │┌if ( &ans )
    ││
    ││   ここです
    ││    ↓
    ││┌if ( found .and &status ) /* フォームのウィンドウが見つかった */
    │││

    × if ( found .and &status )

    〇 if ( &found .and &status )
        ↑
      アンパサンド記号( & )を付けてください。


    ちなみに、ミススペルの場合でも動作は正しいです。

     if ( found .and &status ) は if ( "found" .and &status ) と同じです。

    "found" は未定義値では無いので、常に真です。

    結局、&status の値次第なので正しく動いていたワケです。
    ・・・・・・・・・・・

    プログラムは正しく動いていたわけですから、こういうミススペルは中々気が付きませんね。

    だから、完成したと思っても、念のためにレビューした方がよいのです。ガハハハ


引用返信 [メール受信/OFF] 削除キー/
■496 / inTopicNo.50)  Re[1]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 14:52:46)
    2024/09/11(Wed) 18:44:59 編集(投稿者)

    ジェダイの桐さん

    ■「cmdCSV読み込み処理Click」の話(ストーリー)をしよう

    コマンドボタンが押されたら、最初に処理を実行するか否かを尋ねます。

    単に情報を表示するだけのダイアログが出るのであれば、直ちに実行しますが、

    この処理は、CSVを読み込むという内容なので、必ず処理を実行するか否かを尋ねます。

     "納品書CSVデータを読み込みます"
     "よろしいですか?"

    応答が[いいえ]だったら何もしない。これで終わりです。もちろん無駄なメッセージボックスを表示する必要もありません。
                               ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    応答が[はい]だったら続行する。

    まず、CSVファイルが存在するか否かを調べます。

    なぜならば、ファイルが無ければ処理が成り立たないからです。

    普通はここで、#ファイルサイズ( )関数で調べます。

    しかし、今回は対象がCSVファイルなので、空のファイルの可能性も多々あります。

    なので、

    △ "ファイルが見つかりません"

    〇 "ファイルが見つからないか、またはファイルのサイズが 0 byte です"

    としました。

    案外と気が付いていない人が多いのですが、

    × "ファイルがありません"

    これはダメなんですね。

    なぜならば、プログラムが稚拙で、ファイルの探索に失敗している場合も考えられるのです。

    だから、"ファイルが見つからないか、またはファイルのサイズが 0 byte です"

    ファイルのサイズが 0 byte というのは、中身が無いテキストファイルとCSVの場合にはあり得るんですね。

    もしも、それ以外のファイルだったらファイルが壊れているかフォルダです。

    まず、普通はそんなことはありませんから、

    〇 "ファイルが見つかりません" ※テキストファイルとCSV以外の場合

    でOKです。

    同様に、絞り込みや検索の場合には

    × レコードがありません

    〇 レコードが見つかりません

    ですね。

    レコードが見つからないのは、プログラムが稚拙、つまり「下手くそ」だからカモしれないのです。

    以下は、疑似コード的に「cmdCSV読み込み処理Click」のストーリーを記述したものです。

    ┌if ( #ファイルサイズ( &fileNameCSV ) > 0 )


    │ "納品書CSVデータを読み込みます"
    │ "よろしいですか?"
    │┌if ( &ans )
    ││
    ││ 〔ランチャー〕で"発注トランザクション"を開く
    ││
    ││ 〔シーカー〕でフォームの"発注トランザクション"の情報を得る
    ││┌if ( &found .and &status ) /* フォームのウィンドウが見つかった */
    │││
    │││ 手続き実行 prcCSV読み込み処理 → この後は一本道で処理しますので説明不要でしょ (^^ゞ
    ││├else
    │││
    │││〔シーカー〕で表の"発注トランザクション"の情報を得る
    │││┌if ( &found )
    ││││
    ││││ "フォームの編集対象表に使用する予定の表が開いています"
    ││││ "表ウィンドウのタイトルバーの[×]ボタンを押して表を閉じてください"
    │││└end
    ││└end
    │└end

    ├else

    │ "ファイルを読み込めません"
    │ "ファイルが見つからないか、またはファイルのサイズが 0 byte です"

    └end

    p.s.

    > 応答が[はい]だったら続行する。
    > まず、CSVファイルが存在するか否かを調べます。
    > なぜならば、ファイルが無ければ処理が成り立たないからです。

     "納品書CSVデータを読み込みます"
     "よろしいですか?"

    の[はい][いいえ]の応答を得るよりも先に、CSVファイルが見つかるか調べることも考えられます。

    つまり、先回りして調べるという目論見です。

    ここで、大事なのは、

    オペレータが[コマンドボタン:cmdCSV読み込み処理]を実行する意思を持って押したのか?という事です。

    案外と押すつもりが無かったのに、うっかり押しちゃったということもあるんですよね。

    だから、先回りする僭越な行為は要らないのです。

    何よりも大事なのは、オペレータが押したボタンが即応答する事なのです。
              ・・・・・・・・・・・・・・・・・・

    こういうフィードバックがあると、オペレータは「システムを支配しているという満足感」を得ることが出来るのです。

    UI(ユーザインタフェース)というのは、ほぼ心理学なんですよ。アハハハハha

引用返信 [メール受信/OFF] 削除キー/
■497 / inTopicNo.51)  Re[2]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/11(Wed) 17:34:21)
    ONnojiさん


    こんにちは!


    > × if ( found .and &status )
    >
    > 〇 if ( &found .and &status )
    >     ↑
    >   アンパサンド記号( & )を付けてください。


    分かりました!
    修正します!


    P.S.


    かなりじっくり咀嚼中です。

    必ず 感想 を返信しますので、少々お時間を下さいm(__)m


引用返信 [メール受信/OFF] 削除キー/
■498 / inTopicNo.52)  Re[3]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 18:31:40)
    ジェダイの桐さん

    > かなりじっくり咀嚼中です。
    > 必ず 感想 を返信しますので、少々お時間を下さいm(__)m

    どうぞどうぞ、ごゆっくり。 ^^) _旦~~


引用返信 [メール受信/OFF] 削除キー/
■499 / inTopicNo.53)  Re[2]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 22:54:30)
    2024/09/11(Wed) 23:14:50 編集(投稿者)

    ジェダイの桐さん

    ■「cmdCSV読み込み処理Click」の話をしよう パート2

    私( ONnoji )は、モードレスなフォームを複数個開いて、また複数個閉じてという作業に慣れています。

    そう、拙作:整形ユーティリティをご覧になればご理解いただけますよね。

    ということで、今回は紙と鉛筆でデザインのスケッチは省略して作り始めました。

    でも、ジェダイの桐さんのように慣れていない人は、

    紙と鉛筆でスケッチを描いて、大まかなイメージを作ってからPCの前に座る方がいいですよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    頭の中が整理されていない状態では、プログラミング作業は思うように進まないものです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    さて、プログラムを作る時のコツとして、「まず、一番面倒そうな部分を解決する」というのがあります。

    つまり、簡単な所はすべて後回しにして、一番重要な所から解決してゆくのです。

    今回の場合は、入荷トランザクション.tbx に 納品書CSV.csv を読み込む部分が一番重要なところになります。

    そこで、私( ONnoji )は真っ先に、[コマンドボタン:cmd納品書CSVを読み込む]を作り

     ** オブジェクト名: cmd納品書CSVを読み込む
     ** 標題     : cmd納品書CSVを読み込む  ※予約済みオブジェクト、削除しないでください
     **
     **  機能名    機能パラメータリスト
     ** 1 表示
     ** 2 解除     *
     ** 3 ジャンプ   終端
     ** 4 読み込み_CSV "納品書CSVを読み込む"

    動作を確認したワケです。 ※ちなみに、上のコマンドボタンの諸元は整形ユーティリティの[フォーム定義リスト]で出力できます。

    確認するポイントは、終端行にCSVを読み込んだ後に現在行の位置が何処になるのかということでした。
              ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    このコマンドボタンが出来てしまえば、すでに出来上がったも同然です。

    後はランチャーで発注トランザクションのフォームを開いたりといった余計な部分を付け足すだけです。

    もう一つ余計なものは、発注トランザクションのフォームへ &行番号の値を送信することです。

    それも、[HDLCOM]を使ってササっと解決サッ。(^^ok

    最後に、発注トランザクションのフォーム側に[HDLCOM]から送られたコマンドを実行する手続きを作って終わり。

    と、説明は以上ですが、よく理解出来ましたでしょうか????

    つまり、キモは一番核心になる部分を一番最初に解決するということですよ。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    その部分が解決したら、枝葉の部分を付け足してゆけば良いのです。

    だから、枝葉の部分から始めては駄目なのでした。
        ・・・・・・・・・・・・・

    これが、最も大切なコツですよ。

    後は、プログラムが正しく動いているかをテストするために[トレース出力]コマンドを挿入して、

    トレース出力の内容をチェックして作業を進めればOKです。

    p.s.

    今回は、当方の作業時間を短くするために[コマンドボタン:cmd納品書CSVを読み込む]を作りましたが、

    このコマンドボタンと等価な内容のプログラムを記述してもOKです。

    コマンドボタンを使うか、プログラムを使うかは、お好みで決めてください。

引用返信 [メール受信/OFF] 削除キー/
■500 / inTopicNo.54)  Re[12]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/11(Wed) 23:59:56)
    余談です。

    > 清書ユーティリティ 第2.0版が桐V9でも動作することを確認しました。 2002.11.01 ONnoji
    > 清書ユーティリティの構成
    >
    > ・清書ユーティリティ本体と6種類のツールで構成されています。
    >  それぞれのフォームはモードレスウィンドウです。
    > ・清書ユーティリティを使うには フォーム名:utx_list2 を開いてください。

    拙作:ランチャーの起源を調べていたら、2002年には実用化していたことが分かりました。


引用返信 [メール受信/OFF] 削除キー/
■501 / inTopicNo.55)  Re[3]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/12(Thu) 12:21:12)
    2024/09/12(Thu) 12:21:54 編集(投稿者)

    ONnojiさん


    こんにちは!


    通しで、sample_入荷トランザクション.kex と sample_発注トランザクション.kex を 落ち着いて読みました。


    私が一番やりたかった事は HDLCOMprcMacroSend だったんです。
    正に他フォームへの値 送信 ですね。


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

    感想


    HDLLNCprcWindowAppear について

    開きたい対象が

     既に開いている → &openStatus = 0
     新規に開いた  → &openStatus = 1

    シンプルに凄いと思いました。

    トレース出力で対象表を 開いた状態 と 閉じた状態 の両方でトレース出力をして
    &openStatus の値を実際に確認しました。 

    表が 開いている 閉じている を調べて 対応を変更しているという意味なんだと思います。

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

    HDLLNCprcHdlSeek について

    調べたい対象の ウィンドウハンドルを探索する

     これも凄く便利です。
     &targetFileName に フルパスのファイル名を代入すると
     
     &found
     &status
     &multi  それぞれに状態が入ってくる

     本当に良く出来た仕組みだと思いました。

    &mode は裏で動かす フラグなのでしょうか??
    それとも &mode も状態のお知らせなのですか??

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

    HDLCOMprcMacroSend について

    フォーム間で 値の送信が出来る素晴らしい仕組みです。

    何故、フォーム間での 値送信 がやりたかったか思い出しました。
    私の シックリくる こない の全てのスタート地点が

     ■14365 モジュール化はフォームのレベルでも必要

    なのです。

    相手側で 主 に直接影響を与えるアプローチは良くない の概念がここで生まれたのでした(^^ゞ

    あの時は、プログラムを書くこと自体がほぼ初めてでした。
    下手に固定概念が着く前に上記の概念を教えて頂いた事が私にとって物凄い幸運でした(^^♪

    それで 解決方法 &gAnswer を使ったアプローチサンプルをご提案頂きました。
    この時に "ピタゴラスイッチ" を覚えました。


    同一の ○○.kex 内であれば 手続きで 値渡し 若しくは 戻り値でピタゴラスイッチが作れます。


    複数のフォーム間であった時、 値渡し が出来れば 相手側に直接影響を与えず、
    ピタゴラスイッチ によって プログラム発動有無が決めれるのにな・・・


    という思いが 値送信 に固執したのです。
    明らかに、幅が広がりますよね(^^♪


    結果

    >>そうです、まさしく「こんにちは。モードレスA」でしょ。ガハハハha
    > はい!
    > これが一番やってみたかったのです。
    > これを具体的に利用する想定は無いのですが、値を 送信 したかったのです。
    > 常々思っている事なのですが、↑こういう発想をする人って案外と少ないと思いますよ。

    私の送信発想のは ONnojiさん がプログラム作成初期の私に教えてくれて、これが出来たら便利だと感じた事が原点なのでした(^^ゞ


    具体的に何かに使う想定が現時点ではありませんが、
    HDLCOMprcMacroSend によって ピタゴラスイッチ を送信出来る事が分かったので
    凄く有難いです。


    ありがとうございますm(__)m


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

    質問

    HDLCOMprcMacroSend で 整数 を送信したい場合は

     送る側
      &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + &WQ + #文字列( &int ) + &WQ + " )

     受け取る側
      手続き定義開始 prc整数を受け取る( 文字列 &variableName, 整数 &int )
        ・
        ・
        ・
       &setInt = #set( &variableName, &int )

    の様に &string を &int へ置き換えれば 対応可能でしょうか??


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

    p.s.


    > つまり、キモは一番核心になる部分を一番最初に解決するということですよ。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・
    > その部分が解決したら、枝葉の部分を付け足してゆけば良いのです。
    >
    > だから、枝葉の部分から始めては駄目なのでした。
    >     ・・・・・・・・・・・・・
    > これが、最も大切なコツですよ。


    アドバイスありがとうございます!
    このコツを念頭において、プログラム作成を行っていきます!


    > 後は、プログラムが正しく動いているかをテストするために[トレース出力]コマンドを挿入して、
    > トレース出力の内容をチェックして作業を進めればOKです。


    これは必須でやっています。
    トレース出力 で確認すると 流れ と その時の変数の値 が良く分かるので
    間違えた時 特定がし易くなります。


    p.p.s.


    > ここで、大事なのは、
    > オペレータが[コマンドボタン:cmdCSV読み込み処理]を実行する意思を持って押したのか?という事です。
    > 案外と押すつもりが無かったのに、うっかり押しちゃったということもあるんですよね。
    > だから、先回りする僭越な行為は要らないのです。
    > 何よりも大事なのは、オペレータが押したボタンが即応答する事なのです。
    >           ・・・・・・・・・・・・・・・・・・

    ONnojiさん のプログラムが凄いなと思う事は

    作業者がきっかけを与えるまで、単なる文字列 なんです。
    作業者がきっかけを与えた瞬間に、単なる文字列 に 意味が初めて生まれ
    しかも、ケースバイケースで 動いて行っている。


    上手く表現できないですが、意味を究極まで先送りして 結論を最後の最後で出しているイメージです。

    だから、結果の精度 が高いのだろう・・・
    と勝手に思っています。


    素人が思う事なので、全く見当違いかもしれませんが(T_T)


    今回も本当にありがとうございましたm(__)m

引用返信 [メール受信/OFF] 削除キー/
■502 / inTopicNo.56)  Re[4]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/12(Thu) 14:39:00)
    2024/09/12(Thu) 18:54:11 編集(投稿者)

    ジェダイの桐さん

    ■ HDLLNCprcWindowAppear

    > HDLLNCprcWindowAppear について
    > 開きたい対象が
    >
    >  既に開いている → &openStatus = 0
    >  新規に開いた  → &openStatus = 1
    >
    > シンプルに凄いと思いました。
    >
    > &openStatus の値を実際に確認しました。 
    > 表が 開いている 閉じている を調べて 対応を変更しているという意味なんだと思います。

    &openStatus は、新規に開いたか否かという情報があった方が良いかなと思ったのですが・・・

    案外と使い道がありません。

    無いよりはあった方がいい程度ですね。アハハハha


    ■ HDLLNCprcHdlSeek

    > HDLLNCprcHdlSeek について
    > 調べたい対象の ウィンドウハンドルを探索する
    >  これも凄く便利です。
    >  &targetFileName に フルパスのファイル名を代入すると
    >  &found
    >  &status
    >  &multi  それぞれに状態が入ってくる
    >  本当に良く出来た仕組みだと思いました。
    >
    > &mode は裏で動かす フラグなのでしょうか??
    > それとも &mode も状態のお知らせなのですか??

    &mode は、整数:&found のハンドル番号のウィンドウの編集状態です。

    この値は、フォームの[更新モード取得]メソッドが返す値に準拠しています。

    代入値 更新モード
       0 表示モード
       2 訂正モード
       4 行挿入モード
       6 行追加モード
       8 項目訂正モード(レコード更新を伴わない訂正も含む)
      33 グループ検索モード
      34 グループ値訂正モード
      36 グループ追加モード


    ■ HDLCOMprcMacroSend

    > HDLCOMprcMacroSend について
    > フォーム間で 値の送信が出来る素晴らしい仕組みです。
    > 何故、フォーム間での 値送信 がやりたかったか思い出しました。
    > 私の シックリくる こない の全てのスタート地点が
    >  ■14365 モジュール化はフォームのレベルでも必要
    > なのです。

     HDLCOMprcMacroSend は、&hdl で指定したフォームに桐で実行できるコマンドを送信する機能です。
                             ・・・・・・・・・・・・・・・・・・

     従って、変数を代入する静的なものではなく、コマンドまたはメソッドを実行する動的なものです。
                          ・・・・・・・・・・・・・・・・・・・・・

     例えば、変数:&hdl で指定したフォームに[確認]コマンドを送るには次のようにします。

      変数宣言 自動,文字列{ &targetFileName }
      変数宣言 自動,文字列{ &sendMacro }
      変数宣言 自動,整数 { &found, &status, &multi, &mode }
      変数宣言 自動,整数 { &hdl, &done }

      &targetFileName = #一括パス名 + "hoge.wfx"
      手続き実行 HDLLNCprcHdlSeek( &targetFileName, &found, &status, &multi, &mode )

      if ( &found .and &status ) /* フォームのウィンドウが見つかった */

       &sendMacro = "確認"
       &hdl = &found
       手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done )
      end


     <重要>
     [メッセージ(コマンド)送信器]があるのですから、[メッセージ(コマンド)受信機]もあります。
     センダーに対する、レシーバーですね。
     INF_Framework を組み込んだフォームでは、レシーバーは受信を許可した状態でセットアップされます。

     そして、INF_Framework を組み込んでいないフォームには、レシーバーがありませんから。
     当然ですが、メッセージ(コマンド)を送信できません。
     この場合には、桐のエラーにならずに、INF_Framework からメッセージでご案内します。
     つまり、あくまでも[ハリウッドの原則]が適用されているというわけです。(^^ゞ


    ■ [イベント駆動型]のアプローチに関して

    > 相手側で 主 に直接影響を与えるアプローチは良くない の概念がここで生まれたのでした(^^ゞ
    > あの時は、プログラムを書くこと自体がほぼ初めてでした。
    > 下手に固定概念が着く前に上記の概念を教えて頂いた事が私にとって物凄い幸運でした(^^♪
    > それで 解決方法 &gAnswer を使ったアプローチサンプルをご提案頂きました。
    > この時に "ピタゴラスイッチ" を覚えました。
    > 同一の ○○.kex 内であれば 手続きで 値渡し 若しくは 戻り値でピタゴラスイッチが作れます。
    > 複数のフォーム間であった時、 値渡し が出来れば 相手側に直接影響を与えず、
    > ピタゴラスイッチ によって プログラム発動有無が決めれるのにな・・・
    > という思いが 値送信 に固執したのです。
    > 明らかに、幅が広がりますよね(^^♪
    > 結果
    > >>そうです、まさしく「こんにちは。モードレスA」でしょ。ガハハハha
    >>はい!
    >>これが一番やってみたかったのです。
    >>これを具体的に利用する想定は無いのですが、値を 送信 したかったのです。
    >>常々思っている事なのですが、↑こういう発想をする人って案外と少ないと思いますよ。
    > 私の送信発想のは ONnojiさん がプログラム作成初期の私に教えてくれて、これが出来たら便利だと感じた事が原点なのでした(^^ゞ

    DOS桐から桐ver.7までの相当長い期間、桐の利用者は[フロー駆動型]の一括処理でプログラムを書いていたのです。

    そして、桐ver.8で[イベント駆動型]の「フォーム+イベント処理」が作れるようになっても、

    決して、一括処理でプログラムを書くことを止めようとはしなかったのですね。

    理由はいろいろありますね。

    桐ver.8では

    ・「フォーム+イベント処理」で使用するコマンド・メソッド・イベントハンドラ等に虫が多かった
    ・これらの虫の多くが fix されたのは、ようやく桐ver.8 sp6 になってからです
    ・従って虫が多いので使用を躊躇した人が多い

    という技術的な側面↑と

    以下↓の

    ・[フロー駆動型]の一括処理に慣れていたので、[イベント駆動型]を理解出来ない人が多かった
    ・従って「フォーム+イベント処理」でアプリケーションが作れると思わなかった人が多かった ※コレ、本当なんですよゾ〜
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    という具合に、[フロー駆動型]から[イベント駆動型]へのパラダイムシフトに追従できない人が多かったと思いますよ。

    脳の思考が[フロー駆動型]なのですから、フォームやフォーム上のオブジェクトが[ピタゴラ装置]として目に映らないんですよ。

    [ピタゴラ装置]に見えないのですから、力ずくで何とかしようと悪戦苦闘するんですね。

    それだったら、最初から[フロー駆動型]の一括処理の方がマシでしょう的な「フォーム+イベント処理」を作っちゃうのですよ。

    これは悲劇ですよね。(T_T)

    そうならない為には、脳の思考を[フロー駆動型]から[イベント駆動型]へ大転換しなければなりません。

    私( ONnoji )は、その事をパラダイムシフトと呼んでいるのです。

    そして、DOS桐からの桐のユーザには、このパラダイムシフトが上手に出来ない人が多いのですよ。

    しかし、Win桐から始めた桐のユーザはむしろ[フロー駆動型]の方が分かり難いと思います。

    また、最近のWin桐では、一括処理のサンプルは添付されなくなりました。

    これも、時代の移り変わりを反映していると思いますよ。

    <つづく>


引用返信 [メール受信/OFF] 削除キー/
■503 / inTopicNo.57)  Re[5]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/12(Thu) 16:33:25)
    2024/09/12(Thu) 17:15:48 編集(投稿者)

    ジェダイの桐さん

    > 質問
    >
    > HDLCOMprcMacroSend で 整数 を送信したい場合は
    >
    >  送る側
    >   &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + &WQ + #文字列( &int ) + &WQ + " )
    >
    >  受け取る側
    >   手続き定義開始 prc整数を受け取る( 文字列 &variableName, 整数 &int )
    >     ・
    >     ・
    >     ・
    >    &setInt = #set( &variableName, &int )
    >
    > の様に &string を &int へ置き換えれば 対応可能でしょうか??

    なんと、&m伝票番号 は文字列型変数だとお伺いしていましたが???

    伝票番号というのは、足したり引いたり掛けたり割ったり(四則演算)の対象ではないでしょ。

    ただ数字を使っているからという理由で数値として扱うのはどうでしょうかね。

    私( ONnoji )は、日頃から合計や平均を求めたりしない符丁(コード)の類は文字列であると説明していますが・・・

    大抵の場合、入力時のチェックの都合だけなんですよね。
          ・・・・・・・・・・・・・・・・・

    フォームのテキストボックスに入力された文字が、すべて数字なのか否かのようなチェックはイベントで簡単なんですけれどねぇ〜。

    まあ、表に直接入力するからという切実な理由も分からないでも無いですが、基本的に感心しませんねぇ〜。
       ・・・・・・・・・・・・・・・・・・

    よく考えてください、

    もしも、伝票番号が文字列型であれば、先頭からn文字めまでを指定して絞り込み(検索)ができますよね。

    しかし、伝票番号が文字列型であれば、面倒な式を使わなければならないでしょう。

    まあ、プログラムの作り方は自由ですから、これ以上余計な事は申し上げませんけれど・・・ (ーー;)--------------> ※遠い目線


    × &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + &WQ + #文字列( &int ) + &WQ + " )"

    〇 &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + #文字列( &int ) + " )"


    もしも、整数型 &int の値が、123456 だったとすると

    ×  &comma + &WQ + #文字列( &int ) + &WQ + " )" → ,"123456" )

    〇  &comma + #文字列( &int ) + " )"       → ,123456 )

    と文字を連結するだけですから、難しく考える必要はありませんよ。

    でもこの手の連結は初級者が一番不得意とするものの一つなんですね。

    &comma は コンマ( , )

    &WQ  は 二重引用符( " )つまり、ダブル・クォーテーション 本当は &DQ なんでしょうけれど、私は &WQ を使います

    もしも、変数を使わないで記述すると・・・

    リテラルで書くと &sendMacro = "手続き実行 prc整数を受け取る( ""m伝票番号""," + #文字列( &int ) + " )"

    変数を使うと   &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + #文字列( &int ) + " )"

    リテラルで書くと、失敗する人が後を絶たないんですよね。ガハハハ

    なお、

     &setInt = #set( &variableName, &int )

    の変数:&setInt は整数型ですね。もちろんでしょ。アハハハ

    ちなみに、なぜ #set 関数を使用したのかを説明しましょう。

    それは、もしも、変数:&m伝票番号 が存在しなかった場合でも、エラーにならないようにしたからです。

    もしも、間違いなく、&m伝票番号 が存在するのであれば、

     &setInt = #set( &variableName, &int )

      は

     &m伝票番号 = &int

      でも結果は同じです。

    後者の方がそのものズバリ、直感的で分かり易いでしょうね。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >>ここで、大事なのは、
    >>オペレータが[コマンドボタン:cmdCSV読み込み処理]を実行する意思を持って押したのか?という事です。
    >>案外と押すつもりが無かったのに、うっかり押しちゃったということもあるんですよね。
    >>だから、先回りする僭越な行為は要らないのです。
    >>何よりも大事なのは、オペレータが押したボタンが即応答する事なのです。
    >>          ・・・・・・・・・・・・・・・・・・
    > ONnojiさん のプログラムが凄いなと思う事は
    > 作業者がきっかけを与えるまで、単なる文字列 なんです。
    > 作業者がきっかけを与えた瞬間に、単なる文字列 に 意味が初めて生まれ
    > しかも、ケースバイケースで 動いて行っている。
    > 上手く表現できないですが、意味を究極まで先送りして 結論を最後の最後で出しているイメージです。
    > だから、結果の精度 が高いのだろう・・・
    > と勝手に思っています。
    > 素人が思う事なので、全く見当違いかもしれませんが(T_T)

    当たり前ですが、アプリケーションはユーザに満足感を与えるようなデザインにするべきだと思っています。

    私( ONnoji )は、オペレータを無視した開発者の独りよがりのアプリケーションを嫌と言うほど見てきました。

    最悪の例としては、これはDOS桐の一括処理でしたが、月次の支払い業務を行う一括処理でしたね。

    経理の担当者が、この一括処理を実行するワケですが、一度でも実行開始すると、途中で止められないんですよ。

    信じられないでしょう。

    途中で休憩して続きを行うなんて事は、想定外の更に外なんですね。

    もちろん、この一括処理を作った人は、ずぶの素人さんです。その会社の経営者ですよ。

    当時、書店で市販されている「桐の参考書」を購入して、ほぼ丸写して出来上がった一括処理です。

    とにかく、すごいんですヨ。もちろん良い意味ではなく正反対の意味でスゴイ!

    経営者自らが作ったアプリケーションを引き継いだ経理担当者は、文句が言えずにそのまま使うしかないんですね。

    今だったら、パワハラですね。

    そして、内容を拝見すると、[手続き実行]コマンドが一切使われていなくて、[名札]と[分岐]だけで茹で上がったスパゲッティプログラムなんですよ。

    このような悲惨な事例はきっと世の中に星の数ほどあるだろうなと思ったワケです。

    おそらく、今でも「プロセス(処理)中心」でアプリケーションを設計して、

    さらにユーザインタフェースが劣悪なアプリケーションが山のようにあるのではないでしょうかね。(>_<)

    これは、桐だけに限りませんよ、アクセスでもエクセルでも、高額な開発費をつぎ込んだソフトウェアでも同じです。

    だいぶ脱線しましたが・・・(^^ゞ

    月並みではありますが

    良いアプリケーションを開発するには

    ・スパゲッティではないプログラムを心掛けること ⇒ ネットや書籍でプログラムの制御構造の正確な知識を学習する事

    ・データ中心の設計をすること

    ・良いユーザインタフェースを作る ⇒ ネットや書籍でユーザインタフェースの学習をする事

    が大事だろうと思いますね。


    ちなみに、もっともおろそかになり易いのは、ユーザインタフェースの学習です。

    その中で、古典中の古典として

     ベン・シュナイダーマン|フリー百科事典『ウィキペディア(Wikipedia)』
     https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%8A%E3%82%A4%E3%83%80%E3%83%BC%E3%83%9E%E3%83%B3

    の「インターフェースデザインの8原則」くらいは覚えておいてください。

    最近では、ネットで秀逸なページが閲覧できるので、以下のキーワードでググってみてください。

     対話設計における8つの黄金律

     Eight Golden Rules in Dialogue Design または Eight Golden Rules of Interface Design

    例えばこちら 英語のページですが日本語に切り替えれば読めますよ

    HOME / ブログ / シュナイダーマンのインターフェースデザインの8つの黄金律
    https://userpeek.com/blog/shneidermans-eight-golden-rules-of-interface-design/

    ちなみに、私( ONnoji )がベン・シュナイダーマンの翻訳書籍に出会ったのは30年以上前のことでしたっけ。アハハハha




引用返信 [メール受信/OFF] 削除キー/
■504 / inTopicNo.58)  Re[6]: Thin_INF_Framework のご案内
□投稿者/ ジェダイの桐 -(2024/09/12(Thu) 17:05:12)
    ONnojiさん


    こんにちは!


    すみませんm(__)m
    上手く説明が出来ていませんでした。


    &m伝票番号 は 文字列型であっています。


    例えば 整数 &mAns を送信する場合は どうしようかなと思って質問したんです。


    あの質問の仕方であれば、&m伝票番号 が 整数型 だと思われます。
    誤解を与えてしまい申し訳ありませんでしたm(__)m

    > 〇 &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + #文字列( &int ) + " )"
    > 〇  &comma + #文字列( &int ) + " )"       → ,123456 )

    > と文字を連結するだけですから、難しく考える必要はありませんよ。
    > 変数を使うと   &sendMacro = "手続き実行 prc整数を受け取る( " + &WQ + "m伝票番号" + &WQ + &comma + #文字列( &int ) + " )"

    >  &setInt = #set( &variableName, &int )
    > の変数:&setInt は整数型ですね。もちろんでしょ。アハハハ
    > ちなみに、なぜ #set 関数を使用したのかを説明しましょう。

    > それは、もしも、変数:&m伝票番号 が存在しなかった場合でも、エラーにならないようにしたからです。
    > もしも、間違いなく、&m伝票番号 が存在するのであれば、
    >
    >  &setInt = #set( &variableName, &int )
    >
    >   は
    >
    >  &m伝票番号 = &int
    >
    >   でも結果は同じです。
    >
    > 後者の方がそのものズバリ、直感的で分かり易いでしょうね。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・


    非常に分かりやすい解説 ありがとうございますm(__)m


    > 良いアプリケーションを開発するには
    >
    > ・スパゲッティではないプログラムを心掛けること ⇒ ネットや書籍でプログラムの制御構造の正確な知識を学習する事
    >
    > ・データ中心の設計をすること
    >
    > ・良いユーザインターフェースを作る ⇒ ネットや書籍でユーザインターフェースの学習をする事
    >
    > が大事だろうと思いますね。


    こちらを念頭に置いて、勉強してきます。
    アドバイスありがとうございます。


    > ちなみに、もっともおろそかになり易いのは、ユーザインターフェースの学習です。
    >
    > その中で、古典中の古典として
    >
    >  ベン・シュナイダーマン|フリー百科事典『ウィキペディア(Wikipedia)』
    >  https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%8A%E3%82%A4%E3%83%80%E3%83%BC%E3%83%9E%E3%83%B3
    >
    > のインターフェースデザインの8原則くらいは覚えておいてください。
    >
    > 最近では、ネットで秀逸なページが閲覧できるので、以下のキーワードでググってみてください。
    >
    >  対話設計における8つの黄金律
    >
    >  Eight Golden Rules in Dialogue Design または Eight Golden Rules of Interface Design
    >
    > 例えばこちら 英語のページですが日本語に切り替えれば読めますよ
    > ↓
    > HOME/ ブログ / シュナイダーマンのインターフェースデザインの8つの黄金律
    > https://userpeek.com/blog/shneidermans-eight-golden-rules-of-interface-design/


    ご紹介ありがとうございますm(__)m
    記事を読ませて頂きます!


引用返信 [メール受信/OFF] 削除キー/
■505 / inTopicNo.59)  Re[7]: Thin_INF_Framework のご案内
□投稿者/ ONnoji -(2024/09/12(Thu) 19:16:00)
    ジェダイの桐さん

    > 最近では、ネットで秀逸なページが閲覧できるので、以下のキーワードでググってみてください。
    >
    > 対話設計における8つの黄金律
    >
    > Eight Golden Rules in Dialogue Design または Eight Golden Rules of Interface Design

    8つの黄金律 でググると日本語のページが見つかりますね。

    例えばこちら
     ↓
     Shneiderman氏の「インターフェイスデザインの8つの黄金律」とは | UX MILK
     https://uxmilk.jp/64295

    日本語と翻訳された日本語では、微妙に違うことがありますが、

    元々はインターネットもスマホも無い時代のものですから、
    ・・・・・・・・・・・・・・・・・・・・・・・・

    時代と共に、解説が少しづつ変化しているようです。
    ・・・・・・・・・・・・・・

    もちろん大枠では何も変わっていないのですが、

    具体例が、コンピュータ → スマホ、

    アプリケーション → webブラウザ

    といったように変化していることがありますよ。



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

<前の20件

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

このトピックに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -