DOWN LOAD BBS

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

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

■556 / inTopicNo.21)  Re[11]: Thin_INF_Framework ベータ2のご案内
  
□投稿者/ ONnoji -(2024/10/23(Wed) 14:40:01)
    ジェダイの桐さん

    > 表(中身は空。生産計画を表の枠組で書き出した) イベント フォーム
    > を添付します。

    ダウンロードしましたので削除してください。

    >>2.表の[書き出し条件:表の枠組み]の右向き黄色△を押して、"作業用forIPS_form"が登録されているか確認します。
    > こちらは、メッセージボックスが出た後確認したら 作成出来ていました。
    >
    >>p.s.
    >>当方の環境では、参照で開いても"作業用forIPS_form"が登録出来ちゃうんですよね。
    > 私も参照で開いても "作業用forIPS_form" の登録は出来る様です。

    同じですね。(^^ゞ

    > イベントは Thin用 ではなく オートモダン用 を使用していますので、
    > INFprcStartup( )が存在 がない事までは確認出来ました。

    了解しました。

    >>当方の桐環境は、
    >>桐10s
    >>桐ビルド番号: #2545 です。
    > 私の環境も #2545 でした。

    これも了解です。

    >>[書き出し条件:表の枠組み]に登録されている条件名が、すでに 50 個あったりしませんよね???。
    > はい。 ありませんでした。

    そうですよね。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    添付の表(.tbx)は、 #表引き関数が使ってあったため開けませんでしたので削除しました。

    普通に開けますね。

    だとすれば、表(.tbx)を別名で複写して、再定義で #表引き関数を削除したものを使って、
          ・・・・・・・・・・   ・・・・・・・・・・・・・

    どうなるか??ですかね。

    エラーを調べるには、いろいろ試してみないとワカラナイですね。(>_<)




引用返信 [メール受信/OFF] 削除キー/
■557 / inTopicNo.22)  Re[12]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/23(Wed) 15:54:06)
    ONnojiさん


    こんにちは!


    表引き関数が影響しているのであろう、と言う事を自分でも確認しました。

    生産計画.wfx 使用時

     表引き関数 有 → 思い通りにならない
     表引き関数 無 → 思い通りになる

    生産計画2.wfx 使用時

     表引き関数 有 → 思い通りになる


    とりあえず、この問題は後回しにして、進められる箇所のプログラム作成と
    Thin_INF_Framework への 組み込み を進めます(^^♪

引用返信 [メール受信/OFF] 削除キー/
■558 / inTopicNo.23)  Re[13]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/23(Wed) 16:43:01)
    ジェダイの桐さん

    > 表引き関数が影響しているのであろう、と言う事を自分でも確認しました。
    > 生産計画.wfx 使用時
    >  表引き関数 有 → 思い通りにならない
    >  表引き関数 無 → 思い通りになる
    >
    > 生産計画2.wfx 使用時
    >  表引き関数 有 → 思い通りになる


    やっぱりですね。

    ちなみに、私は #表引き()関数よりも、[表定義の表引き機能]を使う方が好みです。

    案外知られていませんが、[表定義の表引き機能]でも、検索先のマスタ表に重複禁止の索引があれば、

    自動的に値が複写されるのですけれどねぇ〜。

    それを知らないから、項目計算式で #表引き()関数を使う人がとても多いんですよ。ガハハハ。

    ちなみに、項目計算式で #表引き()関数だと、再計算した時にパフォーマンスに負荷がかかるのですが、

    Windows マシンは速いし、キャッシュも効いているので気のしない人が多いですね。

引用返信 [メール受信/OFF] 削除キー/
■559 / inTopicNo.24)  Re[1]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/24(Thu) 00:30:17)
    2024/10/24(Thu) 00:38:40 編集(投稿者)

    ジェダイの桐さん

    生産計画.wfx を調べていたところ、

    生産計画.tbx の[項目の表示条件]に存在しない項目名がたくさん記述されていることが分かりました。

    つまり、<式に含まれる項目名>が存在しないのでエラーになるという種類です。

    しかし、表を見ている限りでは気が付きません。

    当方が気が付いたのは、モダンフォームが[項目の表示条件]を読み取って、テキストボックスの編集属性式を作っていたからです。

    そんな項目ないよ!、というエラーです。

    これも、[トレース出力]ウィンドウを表示しないと気が付きません。(^^ゞ ※添付画像を参照

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    項目
    番号 項目名
    1   連番
    2   生産ロット
    3   生産工場コード
    4   生産ラインコード
    5   生産ライン名
    6   品番
    7   塗色コード
    8   張地コード
    9   商品名
    10  塗色名
    11  張地名
    12  計画数量
    13  前計画数
    14  完成数
    15  未完成数
    16  前日未完成
    17  作成日付
    18  生産日
    19  生産確定
    20  生産日(曜日)
    21  完成予定日
    22  出荷リードタイム
    23  完成日
    24  出荷日
    25  納品日

    項目
    番号 [項目の表示条件]
    1  &commandline = ([未完成数]=0) CB11, ([廃番年月]≠0 .or [廃番区分]=2) CB35
    2  &commandline = ([廃番年月]≠0 .or [廃番区分]=2) CB35
    3  &commandline = ([未完成数]=0) CB11, ([塗色区分]=2) FY"B" CB35
    4  &commandline = ([塗色区分]=2) FY"B" CB35
    5  &commandline = ([未完成数]=0) CB11, ([入荷日1]≠#未定義) CB1, ([張地区分]=2) FY"B" CB35
    6  &commandline = ([入荷日1]≠#未定義) CB1, ([張地区分]=2) FY"B" CB35
    7  &commandline = ([張地区分]=2) FY"B" CB35
    8  &commandline = ([未完成数]=0) CB11, ([品番区分]=2 .or [塗色区分]=2 .or [張地区分]=2 .or [廃番年月]≠0) FY"B" CB35, ([初回生産]="◎") CB37, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CC1 CB3
    9  &commandline = ([品番区分]=2 .or [塗色区分]=2 .or [張地区分]=2 .or [廃番年月]≠0) FY"B" CB35, ([初回生産]="◎") CB37, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CC1 CB3
    10  &commandline = ([初回生産]="◎") CB37, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CC1 CB3
    11  &commandline = ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CC1 CB3
    12  &commandline = ([未完成数]=0) CB11, ([塗色区分]=2) FY"B" CB35, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CB3
    13  &commandline = ([塗色区分]=2) FY"B" CB35, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CB3
    14  &commandline = ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CB3
    15  &commandline = ([未完成数]=0) CB11, ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CB3, ([張地区分]=2) FY"B" CB35, ([張地年月]≠0) CB48
    16  &commandline = ([レギュラー区分]≧1 .and [出荷先倉庫コード]<800) CB3, ([張地区分]=2) FY"B" CB35, ([張地年月]≠0) CB48
    17  &commandline = ([張地区分]=2) FY"B" CB35, ([張地年月]≠0) CB48
    18  &commandline = ([張地年月]≠0) CB48
    19  &commandline = ([未完成数]=0) CB11, ([入荷日1]≠#未定義) CC43
    20  &commandline = ([入荷日1]≠#未定義) CC43
    21  &commandline = ([未完成数]=0) CB11, ([生産確定]="○") CC26, ([別注備考]≠#未定義) CB4
    22  &commandline = ([生産確定]="○") CC26, ([別注備考]≠#未定義) CB4
    23  &commandline = ([別注備考]≠#未定義) CB4
    14  &commandline = ([未完成]=0) CB11
    25  &commandline = ([未完成数]=0) CB11

    ↑上の[項目の表示条件]で<式に含まれる項目名>でエラーになったもの

     エラー :KD1130:未定義の項目名があります [廃番年月](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [塗色区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [入荷日1](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [張地区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [品番区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [初回生産](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [レギュラー区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [塗色区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [レギュラー区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [レギュラー区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [張地区分](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [張地年月](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [入荷日1](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [別注備考](D:\〇〇〇1729660260\調査\生産計画.tbx )
     エラー :KD1130:未定義の項目名があります [未完成](D:\〇〇〇1729660260\調査\生産計画.tbx )

    以上

引用返信 [メール受信/OFF] 削除キー/
■560 / inTopicNo.25)  Re[1]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/24(Thu) 09:28:45)
    2024/10/24(Thu) 09:39:28 編集(投稿者)

    ONnojiさん


    おはようございます!

    色々調査して貰ってすみませんm(__)m

    私は、今いったんあの件から離れ、プログラムを書いているのですが、
    ふと思いついた事を実験してみました。


    以前、ONnojiさんは、Thin_INF_Frameworkでタイマーイベントの自作は不具合が起きると教えてくれました。


    では、タイマーイベントを使いたい時はどうするの?
    と、突然思ったのです。(私自身が今タイマーイベントを使いたいと言う事ではありません)


    またまた、突然思いついたのですが、その為の HDLCOMprcMacroSend じゃないかと。


    ONnojiさんは、フォームとフォームもモジュールと見做せるよとヒントをくれています。


    そもそも、プロシージャ(モジュール)とプロシージャ(モジュール)ですよね(^^♪
    なので、HDLLNCprcHdlSeek の &targetFileName に自分自身を入力して
    タイマーイベントで使用したい手続きを &sendMacro に 代入して
    HDLCOMprcMacroSend を行いました。


    結果、HDLCOMprcMacroSend を使用した手続きが終了後
    自身のフォームの タイマー2イベントが発動しました(^^ゞ
    こちらの現象をトレース出力で確認しております。


    当たり前の結果なのですが、朝から凄くテンションが上がりました(^^♪


    p.s.

    これは、モジュール と モジュール の結合度を弱く保つ為の本当に良くできた仕組みだと思いました!

    結合度の知識は表面的にしかまだ分かっていませんが、最近結構調べています。
    但し、独学なのでインターネットで出てくる情報の正確性をフィルタリング出来ないので、間違って理解する可能性もあります・・・(T_T)

引用返信 [メール受信/OFF] 削除キー/
■561 / inTopicNo.26)  Re[2]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/24(Thu) 10:56:47)
    2024/10/24(Thu) 16:53:47 編集(投稿者)

    ジェダイの桐さん

    > 以前、ONnojiさんは、Thin_INF_Frameworkでタイマーイベントの自作は不具合が起きると教えてくれました。
    > では、タイマーイベントを使いたい時はどうするの?
    > と、突然思ったのです。(私自身が今タイマーイベントを使いたいと言う事ではありません)

    タイマーイベントは、時限式タイマーとして使うのが基本だと思います。

    ところが、桐ver.8 では連続式タイマーを使った「アナログ時計フォーム」のサンプルが添付されていたために、

    タイマーイベントを連続式タイマーだと思った人がほぼ100%でした。

      11 [タイマー]イベントの動的セット|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
      http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section11

    ちなみに、1995年頃の Visual Basic(ビジュアルベーシック)の有名な自習書でも「アナログ時計」を作例にしていた位なのですから、

    それも無理からぬことかと思いますけれど・・・(^^ゞ

    ちなみに、現在の桐では「アナログ時計フォーム」のサンプルは姿を消していると思います。

    私( ONnoji )の個人的な感想としては、時計のようなガジェット(ウィジット)をフォームで作る必要を全く感じません。

    時計ならば、Windowsのタスクバーに表示されているのですから・・・

     ◇ ◇ ◇ ◇ ◇

    > またまた、突然思いついたのですが、その為の HDLCOMprcMacroSend じゃないかと。
    > ONnojiさんは、フォームとフォームもモジュールと見做せるよとヒントをくれています。
    > そもそも、プロシージャ(モジュール)とプロシージャ(モジュール)ですよね(^^♪
    > なので、HDLLNCprcHdlSeek の &targetFileName に自分自身を入力して
    > タイマーイベントで使用したい手続きを &sendMacro に 代入して
    > HDLCOMprcMacroSend を行いました。
    > 結果、HDLCOMprcMacroSend を使用した手続きが終了後
    > 自身のフォームの タイマー2イベントが発動しました(^^ゞ
    > こちらの現象をトレース出力で確認しております。

    なるほど!。

    自分自身のフォームのハンドル番号:&hwindow はシーカーを使うまでも無く自明ですから、

    確かに自分自身のフォーム(ハンドル番号:&hwindow)にメッセージを送れば良いハズです。

    想定外の使い方ですが、当然動くと思います。アハハハハha

    「タイマーイベントを自作しないでください」という意味は、

    自作のタイマーイベントを作ると、INF_Framework の機能を阻害する可能性があるからですよ。

    つまり、「危ないからやめて頂戴ね」という意味です。(^^ゞ

    でも、どうしてもタイマーイベントを使いたいのであれば、

    次のように出来ます。(^^v

     手続き定義開始 cmdTestClick( )
      変数宣言 自動,文字列{ &icon, &title = "cmdTestClick( )", &msg }
      変数宣言 自動,文字列{ &string }

      &string = "手続き実行 INFprcWhoAreYou( )"
      手続き実行 INFprcMacro( &string )

     手続き定義終了

    ↑これは見ての通りで、"手続き実行 INFprcWhoAreYou( )"というメッセージ(桐で実行できるコマンドまたはメソッド)を送っているわけです。

    なので、もしもタイマー経由でなにか実行したいと思った時には、

     手続き実行 INFprcMacro( &string )

    を使ってください。

    なお、この手続きは[タイマー2]イベントを使います。

    INF_Framework では、[タイマー1]イベントと[タイマー2]イベントの両方を使います。

    [タイマー1]は、ユーティリティ系 … 交感神経みたいな(サービス系)

    [タイマー2]は、フレームワーク系 … 副交感神経みたいな(基幹系)

    です。

    > これは、モジュール と モジュール の結合度を弱く保つ為の本当に良くできた仕組みだと思いました!
    > 結合度の知識は表面的にしかまだ分かっていませんが、最近結構調べています。
    > 但し、独学なのでインターネットで出てくる情報の正確性をフィルタリング出来ないので、間違って理解する可能性もあります・・・(T_T)

    モジュールという考え方は、交換可能な単位のユニットという意味ですね。

    手続きだって、フォームだって、交換可能な単位のユニットでしょう。

    だから、結合度は弱い方が良いのです。

    もしも、結合度が高ければ、交換不能になってしまうでしょう。

    モージュールは、部品と考えてもいいですよ。

    もしも、不良な部品があったとすれば、簡単に部品を交換できなければ困るでしょ。

    部品どうしが接着されていたり、溶接されていたら、簡単に交換できないでしょう。

    簡単に交換できない部品は、モジュールと呼べないですよね。

    モジュールや結合度という言葉は、ITパスポートの参考書などを読んでみてください。

    ネットの記事は、「なんちゃって〜」系の軽薄なものから、非常に専門的なものまでさまざまあり、取捨選択に困ると思いますよ。

    <参考>

    ┌when 手続き"cmdTestClick( )"を実行開始しました

    │┌when 手続き"INFprcMacro("手続き実行 INFprcWhoAreYou( )")"を実行開始しました
    ││
    ││┌when 手続き"INFprcTimerSecondaryON("&INFmOnMacro",10)"を実行開始しました
    ││└end
    ││
    │└end

    └end

    ┌when 手続き"フォーム::タイマー2( )"を実行開始しました

    │┌when 手続き"INFprcEventTimerSecondaryRun( )"を実行開始しました
    ││
    ││┌when 手続き"INFprcTimerSecondaryOFF( )"を実行開始しました
    ││└end
    ││
    ││┌when 手続き"INFprcWhoAreYou( )"を実行開始しました
    │││
    │││┌when 手続き"INFprcFileStatus("D:\kiri\ガントチャート_ベータ … )"を実行開始しました
    ││││
    ││││┌when 手続き"INFprcInfoTxtFileNameGet( )"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFprcFileLastUpdateGet("D:〇〇〇査\生産計画.wfx",,)"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFprcFileLastUpdateGet("D:〇〇〇査\生産計画.kex",,)"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFprcFileLastUpdateGet("D:〇〇〇査\INF_Framework.cmx",,)"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFprcFileLastUpdateGet("D:〇〇〇査\IPS_Framework.cmx",,)"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFCNVprcStringExtensionConv("D:〇〇〇査\INF_MNU.wfm")"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFCNVprcStringExtensionConv("D:〇〇〇査\INF_LNC.wfm")"を実行開始しました
    ││││└end
    ││││
    ││││┌when 手続き"INFprcMsgPause("i","INFprcFileStatus( )","INF Framework のファイル情報 … \n終了時実行コマンドボタン:( not found )")"を実行開始しました
    ││││└end
    ││││
    │││└end
    │││
    ││└end
    ││
    │└end

    └end

    p.s.

     ■名称:時限タイマー(タイマー2を使ってコマンド、またはメソッドを実行する)

      手続き名(引数):INFprcMacro( &string )

      値渡し引数:

       文字列/ &string … 桐で実行可能なコマンド、またはメソッドを代入する

      使い方( usage ): 

       変数宣言 自動,文字列{ &string }

       &string = "手続き実行 INFprcWhoAreYou( )"
       手続き実行 INFprcMacro( &string )

      (参考)この手続きは、以下の手続きと等価です。

       &hdl = &hwindow
       手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done )

      (重要)

       INF_Framework を利用する時には、自作の[タイマー1][タイマー2]は作らないでください。
       もしも、これらのイベントハンドラを自作すると、INF_Framework の機能が阻害されます。
       タイマーを利用したプログラミングを行う時には、INFprcMacro( &string )を使用してください。


引用返信 [メール受信/OFF] 削除キー/
■562 / inTopicNo.27)  Re[3]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/24(Thu) 17:39:34)
    ONnojiさん


    こんにちは!

    質問です。

     Thin_INF_Framework 若しくは INF_Frameworkで
     メソッド呼び出し @フォーム.変数変更()

    は使用可能ですか?

    @フォーム が 弾かれたので 具多的に @txtmNotice に置き換えました。
    今度は
    変数変更() が 弾かれました。

    なので @txtmNotice.変数変更() 自体をコメントアウト しました。
    結果 txtmNotice に表示したいお知らせが表示されました。


    メソッド呼び出し をしなくても、
     
     &mNotice に お知らせする文字列を代入する
     ソース値 #変数( "txtmNotice" ) を指定している txtmNotice に即反映される

    様になっているのかと推測しました。

    この認識で合っていますか(?_?) 


    認識が違うとしたら、単純に私のプログラムミスなんだと思います。
引用返信 [メール受信/OFF] 削除キー/
■563 / inTopicNo.28)  Re[4]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/24(Thu) 22:40:24)
    2024/10/25(Fri) 08:54:17 編集(投稿者)

    ジェダイの桐さん

    > 質問です。
    >  Thin_INF_Framework 若しくは INF_Frameworkで
    >  メソッド呼び出し @フォーム.変数変更()
    > は使用可能ですか?

    INF_Framework は、メソッドを制限することはありませんよ。

    つまり、INF_Framework はメソッドとは無関係です。

    濡れ衣を着せないでね。(ーー;)--------------> ※遠い目線

    > @フォーム が 弾かれたので 具多的に @txtmNotice に置き換えました。
    > 今度は
    > 変数変更() が 弾かれました。
    > なので @txtmNotice.変数変更() 自体をコメントアウト しました。
    > 結果 txtmNotice に表示したいお知らせが表示されました。

    「弾かれました」では私を含めて誰も意味を理解できませんよ。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これは、「上手くいきません」と表現するのと五十歩百歩ですね。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    > メソッド呼び出し をしなくても、
    >  &mNotice に お知らせする文字列を代入する
    >  ソース値 #変数( "txtmNotice" ) を指定している txtmNotice に即反映される
    > 様になっているのかと推測しました。
    > この認識で合っていますか(?_?) 

    ほぼ合ってますよ。しかし、例外もありますよ。
    ・・       ・・・・・・・・・・・

    普通の場合には、何かやらかす(乱暴な言い方で失礼)と、変数をソースとしたテキストボックスも、
            ・・・・・・・・・・・・・・・・・・

    再描画(リドロー)されます。
    ・・・・・・・・・・・・・

    ところが、この再描画(リドロー)がサボられるケースがあるんですよ。
           ・・・・・・・・・・・・・・・・・・・・・

    よく考えてみてください!。

    コマンドを実行する度に、フォームの画面を再描画(リドロー)していたら、とても能率が悪いですよね。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    それこそ、通信速度が遅いネットの動画のようになってしまいます。※これ重要です!
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だから、再描画(リドロー)のタイミングは、コマンドを実行する度ではなくて、[手続きがの流れ]が終了した時になるのが普通です。
                                         ・・・・・・・・・・・・・・・・・・・・・・
    しかし、桐システムが再描画(リドロー)する必要を感じないケースもあるのですよ。※忘れたのではなく、必要を感じていないからです
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    webブラウザも同じでしょう。キャッシュばかり表示していて、なかなかリドローしてくれないですよね。(^^ゞ
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    だから、強制的に再描画(リドロー)したい場合には、変数変更()というメソッドを使うわけです。

    ジェダイの桐さん、[桐 - ヘルプ]も読んでください。

    最初は分かり難くても、いつかそのうちに意味が理解できるようになりますよ。
               ・・・・・・・・・・・・・・・・・・・・・・・・

      [桐 - ヘルプ]より

       メソッド呼び出し 変数変更

       ■説明
       ・変数を使用しているフォーム上のオブジェクトを、すべて再描画するよう予約します。
                               ・・・・・・・・・・・・・・・

       ・予約した再描画は、イベントハンドラがすべて終了したときに実行されます。
                 ・・・・・・・・・・・・・・・・・・・・・・・・・

       ・イベントハンドラ内(または一括処理内)で変更した変数の値は、そのままではフォーム上に反映されません。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
        このメソッドを使用して、対象オブジェクトの再描画を予約する必要があります。

       ・[テキスト]オブジェクトで入力中の変数値は、このメソッドで更新できません。
         [テキスト]オブジェクトで入力中の変数値を更新する場合は、[編集文字列設定]メソッドを使用してください。

       ・[サブフォーム名]または[グループ値リスト]に変数を使用している[サブフォーム]は、
         このメソッドを使用しないと、再描画がスケジュールされませんので注意してください。
         サブフォームの変更は、イベントハンドラの処理がすべて終了したあとになります。

    p.s.

    > 結果 txtmNotice に表示したいお知らせが表示されました。

    ジェダイの桐さんにとっては、身近なフォームかもしれませんが、

    当方にとっては、昔の質疑内容であって、思い出すのに苦労しました。

    人間の短期記憶はすぐ失われてしまいます。※これはソフトウェア開発者ならばキモに銘じておくべき事柄です。
    ・・・・・・・・・・・・・・・・・・・     ・・・・・・・・・・・・・・・・・・・・・・・・

    ましてや、

    、■14489 / 2階層) Re[2]: イベント処理で開いた表について
    □投稿者/ ONnoji -(2024/07/10(Wed) 08:03:33)

    の記憶を呼び起こすのは大変です。※結局のところ、思い出せずにネットとローカルドライブを検索したんですよ。
     ・・・・・・・・・・・・・・


     ┌───────────────┐   ┌───────────────┐[開始時実行]コマンド
     │2.イベント処理       │   │4.イベント処理で開いた表  │ cmdStartupClick でオープン
     │               │   │               │
     │modify_計画表.kex       │   │在庫表.tbx          │
     │               ├───┤               │
     │               │   │               │
     │               │   │               │[終了時実行]コマンド
     │               │   │               │ cmdFinishClick でクローズ
     │               │   └───────────────┘
     │┌────────────────┐
     ││1.一覧表形式のフォーム    │
     ││                │
     └│modify_計画表.wfx        │
      │                │
      │                │
      │txtNotice            │
      │ソース:#変数( "mNotice" )   │
      │                │
      │                │
      │                │
      │                │
      └──────┬─────────┘
             │
      ┌──────┴────────┐
      │3.フォームの編集対象表   │
      │               │
      │計画表\計画表.tbx       │
      │               │
      │               │
      │               │
      │               │
      │               │
      └───────────────┘

    なので、過去にやり取りした内容であったとしても、当方が記憶しているという前提での質問はご遠慮ください。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    なので、常に状況を説明して質問するようにしてください。よろしく。
        ・・・・・・・・・・・・・・・・・・・・・・

引用返信 [メール受信/OFF] 削除キー/
■564 / inTopicNo.29)  Re[5]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/25(Fri) 10:35:22)
    ONnojiさん


    おはようございます。


    まず最初に。
    申し訳ありませんでした。


    と言うのも、掲示板の特性上 言葉 での やり取りしか基本的に出来ません。


    いくら回答者が質問者に返事を出そうとしても、

     具体的に起こった不具合・現象
     具体的に行い事
     
    等を記載しないと回答のしようがありません・・・


    今後は、回答者に正確に理解してもらう為に 上記を守って質問します。

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

    > INF_Framework は、メソッドを制限することはありませんよ。
    > つまり、INF_Framework はメソッドとは無関係です。
    > 濡れ衣を着せないでね。(ーー;)--------------> ※遠い目線


    非情に失礼な記載申し訳ありませんでした。

    不特定な方が閲覧出来る環境なので、言葉には細心の注意を払わなければならないですよね。

    濡れ衣を着せる意図は全くありません。


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

    > ジェダイの桐さん、[桐 - ヘルプ]も読んでください。
    >
    > 最初は分かり難くても、いつかそのうちに意味が理解できるようになりますよ。
    >            ・・・・・・・・・・・・・・・・・・・・・・・・


    アドバイスありがとうございます!
    今後、より一層 ヘルプ に目を通す習慣つけをします。


    ヘルプを読んで、かつ実行し、不具合(自分の思う挙動にならない)場合に、
    具体的に質問しますm(__)m

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

    > 「弾かれました」では私を含めて誰も意味を理解できませんよ。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > これは、「上手くいきません」と表現するのと五十歩百歩ですね。
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    これは自分で読み返しても本当にそう思います。
    で具体的に起こった不具合ですが、


    メソッド呼び出し  戻り値 = &status, @フォーム.変数変更() ※フォームは全角
    エラー :KU1251:指定のオブジェクトは登録されていません  @フォーム(全角)

    と言うエラーが出ました。

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

    良く考えみました。
    フォームのオブジェクト名は何なのだろうと。

    ワークスペース部で オブジェクト属性 を見てみると、
    特にフォームのオブジェクト名が出てきません。(見落としがあるかもしれませんが・・・)

    今度は、ヘッダ部 明細部 フッタ部 それぞれで オブジェクト属性 を見てみました。

    すると

     ヘッダ部 → オブジェクト名 フォームヘッダ部(半角)
     明細部  → オブジェクト名 フォーム明細部(半角)
     フッタ部 → オブジェクト名 フォームフッタ部 (半角)

    と具体的なオブジェクト名が記載してありました。


    今回のメソッドで使用したかった オブジェクト は フッタ に置いてあります。

    よって、

     メソッド呼び出し  戻り値 = &status, @フォームフッタ部.変数変更() フォームフッタは半角
     で実行しようと思いました。

     だけど、その前に、何故か @フォーム(半角)で入力してみようと思いました。(理由は特にありません。ダメなら本当に@フォームフッタ部と記載しようと思いました)


    メソッド呼び出し  戻り値 = &status, @フォーム.変数変更() フォームは半角

    でプログラムを実行した所、プログラムが動きました。
    これは、1st_Thin_INF_Framework_HDLCOM_サンプルについて.txt のメモを良く読むと

    ** 桐9-2012/桐9sから変換したフォームのオブジェクト名は半角、桐10以降で新規作成したフォームのオブジェクト名は全角

    と記載がありました。

    注意深く全ての材料を良く読み理解すれば、そもそも、質問をしなくても自己解決出来た事でありました(T_T)


    p.s.

    言葉だけでやり取りする時に、相手にこちらの意図を正確に伝える事の重要さと
    難しさを実感しました(T_T)

    これに懲りず、今後とも質問をしていくと思いますのでよろしくお願いいたしますm(__)m


引用返信 [メール受信/OFF] 削除キー/
■565 / inTopicNo.30)  Re[6]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/25(Fri) 15:59:06)
    2024/10/25(Fri) 16:02:39 編集(投稿者)

    ジェダイの桐さん

    > いくら回答者が質問者に返事を出そうとしても、
    >  具体的に起こった不具合・現象
    >  具体的に行たい事
    > 等を記載しないと回答のしようがありません・・・
    > 今後は、回答者に正確に理解してもらう為に 上記を守って質問します。

    是非そうしてください。(^^ok

    >>INF_Framework は、メソッドを制限することはありませんよ。
    >>つまり、INF_Framework はメソッドとは無関係です。
    >>濡れ衣を着せないでね。(ーー;)--------------> ※遠い目線
    >
    > 非情に失礼な記載申し訳ありませんでした。
    > 不特定な方が閲覧出来る環境なので、言葉には細心の注意を払わなければならないですよね。
    > 濡れ衣を着せる意図は全くありません。

    本気で怒ったりしませんよ。
    ご安心ください。

    >>ジェダイの桐さん、[桐 - ヘルプ]も読んでください。
    >>最初は分かり難くても、いつかそのうちに意味が理解できるようになりますよ。
    > アドバイスありがとうございます!
    > 今後、より一層 ヘルプ に目を通す習慣つけをします。

    ヘルプを読むことは大切ですよ。

    なお、PCにインストールされているヘルプのほかに、

    K3のwebページにもオンラインのヘルプがありますのでそちらもご覧ください。

    > ヘルプを読んで、かつ実行し、不具合(自分の思う挙動にならない)場合に、
    > 具体的に質問しますm(__)m

    ヘルプは参考になりますが、無謬(むびゅう)ではないんですよ。※無謬(むびゅう)=間違えが存在しないこと、正しいこと

    つまり、常に正しいことが書いてあるわけではないのです。

    必ず、誤記や抜けが存在します。
       ・・・・・・・・・・・

    ヘルプも自然言語で記述した著作なので、バグが時々見つかるということです。

    つい最近でも。ひどい誤記が見つかってK3に報告したくらいです。

    でも、オンラインのヘルプですら、誤記や抜けはすぐには反映しないんですよ。

    これはK3に限りません。MSだってかなりの誤記と抜けがあるはずですよ。キッパリ

    人が作ったものは完全ではありません。そうであるから、ジェット機だって時々墜落するのです。ガハハハha

    > 今回のメソッドで使用したかった オブジェクト は フッタ に置いてあります。
    > よって、
    > でプログラムを実行した所、プログラムが動きました。
    > これは、1st_Thin_INF_Framework_HDLCOM_サンプルについて.txt のメモを良く読むと

    INF_Framework には、桐9系から変換したフォームと、桐10系で新規に作ったフォームの違いを識別する仕組みが用意されています。

    仕組みは、1st_Thin_INF_Framework_HDLCOM_サンプルについて.txt に書いてある通りです。

    > 言葉だけでやり取りする時に、相手にこちらの意図を正確に伝える事の重要さと
    > 難しさを実感しました(T_T)
    > これに懲りず、今後とも質問をしていくと思いますのでよろしくお願いいたしますm(__)m

    桐の[フォーム+イベント処理]は、決して簡単ではありませんが、他のコンピュータ言語を使う事と比べれば、難解ではありませんよ。

    それでいながら、他のコンピュータ言語で作ったアプリケーションと遜色のないものが作れますよ。

    がんばってください。(^^ok

引用返信 [メール受信/OFF] 削除キー/
■566 / inTopicNo.31)  Re[7]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/26(Sat) 00:17:31)
    2024/10/26(Sat) 10:05:27 編集(投稿者)

    ジェダイの桐さん

    > 普通の場合には、何かやらかす(乱暴な言い方で失礼)と、変数をソースとしたテキストボックスも、
    > 再描画(リドロー)されます。
    > ところが、この再描画(リドロー)がサボられるケースがあるんですよ。
    > よく考えてみてください!。
    > コマンドを実行する度に、フォームの画面を再描画(リドロー)していたら、とても能率が悪いですよね。
    > それこそ、通信速度が遅いネットの動画のようになってしまいます。※これ重要です!
    > だから、再描画(リドロー)のタイミングは、コマンドを実行する度ではなくて、[手続きがの流れ]が終了した時になるのが普通です。
    > しかし、桐システムが再描画(リドロー)する必要を感じないケースもあるのですよ。※忘れたのではなく、必要を感じていないからです
    > webブラウザも同じでしょう。キャッシュばかり表示していて、なかなかリドローしてくれないですよね。(^^ゞ
    > だから、強制的に再描画(リドロー)したい場合には、変数変更()というメソッドを使うわけです。

    普通は、フォームオブジェクトの[変数変更]メソッドを実行する必要はないのです。

    しかし、本作例では、ステルスの表をこっそり検索して、局所変数の書き換えているので、
              ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    フォームオブジェクトの[変数変更]メソッドが必要になったのです。

    実は最初は[変数変更]メソッドは書いていなかったのですよ。

    でも、実行すると変数の値が書き換わっても、フォームではそれが反映されないことに気が付いたのです。

    そこで、

     メソッド呼び出し @フォーム.変数変更() /* ソースが変数のテキストボックス( txtNotice 等)をリドロー(再描画)します */

    という1行を付け加えたのです。

    このように、普通にプログラムをテストしていく時に気が付くことなるので、
          ・・・・・・・・・・・・・・・・・・・・・・・・・・

    先回りして[変数変更]メソッドを記述する必要ないのでした。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    世の中には、気になって仕方ないので、意味も無く[変数変更]メソッド等を書く人が居ます。
                      ・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、効果が見込めない所で、無意味なメソッドを実行するのは、とても恰好悪いことだと思いませんか???
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    このように、無意味なメソッド連発して記述するのは、単に気休めのための「おまじない」と同じです。
          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    意味のないメソッドは書かないようにしてください。
    ・・・・・・・・・・・・・・・・・・・・・・・

    <作例>


    手続き定義開始 txt出荷準備日::ソース値更新()
      変数宣言 自動, 文字列{ &icon, &title = "txt出荷準備日::ソース値更新( )", &msg }
      変数宣言 自動, 文字列{ &string }
      変数宣言 自動, 長整数{ &pcs }
      変数宣言 自動, 整数 { &error }

      &msg =      "このメッセージボックスはテスト(デバッグ)用です"
      &msg = &msg + "\n\n正しくプログラムが動作していることを確認したら、コメントアウトしてください"
      &msg = &msg + "\n\n&mIsString入力前  = " + #str( &mIsString入力前 )
      &msg = &msg + "\n\n&m編集文字列入力前 = " + &m編集文字列入力前
      &msg = &msg + "\n\n&mIsString入力後  = " + #str( &mIsString入力後 )
      &msg = &msg + "\n\n&m編集文字列入力後 = " + &m編集文字列入力後
      &icon = "i"
      手続き実行 INFprcMsgPause( &icon, &title, &msg )

     ┌if ( &mOpenStatus在庫表 = 1 )
     │
     │ &string = [商品名]
     │┌if ( &mIsString入力後 )
     ││ &pcs = [受注数] * -1
     │├else
     ││ &pcs = [受注数]
     │└end
     │ トレース出力 _&title, "  ", _&string, "  ", _&pcs
     │
     │ 手続き実行 prcTblSeekAndUpdate( &mTblNum在庫表, &string, &pcs, &error )
     │
     └end

    手続き定義終了

    手続き定義開始 prcTblSeekAndUpdate( 整数 &tblNum, 文字列 &string, 長整数 &pcs, 参照 整数 &error )
      変数宣言 自動, 文字列{ &icon, &title = "prcTblSeekAndUpdate( )", &msg }
      変数宣言 自動, 文字列{ &expression }
      変数宣言 自動, 文字列{ &stringPcs }
      変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } /* 半角の二重引用符 */
      変数宣言 自動, 整数 { &status }

      &error = 1 /* 参照渡しの引数の初期化 */

      トレース出力 _&tblNum, "  ", _&string

      &expression = &WQ + #文字置換( #文字置換( &string, &WQ, &WQ + &WQ ), #全角( &WQ ), #全角( &WQ + &WQ ) ) + &WQ /* &string に含まれるかもしれない二重引用符の処理 */
      トレース出力 _&string, "  ", _&expression

      編集表 &tblNum
      解除 *
      検索 [商品名]_&expression

      トレース出力 _( .not #eof )
     ┌if ( .not #eof )
     │
     │ トレース出力 _&title, " ", _[在庫数], "  ", _&pcs
     │
     │ &stringPcs = #str( [在庫数] )
     │ 行訂正  終了状態 = &status, [在庫数] = [在庫数] + &pcs
     │ ** 戻り値 説明
     │ ** 1 終了した
     │ ** 0 共有違反以外のエラーが発生した
     │ **-2 他の利用者が、置換や併合などの処理を実行中(ファイル排他)
     │ **-3 他の利用者がロックした行がある(レコード排他)
     │ **-4 他の利用者がすでに削除している(行削除)
     │ トレース出力 _&title, " ", _[在庫数], "  ", _&pcs
     │
     │┌if ( &status = 1 )
     ││
     ││ &error = 0
     ││ **&mNotice = "在庫表.tbx の[商品名]: " + [商品名] + " の在庫数は " + #str( [在庫数] ) + " です"
     ││ &mNotice = "在庫表.tbx の[商品名]: " + [商品名] + " の在庫数は " + &stringPcs + " ⇒ " + #str( [在庫数] ) + " に変更されました"
     ││ メソッド呼び出し @フォーム.変数変更() /* ソースが変数のテキストボックス( txtNotice 等)をリドロー(再描画)します */
     │├else
     ││
     ││ &msg =      "コマンドの実行に失敗しました"
     ││ &msg = &msg + "\n\n⇒ 行訂正  終了状態 = &status, [在庫数] = [在庫数] + &pcs"
     ││ &msg = &msg + "\n\n&status = " + #str( &status )
     ││ &icon = "e"
     ││ 手続き実行 INFprcMsgPause( &icon, &title, &msg )
     │└end
     │
     ├else
     │
     │ ** nop: no operation
     └end

    手続き定義終了


引用返信 [メール受信/OFF] 削除キー/
■567 / inTopicNo.32)  Re[8]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/28(Mon) 16:03:15)
    ONnojiさん


    こんにちは!

    [変数変更]メソッドの解説ありがとうございますm(__)m
    非情に分かりやすいです。


    本日は Thin_INF_Framework を自作のフォームに組み込んでいます。

    FSCtxtPaletteColorName が非常に便利に感じています。


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

    テストで HDLCOMprcMacroSend を 使用したプログラムを書きました。
    自分で書いた後、DOWN LOAD BBS の

    ■513 モードレスB で さよなら。モードレスB を閉じる
    を読み返しているんです。


    自分がプログラムを書いてから読み返すと、理解度が高まりました。


    本当に良くできた仕組みだと実感しています。


    &hwindowフォーム にあるプロシージャA で HDLCOMprcMacroSend を使用し 送信先の タイマー2 に メソッド または 手続き を送信する

    (直に送信先のタイマー2に送信しているのか、送信先の受信機へ送信してから、受信機経由で送信先のタイマー2へ送っているのかは分かっていません)

    &hwindowフォーム にあるプロシージャA が終了する


    送信先のタイマー2が実行される

    送信先のタイマー2イベントの中で &&hwindow から送られてきた メソッド 若しくは 手続き を実行する

    送信先のタイマー2が終了する


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


    一方で、いくら HDLCOMprcMacroSend が良い物でも
    相手先の 今の 状態 が分からないと宝の持ち腐れになってしまいます。

    そこで、HDLLNCprcHdlSeek が登場するんだと思いました。

    HDLLNCprcHdlSeek に関しては 仕組みも想像出来ませんが
    今(本当にコマンドを実行している現在)の 相手先の情報を

    &found &status &multi &mode で取得出来ます。


    if ( &found .and &status ) の時 HDLCOMprcMacroSend を安心して使用する事が可能になります(^^ゞ


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

    HDLLNCprcHdlSeek と HDLCOMprcMacroSend は非常に良く出来た仕組みだと思います。


    ここで一つ疑問が湧きました。


    この考え方は、多言語のプログラム や システムエンジニア の世界では一般的なのでしょうか?


引用返信 [メール受信/OFF] 削除キー/
■568 / inTopicNo.33)  Re[9]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/28(Mon) 16:43:30)
    2024/10/28(Mon) 17:03:15 編集(投稿者)

    ジェダイの桐さん

    > 本日は Thin_INF_Framework を自作のフォームに組み込んでいます。
    > FSCtxtPaletteColorName が非常に便利に感じています。

    FSC は、Form Section Colorのつもりの頭文字です。

    FSC は、フォームをカラフルにするために作った機能ではありませんでしたが、
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    お好みの色が選べるので、ウケはいいでしょうね。(^^ゞ

    しかし、FSC の本当の目的は、モーダルで開いたフォームの色を指定することなんですよ。

    これによって、モーダルフォームとモードレスフォームをフォームの色で識別できます。
           ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これをやりたくて開発したのが、FSC:Form Section Color という機能なのでした。(^^v

    > 一方で、いくら HDLCOMprcMacroSend が良い物でも
    > 相手先の 今の 状態 が分からないと宝の持ち腐れになってしまいます。
    > そこで、HDLLNCprcHdlSeek が登場するんだと思いました。

    HDLLNCprcHdlSeek は、ミサイルの先頭部にある赤外線や電波を使ったシーカーと同じです。

    狙った目標を捉えるシーカーです。

    HDLLNCprcHdlSeek は、ランチャーの機能の一部分で、HDLCOMprcMacroSend よりも3年前に開発した機能です。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    > HDLLNCprcHdlSeek に関しては 仕組みも想像出来ませんが
    > 今(本当にコマンドを実行している現在)の 相手先の情報を
    > &found &status &multi &mode で取得出来ます。
    > if ( &found .and &status ) の時 HDLCOMprcMacroSend を安心して使用する事が可能になります(^^ゞ

    フォームをシークした場合には、if ( &found )だけでウィンドウが存在していると判断できます。

    一方、表をシークした場合には、if ( &found .and &status )でフォームのウィンドウだと判断できます。

    > HDLLNCprcHdlSeek と HDLCOMprcMacroSend は非常に良く出来た仕組みだと思います。
    > ここで一つ疑問が湧きました。
    > この考え方は、多言語のプログラム や システムエンジニア の世界では一般的なのでしょうか?

    私は、VBとJavaの入門者程度の知識を持っていますが、決して使い込んだわけではありません。

    だから、一般的か?と問われても、知見がありませんのでお答えのしようがありません。(^^ゞ

    でも、一般的かどうかはさて置き、こういう機能が必要なことは確かでしょうね。(^^ok
                    ・・・・・・・・・・・・・・・・・・・

    ちなみに、ウィンドウ同士がコミュニケーションをするという考え方は、

    [アラン・ケイのメッセージング]からインスパイアしたものです。
    ・・・・・・・・・・・・・・・・・・・・・・・・

    なお、[アラン・ケイのメッセージング]は、OOP(オブジェクト指向プログラミング)の範疇ですが、

    ご承知の通り、桐はJavaのようなOOPL(オブジェクト指向プログラミング言語)ではありませんのでお間違え無く。アハハハha
           ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    【参考webページ】

    ちなみにOOP関係のweb記事は、[なんちゃって系]の軽薄な内容から、専門的な高度な内容まで玉石混交ですから、ご注意ください。

     アラン・ケイ|フリー百科事典『ウィキペディア(Wikipedia)』
     https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A9%E3%83%B3%E3%83%BB%E3%82%B1%E3%82%A4

     アラン・ケイのオブジェクト指向プログラミング|gofujita
     https://note.com/go_fujita/n/n1d157e658f9a

引用返信 [メール受信/OFF] 削除キー/
■569 / inTopicNo.34)  Re[1]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/30(Wed) 10:07:24)
    2024/10/30(Wed) 10:24:44 編集(投稿者)
    2024/10/30(Wed) 10:22:07 編集(投稿者)
    2024/10/30(Wed) 10:21:17 編集(投稿者)

    ONnojiさん


    おはようございます。


    HDLCOMprcMacroSend で引数の実験を行いました。

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

    実験1、

    &hwindow の プロシージャ

    手続き定義開始 cmdTest別のフォームへ変数の値を送るClick()
      ・
      ・
     変数宣言 自動,文字列 { &testStr }
     変数宣言 自動,整数  { &testInt }
     変数宣言 自動,数値  { &testNum }
      ・
      ・

      &testStr = "これは別フォームから値を送信した、テストメッセージです。"
      &testInt = 100
      &testNum = 1000
      &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + #文字列( &testInt ) + &comma + #文字列( &testNum ) + " )"
      &hdl = &found
      手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done )


    testフォームのプロシージャ

    手続き定義開始 prc別フォームから値を受け取る( 文字列 &別フォームから送られ来たテスト文字列, 整数 &別フォームから送られ来たテスト整数, 数値 &別フォームから送られ来たテスト数値 )
      ・
      ・

    結果 のトレース

    :別フォームから下記値を受け取りました
    :文字列 &別フォームから送られ来たテスト文字列 : &別フォームから送られ来たテスト文字列 : これは別フォームから値を送信した、テストメッセージです。
    :整数 &別フォームから送られ来たテスト整数   : &別フォームから送られ来たテスト整数 : 100
    :数値 &別フォームから送られ来たテスト数値   : &別フォームから送られ来たテスト数値 : 1000

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

    実験2、

    &hwindow の プロシージャ

    手続き定義開始 cmdTest別のフォームへ変数の値を送るClick()
      ・
      ・
     変数宣言 自動,文字列 { &testStr }
     変数宣言 自動,日時  { &testDate }
      ・
      ・

      &testStr = "これは別フォームから値を送信した、テストメッセージです。"
      &testDate = #日時日付( #日時値 )
      &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + &WQ + #文字列( &testDate ) + &WQ + " )"

      &hdl = &found
      手続き実行 HDLCOMprcMacroSend( &hdl, &sendMacro, &done )


    testフォームのプロシージャ

    手続き定義開始 prc別フォームから値を受け取る( 文字列 &別フォームから送られ来たテスト文字列, 日時 &別フォームから送られ来たテスト日時 )

      ・
      ・

    結果 のトレース

    エラー :KU1094:データの型が一致していません

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

    上記結果となりました。


    確認させて下さい。

    HDLCOMprcMacroSend で 別フォームに送信出来る 手続きの 引数 は

    日時 時間 以外 と言う認識でよいでしょうか?
    (日時 と 時間 が使用したいと言う意味ではありません)


    お時間のある時、回答よろしくお願いいたしますm(__)m

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

    p.s.

    自己解決しました!

    &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + "D" + &WQ + #文字列( &testDate ) + &WQ + " )"

    + &WQ + #文字列( &testDate ) の前に "D" を足す事で値が送信出来ました(^^ゞ

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

    コマンド コマンドのヘルプをよく読み直しました。

     <文字列式>で指定した文字列を一括処理コマンドとして実行します。

    <文字列式>ってどういう事なのだ?

    ヘルプの検索で 文字列式 を調べると 基礎知識 という項目が出てきました。

    それを読むと

     オブジェクトの表示属性を条件に応じて変更するには、#条件選択を使用します。

    #条件選択の時 日時 を指定する場合は D"24/10/30" だよな・・・

    と思い、"D" を足してみたら、狙った通りの値が別フォームで受信出来ました。

    お騒がせしましたm(__)m

引用返信 [メール受信/OFF] 削除キー/
■570 / inTopicNo.35)  Re[2]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/30(Wed) 12:21:58)
    > 自己解決しました!
    > &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + "D" + &WQ + #文字列( &testDate ) + &WQ + " )"
    > + &WQ + #文字列( &testDate ) の前に "D" を足す事で値が送信出来ました(^^ゞ

     &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + #文字列( &testInt ) + &comma + #文字列( &testNum ) + " )"

     ⇒ 手続き実行 prc別フォームから値を受け取る( 文字列型引数, 整数型引数, 数値列型引数 )

     &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + &WQ + #文字列( &testDate ) + &WQ + " )"

     ⇒ 手続き実行 prc別フォームから値を受け取る( 文字列型引数, 整数型引数 )

     &sendMacro = "手続き実行 prc別フォームから値を受け取る( " + &WQ + &testStr + &WQ + &comma + "D" + &WQ + #文字列( &testDate ) + &WQ + " )"

     ⇒ 手続き実行 prc別フォームから値を受け取る( 文字列型引数, 日時型引数 )

    という事ですね。

    確認しました。(^^ok


    p.s.

    本当に蛇足ながら、空想です。(^^ゞ

     手続き実行 prc別フォームから値を受け取る( 引数, 引数 )

    というのは以下↓の方法も考えられますね。

     手続き実行 prc別フォームから値を受け取る( &hdl, "変数名1,変数名2" )

    この場合の、"変数名1,変数名2" というのは、半角コンマで区切った変数名リストです。

    この場合、メッセージを送った側の &hdl の値が分っているわけですから、

    [局所変数代入]コマンドや #局所変数( n1 , str 【 | , n2 】 )関数で取り出せるわけです。

    問題はデータ型ですね。

     "変数名1,変数名2" → "文字列,変数名1,日時,変数名2"

    のように、データ型と変数名をセットにした変数名リストにしてもいいわけです。

    もっとスマートにしたければ、テキストオブジェクトのソースに #局所変数 をセットすれば、

    変数の値が未定義値でなければ、データ型が分かります。

    以上、空想です。

    実用性はというと、まるで無さそうですから、つまり考えただけです。アハハハha
    ・・・・・・・・・・・・・・・・・・


引用返信 [メール受信/OFF] 削除キー/
■571 / inTopicNo.36)  Re[1]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/30(Wed) 15:09:31)
    2024/10/30(Wed) 15:12:06 編集(投稿者)

    ジェダイの桐さん

    現在、局所変数の保存サンプルを作っています。

    少々、時間が掛かっています。

    もう少しお待ちください。

     ◇ ◇ ◇ ◇ ◇

    以下は未完ですが・・・(^^ゞ

     1st_Thin_INF_Framework_Variable_Save_サンプルについて.txt    Rev.0 2024.10.29

     この文書は INF_Framework の新しいバリエーションである Thin_INF_Framework のサンプルガイドです。

     ■INF_Framework 変数値のSave( INF Since 2003 / INFprcVariableDataSave Since 2005 )

     同梱のサンプルの[フォーム+イベント処理]を例にして解説します。

     テキストファイル( *_info.txt )は、INF_Framework が管理するテキストファイルです。

     このファイルには、INF_Framework が使用する局所変数の値が保存されています。

     このファイルは、フォームを閉じる際に自動的に生成されて、フォームを開く時に自動的に内容が読み取られます。 

     またこのファイルには、ユーザ定義の局所変数も保存できます。

     ユーザ定義の局所変数を保存する場合には、次のようにします。

      変数宣言 自動,文字列{ &saveVariableNameList }
      変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* 半角コンマ( , ) */

      &saveVariableNameList   = "&変数名1, &変数名2, &変数名3, &変数名4"
      &INFmSaveVariableNameList = &INFmSaveVariableNameList + &comma + &saveVariableNameList


     ■テキストファイル( *_info.txt )が生成されるフォルダとファイル名

     テキストファイル( *_info.txt )は、

     ・編集対象表が有るフォーム場合には編集対象表のフォルダに、フォームファイル名 + 下線( _ ) + 表ファイル名 + "_info.txt"

     ・編集対象表が無い NULLフォーム の場合はフォームのフォルダに、フォームファイル名 + "_info.txt"

     として生成されます。


     ■テキストファイル( *_info.txt )のリセット

     テキストファイル( *_info.txt )の内容をリセットしたい時には、

     必ず、フォームが閉じられている時にテキストファイル( *_info.txt )を削除してください。


     ■ご注意

     テキストファイル( *_info.txt )は普通のテキストファイル(.txt)なので簡単に上書きも削除も出来ますので、

     ファイルに保存するユーザ定義の局所変数は、値が失われても差し支えないものに限定してください。


     ■サンプルのフォームとテキストファイル( *_info.txt )のダイアグラム

     NO_EZW_Variable_Save_Restore.wfx/.kex … NULLフォーム

     ┌────────────────────────┐     ┌───────────────────────────┐
     │ フォーム                   │     │ テキストファイル( *_info.txt )           │
     │                        │     │                           │
     │ NO_EZW_Variable_Save.wfx/.kex         │     │ NO_EZW_Variable_Save_info.txt            │
     │                        │     │                           │
     │名札  メイン                 │     │                           │
     │ 変数宣言 局所,文字列{            │     │mカテゴリ,0,"" ※アンパサンド(&)記号は付かない   │
     │  &mカテゴリ, &mタスク1, &mタスク2, &m担当 }│     │mタスク1,0,""                    │
     │                        │     │mタスク2,0,""                    │
     │ 変数宣言 局所,文字列{           │     │m担当,0,""                      │
     │  &mカテゴリDim[30], &mタスク1Dim[30]    │     │                           │
     │  &mタスク2Dim[30, &m担当Dim[30] }     │     │mカテゴリDim,1,"" ─┐配列変数は要素番号1からnまで │
     │                        │     │mカテゴリDim,2,""  │                │
     │                        │     │ :        │&mカテゴリDim[1]        │
     │                        │     │mカテゴリDim,30,""─┘     〜 &mカテゴリDim[30] │
     │                        │     │ :                         │
     │                        │     │ :                         │
     │                        │     │                           │
     └────────────────────────┘     └───────────────────────────┘
                                   ※編集対象表が有るフォーム場合には、
     ┌───────────────────────┐      フォームファイル名 + 下線( _ ) + 表ファイル名 + "_info.txt"
     │                       │      になります。
     │変数値を保存する変数の指定は、        │      テキストファイル( *_info.txt )の保存先は編集対象表のフォルダです。
     │                       │      編集対象表が無い NULLフォーム の場合はフォームのフォルダです。
     │開始時実行コマンドボタン(cmdStartup)で    │
     │                       │
     │呼び出す手続き:cmdStartupClick( )      │
     │         │             │
     │に記述します。  │             │
     │         │             │
     └─────────│─────────────┘
               ↓
     手続き定義開始 cmdStartupClick( )
      変数宣言 自動,文字列{ &icon, &title = "cmdStartupClick( )", &msg }
      変数宣言 自動,文字列{ &saveVariableNameList }
      変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* 半角コンマ( , ) */

      ** NO_EZW_Variable_Save_Restore.wfx
      **
      ** オブジェクト名: cmdStartup
      ** 標題     : 開始時実行コマンドボタン:cmdStartup (削除しないでください)
      **
      **  機能名   機能パラメータリスト
      ** 1 表示
      ** 2 手続き実行 cmdStartupClick
      ** 3 訂正
      ** 4 なし

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

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

      ** 変数値を保存する変数の指定
      ** コンマで区切った変数名リスト アンパサンド記号(&)は省略可 配列の要素数は省略します
      &saveVariableNameList = "&mカテゴリ, &mタスク1, &mタスク2, &m担当, &mカテゴリDim, &mタスク1Dim, &mタスク2Dim, &m担当Dim"
      条件 ( &traceON ) トレース出力 _&saveVariableNameList

      ** INF_Framework の保存リスト変数( &INFmSaveVariableNameList )に追加する
      &INFmSaveVariableNameList = &INFmSaveVariableNameList + &comma + &saveVariableNameList
      条件 ( &traceON ) トレース出力 _&INFmSaveVariableNameList

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

引用返信 [メール受信/OFF] 削除キー/
■572 / inTopicNo.37)  Re[2]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/30(Wed) 16:45:10)
    2024/10/31(Thu) 08:36:45 編集(投稿者)
    2024/10/30(Wed) 16:48:49 編集(投稿者)

    ONnojiさん


    こんにちは!


    > 現在、局所変数の保存サンプルを作っています。
    > 少々、時間が掛かっています。
    > もう少しお待ちください。

    楽しみに待っています(^^♪

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

    ご依頼のありました、紹介文を添付します。
    ご査収の程よろしくお願いいたします。

    文章上何かあれば、修正加筆しますので連絡下さい。

引用返信 [メール受信/OFF] 削除キー/
■573 / inTopicNo.38)  Re[3]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/30(Wed) 21:35:02)
    2024/10/31(Thu) 15:17:40 編集(投稿者)

    ジェダイの桐さん

    > ご依頼のありました、紹介文を添付します。
    > ご査収の程よろしくお願いいたします。
    > 文章上何かあれば、修正加筆しますので連絡下さい。

    紹介文の執筆ありがとうございます。m(__)m

    最終稿ではありませんが、以下のように修正・加筆しましたのでご確認ください。m(__)m

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

     ■ジェダイの桐さんによる作品紹介

     [Thin_INF_Framework]は、自作フォームに[INF_Frameworkのサブセット]が組み込める便利なフレームワークです。

     <使用感>

     実際に使用して特に便利と感じた事をご紹介させて頂きます。

     【手続き名:HDLLNCprcHdlSeek】

     フォーム、または表の状態( ハンドル番号・フォームの存在有無・多重化有無・編集状態 )が探索出来ます。
     探索したいフォームのハンドル番号が取得出来るので、プログラム作成の幅が広がります。

     【手続き名:HDLCOMprcMacroSend】

     ハンドル番号で指定したフォームのタイマーイベントを経由して変数名:&sendMacro の内容を[コマンド]コマンドで実行します。

     ― プログラムの流れ

     送信元( &hwindow )のフォームにある[手続きA]で[HDLCOMprcMacroSend]を実行して、送信先の[タイマー2]にメソッドまたは手続きを送信する
      ↓
     送信元( &hwindow )のフォームにある[手続きA]が終了する
      ↓
     送信先の[タイマー2] イベントが実行される
      ↓
     送信先の[タイマー2] イベントの中で送信元のフォームから送られてきたメッセージ( メソッドまたは手続き )を実行する
      ↓
     送信先の[タイマー2] イベントが終了する

     [手続き名:HDLLNCprcHdlSeek]で、「メソッドまたは手続き実行コマンド」を送信したいフォームのハンドル番号を取得してから[手続き名:HDLCOMprcMacroSend]を使用します。
     この2つの手続きを使用することで、柔軟なプログラム作成が可能となります。

     <使用上の注意点>

     [コマンド]コマンドは、<文字列式>で指定した文字列を一括処理コマンドを実行します。
     [手続き名:HDLCOMprcMacroSend]で使用する[変数名:&sendMacro]へ代入文字列の記載に注意して下さい。
     例えば、別フォームに日時値を送りたい場合は、
      ×  "24/10/30"
      〇  D"24/10/30"
     という考え方です。

     <活用例>

     【多遊】さんのホームページ いまは。『桐』だけ → http://tayu.o0o0.jp/ にある DOWN LOAD 掲示板 のスレッド

      □446 Thin_INF_Framework のご案内
      □512 モードレスB で さよなら。モードレスB を閉じる
      □534 Thin_INF_Framework ベータ2のご案内

     を見て頂ければ具体的な使用方法の参考になると思います。
     なお、サブセットの[Thin_INF_Framework]とフルセットの[モダンINF_Framework]は混在して使用しても問題がありません。

     <まとめ>

     私は仕事で桐を使用しており、複数のフォームを使用してヒューマンエラーの起こりにくいアプリ開発をしたかったのですが、
     自身のフォーム( &hwindow )から、他フォームへ直接影響( 密な結合 )を与えずに、間接的に( 疎な結合で )値を渡す良い方法が分からなく頓挫しておりました。
     しかし、[Thin_INF_Framework]を使用する事で、間接的に( 疎な結合で )値を渡す事が可能になりました。
     今後は、操作しやすくてエラーが起こっても対処方法が分かり、安心して使用出来るアプリを開発する為に活用していこうと考えています。

     私は、この[Thin_INF_Framework]を複数の自作フォームの連携に限界を感じている方に是非お勧めしたいと思います。

     <補足>

     使用方法に関しては、以下のwebページに説明がありますのでご覧下さい。

     ・AKomeさんのホームページ  → http://akome409102.html.xdomain.jp/
     ・ONnojiさんのホームページ → http://silicon7565.html.xdomain.jp/

    p.s.

    今回、結合度の尺度を、[高い⇔低い]の他に、[疎⇔密]という表現を採用してみました。(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■574 / inTopicNo.39)  Re[4]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ジェダイの桐 -(2024/10/31(Thu) 09:00:21)
    ONnojiさん


    おはようございます!


    > 最終稿ではありませんが、以下のように修正・加筆しましたのでご確認ください。m(__)m


    確認しました。
    全く問題ありません。


    ONnojiさん が 若干のリライトをしてくれたおかげで
    私の言いたかった事を読み手に、より正確に伝える事が出来ると思います。


    >  ハンドル番号で指定したフォームのタイマーイベントを経由して変数名:&sendMacro の内容を[コマンド]コマンドで実行します。


    もっとも適切な表現だと思いました。
    ハンドル番号で指定したフォーム と言う表現ですから &hwindow も含まれます。

    私は、手続き名 HDLCOMprcMacroSend を郵便局のイメージでとらえたんですよ。
    どういう事かと言えば、

    東京都(フォームA) から 千葉県(フォームB) へ手紙を送る
    これは当然郵便局は対応可能です。

    郵便局であるならば、

    新宿区(フォームA にある 手続きA) から 渋谷区(フォームA にある 手続きB) へ手紙を送る

    も当然出来る。
    と言う事は、手続き名 HDLCOMprcMacroSend も &hwindow 向けに値を送信できるかもと思って実験したのが、
    ■560 Thin_INF_Framework ベータ2のご案内 で書いた実験だったのです(^^♪


    > 今回、結合度の尺度を、[高い⇔低い]の他に、[疎⇔密]という表現を採用してみました。(^^ゞ


    この表現が入る事で、結合度のイメージが高まりました(^^ゞ
    ありがとうございます!


引用返信 [メール受信/OFF] 削除キー/
■575 / inTopicNo.40)  Re[1]: Thin_INF_Framework ベータ2のご案内
□投稿者/ ONnoji -(2024/10/31(Thu) 16:47:54)
    ジェダイの桐さん

    局所変数のセーブ機能のサンプルをアップしますので、お試しください。

    zip 形式の添付ファイルを解凍すると、以下のファイルがあります。

    1st_Thin_INF_Framework_Variable_Save_サンプルについて.txt
    NO_EZW_Variable_Save.wfx
    NO_EZW_Variable_Save.kex

     ◇ ◇ ◇ ◇ ◇

     1st_Thin_INF_Framework_Variable_Save_サンプルについて.txt    Rev.0 2024.10.29

     この文書は INF_Framework の新しいバリエーションである Thin_INF_Framework のサンプルガイドです。

     ■INF_Framework 変数値のSave( INF Since 2003 / INFprcVariableDataSave Since 2005 )

     同梱のサンプルの[フォーム+イベント処理]を例にして解説します。

     テキストファイル( *_info.txt )は、INF_Framework が管理するテキストファイルです。

     このファイルには、INF_Framework が使用する局所変数の値が保存されています。

     このファイルは、フォームを閉じる際に自動的に生成されて、フォームを開く時に自動的に内容が読み取られます。 

     またこのファイルには、ユーザ定義の局所変数も保存できます。

     ユーザ定義の局所変数を保存する場合には、次のようにします。

      変数宣言 自動,文字列{ &saveVariableNameList }
      変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* 半角コンマ( , ) */

      &saveVariableNameList   = "&変数名1, &変数名2, &変数名3, &変数名4"
      &INFmSaveVariableNameList = &INFmSaveVariableNameList + &comma + &saveVariableNameList


     ■テキストファイル( *_info.txt )が生成されるフォルダとファイル名

     テキストファイル( *_info.txt )は、

     ・編集対象表が有るフォーム場合には編集対象表のフォルダに、フォームファイル名 + 下線( _ ) + 表ファイル名 + "_info.txt"

     ・編集対象表が無い NULLフォーム の場合はフォームのフォルダに、フォームファイル名 + "_info.txt"

     として生成されます。


     ■テキストファイル( *_info.txt )のリセット

     テキストファイル( *_info.txt )の内容をリセットしたい時には、

     必ず、フォームが閉じられている時にテキストファイル( *_info.txt )を削除してください。


     ■ご注意

     テキストファイル( *_info.txt )は普通のテキストファイル(.txt)なので簡単に上書きも削除も出来ますので、

     ファイルに保存するユーザ定義の局所変数は、値が失われても差し支えないものに限定してください。


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

<前の20件 | 次の20件>

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

[このトピックに返信]
Mode/  Pass/

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

- Child Tree -
- Antispam Version -