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

■14362 / ResNo.10)  Re[5]: 期間絞込でのエラー時対応について
  
□投稿者/ ONnoji -(2024/05/21(Tue) 15:21:33)
    2024/05/21(Tue) 15:30:56 編集(投稿者)

    横レスで失礼します。m(__)m

    初級者の人にたくさんの情報をお届けすると消化不良になるかもしれませんが・・・(^^ゞ

    トレース出力コマンドの表示内容って読み難いですよねぇ〜。

    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 1
    一括実行:手続きを実行終了しました
    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 2
    一括実行:手続きを実行終了しました

    ↑この程度ならばなんとか判読可能です。

    しかし、もっと手続きの入れ子が深くなると・・・ほぼ解読不能です。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そこで、拙作:整形ユーティリティ utx_list3 を利用すると、次のように読み易くしてくれます。

    ※【多遊】さんのダウンロードコーナー #206 イベント処理の整形ユーティリティ 第 3.91 版  for 桐10 / 桐10s / 桐sSL でダウンロード出来ます。

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 1

    └end

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 2

    └end

    とね。(*^^)v

    もちろん、これは必須ではありませんので、こんなことも出来るんだなぁ〜と思っていただければ十分ですよ。

    こちら
     ↓
    桐の釣魚大全のトップ > 整形ユーティリティ教書 基本編
    整形ユーティリティ教書 基本編 ― 桐のアプリケーション開発を支援するユーティリティ
    http://silicon7565.html.xdomain.jp/guide/guide_ReformUtility_Part1.htm

    40 [トレース出力]ウィンドウと[トレース出力]コマンド
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40

    40.3 整形ユーティリティでトレース出力結果を整形する
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40


引用返信 [メール受信/OFF] 削除キー/
■14363 / ResNo.11)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/21(Tue) 18:47:00)
    2024/05/21(Tue) 18:52:49 編集(投稿者)

    やはり変なので確認させてください。

    ■期間指定絞込.kex 

    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end

    │ 編集表 "日付絞り込み.TBX"
    │ 終了 表 編集対象表

    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない


    └end


    手続き定義終了


    "日付絞り込み.wfx(編集対象表:日付絞り込み.tbx)"から"期間指定絞込.wfx"をモーダルフォームで開き

      名札 メイン
       変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

       表 "日付絞り込み.TBX"
       &mRefinementStartDate = [日付]
       &mRefinementEndDate = [日付]
      *

    ですから、次のような

    日付絞り込み.WFX

      機能名      機能パラメータリスト
     1 表示
     2 モーダルフォーム 期間指定絞込.wfx
     3 なし
     4 なし

      主ウィンドウ                モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    こういう構成なわけです。

    でも

     編集表 "日付絞り込み.TBX"
     終了 表 編集対象表

    なんてやるとエラーでしょ。

     KU1066:イベントハンドラでは表示中の表を閉じることはできません

       ※お前は既に日付絞り込み.wfxで開いている。

    そちらでは、エラーになりませんでしたか???


引用返信 [メール受信/OFF] 削除キー/
■14364 / ResNo.12)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/21(Tue) 19:12:34)
    >  編集表 "日付絞り込み.TBX"
    >  終了 表 編集対象表
    >
    > なんてやるとエラーでしょ。
    >
    >  KU1066:イベントハンドラでは表示中の表を閉じることはできません
    >
    >    ※お前は既に日付絞り込み.wfxで開いている。
    >
    > そちらでは、エラーになりませんでしたか???

    ONnojiさん
    ジェダイの桐 さん

    大変失礼しました。
    私の確認ミスで余計混乱させるコードを掲載してしまいました。
    ジェダイの桐さんの質問をよくよく読んでいないままコードを修正してしまい、かつ、実行していませんでした。

    ONnojiさんのおっしゃる通りです。
    上記のコードはもちろん不要であり、私の誤りです。

    訂正してお詫びいたします。

    正しくは、以下のとおりです。

    ※ ONnojiさんすいません、コードをコピーして使わせていただきます。


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end


    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない

    └end


    手続き定義終了



引用返信 [メール受信/OFF] 削除キー/
■14365 / ResNo.13)  Re[2]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/21(Tue) 19:15:37)
    2024/05/22(Wed) 15:32:55 編集(投稿者)
    2024/05/22(Wed) 02:39:48 編集(投稿者)

    これは個人( ONnoji )の感想です。

    以下のようにモーダル側で、

     表 "日付絞り込み.TBX"

    なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


      主ウィンドウ                 モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    だって、"日付絞り込み.TBX"は、すでに開いているのですから、余計なチョッカイを出しちゃ面倒なんですよ。
                   ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ここは、主ウィンドウ側の"日付絞り込み.kex"で

     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    として、

     &gRefinementStartDate = [日付]
     &gRefinementEndDate  = [日付]

    と値を代入して(代入しなくてもいいけれど・・・)

    1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    ですね。

    例えば、

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
     2 モーダルフォーム 期間指定絞込.wfx
     3 実行条件     ( &gAnswer = 1 )
     4 手続き実行    cmd期間指定絞込Click

    とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    こうすると、モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できるでしょう。
          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そして、主ウィンドウでは、絞り込みに専念できるというわけです。
        ・・・・・・・・・・・・・・・・・・・

     ※そもそも、絞り込む機能は編集対象があるフォームの機能であって、NULLフォームが絞り込む機能を持つ必要はありません。
           ・・・・・・・・・・・・・・・・・・・・・     ・・・・・・・・・・・・・・・・・・

     ※NULLフォームは、編集対象があるフォームへ情報を伝えて、編集対象があるフォームが自ら実行すればよいのです。
      ・・・・・・・・・・・・・・・・・・・・・・・・・・             ・・・・・・・・・

    キモは、モーダル側で主ウィンドウの編集対象表の面倒を見ないことですよ。

    モーダルは単に変数の値を編集するだけ。※固有変数・共通変数・組み込み変数を編集します。

    そして、モーダルで編集された変数の値を参照して絞り込みを実行するのは、主ウィンドウ側のの手続きということです。

    こうすれば、機能分担がハッキリして、保守が楽になるということですよ。(^^ok

    モーダルフォームは補助ウィンドウなのですから、主役の仕事を横取りしてはいけないんですゾッ!。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    そう考えれば、自然に気が付きますよ。

    p.s.

    > モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    モジュールとは交換可能な構成部分という意味ですね。

    だから、僭越にもモーダルフォームが主ウィンドウの範囲を対象にした機能を有していると、一体化しちゃって交換可能じゃなくなっちゃうでしょう。
                                              ・・・・・・・・・・・・・・・・・・・・・
    なので、モーダルフォームは主ウィンドウに対して余計なチョッカイを出してはいけないのですよ。

     <参考>

      桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
      19.5 それぞれのフォームアプリケーションは独立しているので直接的な干渉をしない
      http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section19-5

    p.s.

    今回のように、NULLフォーム側で主人であるフォームの編集対象表を直接ハンドルするという発想は「フロー駆動型」です。

    「目からウロコのデータベース桐プログラミング入門」の「3 イベント駆動型のプログラミング」で論じたように、「フロー駆動型」は一括処理の考え方です。

    実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。
               ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    「フロー駆動型」とは、プログラムの作者がすべてを支配するということです。
               ・・・・・・・・・・・・・・・・・

    今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    例えが分り難いでしょうが、『ホビットの冒険』や『指輪物語』の一つの指輪(ひとつのゆびわ、One Ring)の持ち主のようになってはいけないのです。

    心の中に「フロー駆動型」の誘惑があると、「イベント駆動(イベントドリブン)」としての「フォーム+イベント処理」のアプローチが出来なくなります。

      【指輪の銘】 一つの指輪 出典: フリー百科事典『ウィキペディア(Wikipedia)』
      一つの指輪は全てを統べ、
      一つの指輪は全てを見つけ、
      一つの指輪は全てを捕らえて、暗闇の中に繋ぎとめる。
      (One Ring to rule them all, One Ring to find them, One Ring to bring them all, and in the darkness bind them)

    「イベント駆動(イベントドリブン)」のためには、一つの指輪を滅びの山に捨ててください。

    と、『指輪物語』を読んだことが無い人にはワカラナイことを書きましたが・・・(^^ゞ

    改めて、今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。

    そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これが「制御主体の反転」という意味です。

    そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。


引用返信 [メール受信/OFF] 削除キー/
■14366 / ResNo.14)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 10:52:26)
    2024/05/22(Wed) 11:26:00 編集(投稿者)
    2024/05/22(Wed) 11:09:16 編集(投稿者)

    > 「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。
    > そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    > これが「制御主体の反転」という意味です。
    > そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。

    なかなか意味が伝わらないと思われるので、「制御主体の反転」を具体的に示そうと思います。

    まず、二種類の制御の主体を考えます。

    1.制御主体がプログラムの作者であるケース

    2.制御主体がソフトウェアの仕掛けであるケース

    1のケースは、プログラムの作者がすべてを支配するということです。

    これは「フロー駆動型」です。

    「フロー駆動型」の典型は、まさしく一括処理です。

    一括処理では、プログラムの作者がプログラムの流れをすべて記述しますね。

    一括処理では、プログラムのスタートから、プログラムのフィニッシュまでの全て記述しなければなりません。

    つまり、プログラムの作者がすべてを支配しているわけで、制御権はプログラムの作者が握っているのです。

    2のケースは、ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということです。

    ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。

    「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    従って制御の主体は、ソフトウェアの仕掛けということになります。

    「フォーム+イベント処理」では、ソフトウェアの仕掛けとして次のものがあります。

    ・コマンドボタンの機能
    ・イベント発生の設定とイベントハンドラ

    これらを駆使して個々の操作に対応する仕掛けを複数個作りあげて、

    フォームが開いた時点で待機(アイドリング)するというのが「イベント駆動型(イベントドリブン)」です。

    ということで、この状態を「制御主体がソフトウェアの仕掛けである」と呼ぶことにしましょう。

    以上の説明を読んでいただければ、「制御の主体」が1と2では異なっていると理解できるでしょう。

    私( ONnoj )は、この事を「制御主体の反転」と呼んでいるのでした。

    p.s.

    > 実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。

    DOS桐や桐ver.7で一括処理でアプリケーションを作っていた人達の多くが「制御主体の反転」に気が付いていないと思います。

    だから、過去の掲示板には、外見が「フォーム+イベント処理」でありながら、中身が一括処理のような例が非常に多く見つかると思います。

    それを、心の中では「フロー駆動型」と表現した次第です。

    p.p.s.

    > ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。
    > 「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    「イベント駆動型(イベントドリブン)」の場合には、フォームに用意されている機能に精通している必要があります。

    しかし、プログラムの作者がすべてを支配するというアプローチに慣れている人達はコマンドに精通しているんですね。

    そう、まさしくコマンド命ですから、フォームに用意されている機能には無知で、まるで一括処理のようなアプローチをしてしまうのです。
                     ・・・・・・・・・・・・・・・・・・

    つまり、「制御主体の反転」に気付いていないために、余計に泥沼にハマって抜け出せない状態に陥るのですよ。

引用返信 [メール受信/OFF] 削除キー/
■14367 / ResNo.15)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 16:28:16)
    ONnojiさん


    こんにちは!



    >  表 "日付絞り込み.TBX"
    >
    > なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


    これは、


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]


    ここの 表 "日付絞り込み.TBX" の事でしょうか?


    それとも、

    手続き定義開始 cmd絞込開始Click()
     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     表 "日付絞り込み.TBX"


    この 表 "日付絞り込み.TBX" の事でしょうか??


    はたまた、両方でしょうか???


    確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    但し、これは漠然とした 違和感でしかありませんでした。


    やっぱり、考え方としておかしいですよね(^^;


    そこで、準備段階として


    > ここは、主ウィンドウ側の"日付絞り込み.kex"で
    >
    >  変数宣言 固有,整数{ &gAnswer }
    >  変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    この部分と

    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click


    この部分を作成しました。


    しかし、


    > ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。
    >          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    ここで ちょっと躓き中です。
    固有変数はフォーム定義の変数管理で保存出来ないのですかね??
    初めて知ったのですが、変数ファイル(.vax)と言うものがあるのですね(^^♪

    そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??


    ここは直ぐに分からない(理解出来ない)ので一旦置いていて、


    > 1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > 3.もし、終了状態( &gAnser )がOK(1)なら実行


    今日は ここを ずっと考えています!


    1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])

    で対応出来ていると思います。


    だから

    >&gRefinementStartDate = [日付]
    >&gRefinementEndDate  = [日付]

    >と値を代入して(代入しなくてもいいけれど・・・)


    代入しなくても良いと言われているのだろうと理解しています。
    (違う意味なのかも知れませんが・・・(^^;)


    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る


    これが 本日最大のテーマ です(^^)/


    これは

    日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    解決するのではと考え

    フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ


    変数の受け渡しを理解出来れば
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    が 日付絞り込み.wfx 側の cmd期間指定絞込 で絞り込みが出来るのだろうと思っています。

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


    日付絞り込み.wfx で cmd期間指定絞込 をクリックする

    期間指定絞込.wfx で 絞り込み期間を入力して cmd絞込開始 をクリックする
    期間指定絞込.kex で メッセージボックスで &gAnswer = 1 にする(つまり はい を押す)

    日付絞り込み.wfx に戻って 期間指定絞込.wfx での &gAnswer = 1 を引き取り 日付絞り込み.kex で cmd期間指定絞込Click の手続き実行を行う


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

    流れは 恐らくこうなのでしょうが、実現方法(プログラムの書き方)が分かりません・・・


    だけど、変数の受け渡し方法をまず考え理解します!


    これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば

    >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    >主ウィンドウでは、絞り込みに専念できる

    これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/


    上記の状況でしたので、返信が遅くなりました。
    もうちょっと、粘ってみます!


    どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m



引用返信 [メール受信/OFF] 削除キー/
■14368 / ResNo.16)  Re[4]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:34:27)
    2024/05/22(Wed) 16:55:49 編集(投稿者)

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    ジェダイの桐さんの最初のお試しは、全然お話にならないです。悪しからず。

    これ以上時間を費やしても時間の無駄になるだけです。

    当方でサンプルを用意しましたので、30分以内にアップします。


    p.s.

    >> ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    ↑この文言は当方の誤りでした。

    サンプルを作っている時に気が付きました。

    > 例えば、
    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click
    > とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    ↑これはアバウトなイメージです。あくまでもイメージです。




引用返信 [メール受信/OFF] 削除キー/
■14369 / ResNo.17)  Re[5]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:48:38)
    2024/05/22(Wed) 18:13:16 編集(投稿者)

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

    期間指定絞込.kex
    期間指定絞込.wfx
    日付絞り込み.kex
    日付絞り込み.tbx
    日付絞り込み.wfx


    ■日付絞り込み.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     ├ フォームヘッダ部
     │ ├ a
     │ ├ lbl日付
     │ └ cmd期間指定絞込
     └ フォーム明細部
       ├ 行セレクタ
       └ txt日付

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 表示
     2 なし       #代入( &gRefinementStartDate, [日付] ), #代入( &gRefinementEndDate, [日付] )
     3 モーダルフォーム "期間指定絞込.wfx"
     4 手続き実行    cmd期間指定絞込Click



    ■日付絞り込み.kex

    名札  メイン
     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }



    手続き定義開始 cmd期間指定絞込Click( )
     変数宣言 自動,文字列{ &title = "cmd期間指定絞込Click( )", &msg }
     変数宣言 自動,整数 { &traceON }

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

    ┌if ( &gAnswer = 1 )

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ &msg = &msg + "\n\n変数の値を利用して絞り込む部分はご自身で作成してください (^^ok"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する

    ├else

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
    └end

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


    ■期間指定絞込.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     │ └ cmdStartup
     ├ フォームヘッダ部
     │ └ tタイトル
     ├ フォーム明細部
     │ ├ txtgRefinementStartDate
     │ │ └ lblgRefinementStartDate
     │ └ txtgRefinementEndDate
     │   └ lblgRefinementEndDate
     └ フォームフッタ部
       ├ cmdOK
       └ cmdキャンセル


     オブジェクト名: cmdStartup
     標題     : 開始時実行コマンド:cmdStartup

      機能名   機能パラメータリスト
     1 訂正
     2 なし
     3 なし
     4 なし

     オブジェクト名: cmdOK
     標題     : OK

      機能名   機能パラメータリスト
     1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
     2 なし    #代入( &gAnswer, 1 )
     3 閉じる
     4 なし

     オブジェクト名: cmdキャンセル
     標題     : キャンセル

      機能名   機能パラメータリスト
     1 閉じる
     2 なし
     3 なし
     4 なし


    ■期間指定絞込.kex

    名札 メイン

     **---- 変数が宣言されていなければ変数を宣言する ------**
     条件 ( #配列要素数( "gAnswer" )       <> 0 ) 変数宣言 固有,整数{ &gAnswer }
     条件 ( #配列要素数( "gRefinementStartDate" ) <> 0 ) 変数宣言 固有,日時{ &gRefinementStartDate }
     条件 ( #配列要素数( "gRefinementEndDate" )  <> 0 ) 変数宣言 固有,日時{ &gRefinementEndDate }
     **---- 変数が宣言されていなければ変数を宣言する ------**

     &gAnswer = 0 /* 初期値は0:キャンセル */


836×523 => 250×156

1716386255.jpg
/65KB
引用返信 [メール受信/OFF] 削除キー/
■14370 / ResNo.18)  Re[6]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 17:12:53)
    ONnojiさん


    >  オブジェクト名: cmdOK
    >  標題     : OK
    >
    >   機能名   機能パラメータリスト
    >  1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
    >  2 なし    #代入( &gAnswer, 1 )
    >  3 閉じる
    >  4 なし
    >
    >  オブジェクト名: cmdキャンセル
    >  標題     : キャンセル
    >
    >   機能名   機能パラメータリスト
    >  1 閉じる
    >  2 なし
    >  3 なし
    >  4 なし


    ありがとうございます。

    cmdOK と cmdキャンセル でしたか・・・
    #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。


    分かってしまえは、こういう考え方かとあっけないですね(T_T)


    かなり勉強になりました!


    ありがとうございましたm(__)m
引用返信 [メール受信/OFF] 削除キー/
■14371 / ResNo.19)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 17:26:11)
    2024/05/22(Wed) 18:07:04 編集(投稿者)

    > cmdOK と cmdキャンセル でしたか・・・
    > #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。
    > 分かってしまえは、こういう考え方かとあっけないですね(T_T)

    ウィンドウにはある程度のパターンがあるんですよ。

    これは主ウィンドウvs補助ウィンドウ(モーダル)のパターンです。

    パターンは多くないですからすぐに覚えてしまいますよ。

    それにしても、そちらが提示した内容ですが、どこの掲示板を参考にしたのでしょうかね。

    まあ、つまらない詮索は止めにしますが、

    昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。


    p.s.

    >>なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。
    > これは、
    > 名札 メイン
    >  変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }
    >
    >  表 "日付絞り込み.TBX"
    >  &mRefinementStartDate = [日付]
    >  &mRefinementEndDate = [日付]
    > ここの 表 "日付絞り込み.TBX" の事でしょうか?
    > それとも、
    > 手続き定義開始 cmd絞込開始Click()
    >  変数宣言 自動, 数値  { &ans }
    >  変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
    >
    >  表 "日付絞り込み.TBX"
    > この 表 "日付絞り込み.TBX" の事でしょうか??
    > はたまた、両方でしょうか???

    両方です。

    > 確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    > 但し、これは漠然とした 違和感でしかありませんでした。
    > やっぱり、考え方としておかしいですよね(^^;

    これはほぼ一括処理と同じアプローチです。

    「フォーム+イベント処理」では、ピタゴラスイッチやドミノ倒しのようにプロクラムを作ってください。


    >>↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    この部分は当方の誤りでした。

    何故ならば、当方はグローバル変数(固有・共通)をほぼ100%使わないからです。

    だから、タラレバを書いてしまいました。m(__)m

    > そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??
    > ここは直ぐに分からない(理解出来ない)ので一旦置いていて、
    >>1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    >>2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    >>3.もし、終了状態( &gAnser )がOK(1)なら実行

    百聞は一見にしかずですからサンプルを動かしてください。


    > 今日は ここを ずっと考えています!
    > 1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    > で対応出来ていると思います。
    > だから
    > >&gRefinementStartDate = [日付]
    > >&gRefinementEndDate  = [日付]
    > >と値を代入して(代入しなくてもいいけれど・・・)
    > 代入しなくても良いと言われているのだろうと理解しています。
    > (違う意味なのかも知れませんが・・・(^^;)

    そうですが、初期値が入っていた方が入力する人には親切だろうと思いますよ。

    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > これが 本日最大のテーマ です(^^)/
    > これは
    > 日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    > 解決するのではと考え
    > フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ

    第2部 36で扱っている内容は、グローバル変数(固有・共通)ではなく、局所変数の受け渡しです。

    今回のサンプルは、グローバル変数(固有)を使っていますので、受け渡しではなく、参照です。
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    受け渡しと参照とは違う意味です。

    局所変数の受け渡しは、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    ちなみに、形の上では「受け渡し」ですが、実際には局所変数から局所変数への値の転送(代入)ですよ。

    > だけど、変数の受け渡し方法をまず考え理解します!
    > これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば
    > >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    > >主ウィンドウでは、絞り込みに専念できる
    > これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/

    本当の意味での変数の値の受け渡しには、局所変数(または自動変数)を使います。

    これには、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    しかし、どうしても試したいというのであれば、INF_Framework をフォームに導入してください。

    そして、あこめの桐のプログラミング入門のトップページから

      INF_Framework:局所変数の受け渡し

    を読んでください。

    そうすれば、局所変数を使った本当に変数の値の受け渡しが試せますよ。しかも超簡単に(^^♪

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    掲示板のやり取りには行き違いも生じます。

    論より証拠で、百聞は一見にしかずです。

    まず、当方のサンプルを動かしてみてください。

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

<前のレス10件 | 次のレス10件>

スレッド内ページ移動 / << 0 | 1 | 2 | 3 >>

このスレッドに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -