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

■1468 / 3階層)  「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/20(Thu) 16:14:46)
    2024/06/20(Thu) 23:21:13 編集(投稿者)

    > 本日は、ずっとトレース出力ウィンドウ と スケジュール表_main.kex と スケジュール表_subform_accept.kex とにらめっこしています。
    > 率直な感想
    > 1、私の思い描いた通りに動いている
    > 2、メイン サブ 間のフォーカス移動は相当大変
    > 3、サブ → メイン に行訂正も相当大変
    > 取り入れるべき事
    > 間違いなく、トレース出力 の使い方です。
    > kexのプログラム文章 と 実際に入力してみて をトレース出力ウィンドウで見ていて小説を読んでいる様に感じました。
    > どういう理屈のプログラムなのかという事は表面的にしか分かりません。
    > しかし、プログラムの流れはしっかりと分かります。
    > 変数に入っている値が何か、プログラムの動きがどうか理解しながら作成すると言う、あるべき姿を見せて頂いたと思っております。

    「目からウロコ」の第9項で

     「このソフトウェアという言葉を、[柔らかな機械]と考えていただきたいのです。
      見えなくて、実際に触ることも出来ないけれど、それは機械と同じなんだとね。(*^^)ok」

    このように書きました。

    今回のメイン&サブフォームのピタゴラ装置も[柔らかな機械]の動作なのです。

    だから、実際にどう動いているのか?を一つ一つ確かめないと、ピタゴラ装置が途中で止まってしまうかもしれないのです!

    ということで、単に変数の値を調べるだけではなく、

    見えない動作を、見える化するのが、[トレース出力]コマンドのもう一つの使い方になります。

    > トレース出力は便利と言うより、必須に近いと感じています。
    > (但し、分かりやすい事が条件ですが。)
    > なので今後、自分で作成するプログラムは、こちらのトレース出力方法を参考にさせて頂きますm(__)m

    今回のアプリケーションは挙動(動作)が複雑です。

    だから、本腰を入れてデバッグ用の[トレース出力]コマンドを満載しました。

    しかし、普通の場合には、今回のような非常に複雑なピタゴラ装置にはなりませんよね。

    なので、ここまで徹底的な準備は必要無いですよ。

    しかし、どうしても期待どうりの挙動が得られない場合には、今回の内容を思い出してデバッグしてみてください。

    > 分からないなりに推測した事
    > このプログラムのピタゴラスイッチは
    > &mCommanButtonDone なのではないかと推測しました。
    > 初期値には 0 が入っていて 
    > サブフォームの cmd訂正 をメソッドで実行した時
    > 機能名1 #代入( &mCommanButtonDone, 1 )になる。
    > これが起点になっているのかな?と推測しました。

    コマンドボタンの[実行]メソッドですが、

      &mCommanButtonDone = 0
      メソッド呼び出し 戻り値 = &return, @subformAccept.@cmd訂正.実行() /* &mCommanButtonDone が 1 になればOK 何故かサブフォームでは &return が ゼロで返ってくる事がある */
      **戻り値 意味
      ** 1   正常終了
      **1以外  実行できない、またはエラーで終了した

      **<参考>
      **スケジュール表_subform_accept.wfx
      ** オブジェクト名: cmd訂正
      ** 標題     : cmd訂正:予約済み 削除不可
      **  機能名 機能パラメータリスト
      ** 1 なし  #代入( &mCommanButtonDone, 1 )  ※&mCommanButtonDone が 1 になればOK
      ** 2 訂正
      ** 3 なし
      ** 4 なし

    論より証拠です。

    実際に[実行]メソッドによって、コマンドボタンが実行されているにも関わらず 戻り値 = &return の値がゼロです。

    ※これはメインフォームからサブフォームのコマンドボタンを実行した場合に限るようですが・・・

    桐のプログラミングを長年やっていると、こういう些細なことに遭遇するものなのですよ。

    だから、私( ONnoji )はずいぶん昔からこのアプローチを採用しています。※拙作フレームワークのランチャー等

    > これが起点になっているのかな?と推測しました。

    今回は単に動作を確認するためだけに &mCommanButtonDone を使っただけです。

    しかし、もしもメソッドを実行した後で
        ・・・・・・・・・・・・・

     if ( &return = 1 )

    と判定する必要があったならば、誤った判定によってピタゴラ装置の動作が変になりますよね。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ということで、 ※ ちなみに &mCommanButtonDone は &mCommandButtonDone と書いたつもりでしたが、"d" を打ち忘れましたね。(^^ゞ

     if ( &mCommanButtonDone ) /* 0 or 1 */

    という具合に、「石橋を叩いて渡る」というアプローチをしているのです。

    ちなみに、この↓メソッド

      メソッド呼び出し 戻り値 = &return, @subformAccept.@cmd訂正.実行()

    は、サブフォーム側のコマンドボタン:cmd訂正 を実行しているだけですよ。

    > 本来であれば、一番素直な方法は編集対象表があるので直接入力でした。
    > (冗談抜きでONnojiさんに言われるまで、発想が全く出てきませんでした・・・)

    通常の場合には、直接入力で十分ですよ。

    しかし、エラーを厳密にチェックしたい場合には、補助フォームを使う方がよいと思いますよ。

    >>どちらかというと、[トレース出力]コマンドを使ったデバッグの実習という感じでご覧ください。
    > 正にデバック実習状態になりましたが、 トレース出力 の凄さを実感出来た事が大収穫です(^^♪

    [トレース出力]コマンドは、[トレース出力]ウィンドウの生のデータを見ただけでは、超ワカリニクイですよね。

    なので、拙作:整形ユーティリティの[トレース整形]機能を使ってください。

    p.s.

    今回は、"main ->" と "subform ->" で、フォームの区別を明確にしています。

    しかし、このようにするのは面倒です。

    なので、拙作:フレームワークのデバッグの場合には、

    ┌when :INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( )を実行開始しました

    │ :INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) 引数:長整数 &行番号 = 15
    │ :INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) &EZWmRecFocus     = 14
    │ :INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) &EZWmRecNow      = 15

    └end

     または

    ┌when :D:\〇×△\INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( )を実行開始しました

    │ :D:\〇×△\INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) 引数:長整数 &行番号 = 16
    │ :D:\〇×△\INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) &EZWmRecFocus     = 15
    │ :D:\〇×△\INF_FW_IPS_Master.wfx hdl= 2>EZWprcEventRecMoveRun( ) &EZWmRecNow      = 16

    └end

    このように、ファイル名 + ハンドル番号 または ドライブ+パス+ファイル名 + ハンドル番号 付きでトレース出来るようにしてあります。

    例えば、主フォームと補助フォームが連動して動く場合のように、複数のフォームの挙動をトレースするためには、このような工夫も必要になってきます。

    もちろん、ただひとつのフォームを使用している時のトレースの場合にはこのような工夫は必要無いですよ。アハハハha


    p.p.s.

    そうそう、時限式タイマーが出てきて驚いたことでしょう。

    手続き定義開始 cmd行追加Click( )
      :
      :
     ** ここで prcサブフォームへフォーカスを移動( ) を実行するとサブフォームのフォーカスの移動が上手くいかない事がある
     ** サブフォームのコマンドボタン:cmd予定追加 をマウス左クリック以外で実行した場合には、 txt日付_入力用 にフォーカスが移動する :Good
     ** サブフォームのコマンドボタン:cmd予定追加 をマウス左クリックした時だけ、サブフォームのtxt日付_入力用 にフォーカスが移動しない:NG
     ** NG:手続き実行 prcサブフォームへフォーカスを移動( )
     ** 回避策として、時限タイマーの[タイマー1]イベントをインターバル 50/100秒で予約して、プログラムの流れを中断する

    という説明の通りです。

    非常にまれですが、「どうしても具合が悪い場合」に遭遇する事があるものです。

    その時には、プログラムの流れを終わらせて、時限式タイマーで続きを実行するというアプローチで解決することが多いです。

    もちろん、普通の場合には「どうしても具合が悪い場合」に遭遇する事はありませんから、過度な心配は要りませんよ。

    p.p.p.s.

    > 本日は、ずっとトレース出力ウィンドウ と スケジュール表_main.kex と スケジュール表_subform_accept.kex とにらめっこしています。

    そうそう、トレース出力ウィンドウとにらめっこするよりは、

    一通り動かして出力結果をクリップボードにコピーして、整形ユーティリティで整形したものを、
    ・・・・・・・・・・・・・・・・・・・・・・・

    { 画面で見る・ファイルに出力する・印刷する }方が落ち着いて見られますよ。


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

→Re[4]: 「目からウロコの・・・パート2.. /ONnoji
 
前の記事(元になった記事) 次の記事(この記事の返信)
上記関連ツリー

Nomal 「目からウロコの・・・パート2」を公開.. / ONnoji (24/06/11(Tue) 16:31) #1445 1718091910.jpg/44KB
Nomal Re[1]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/14(Fri) 17:36) #1446
│└Nomal Re[2]: 「目からウロコの・・・パート2.. / ONnoji (24/06/15(Sat) 17:45) #1447
│  └Nomal Re[3]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/17(Mon) 12:06) #1448
│    └Nomal Re[4]: 「目からウロコの・・・パート2.. / ONnoji (24/06/17(Mon) 15:17) #1449
│      └Nomal Re[5]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/17(Mon) 16:22) #1450
│        └Nomal Re[6]: 「目からウロコの・・・パート2.. / ONnoji (24/06/17(Mon) 17:33) #1451 1718614704.jpg/36KB
│          └Nomal Re[7]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/18(Tue) 10:27) #1452
│            └Nomal Re[8]: 「目からウロコの・・・パート2.. / ONnoji (24/06/18(Tue) 11:00) #1453
│              └Nomal Re[9]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/18(Tue) 12:03) #1454
│                └Nomal Re[10]: 「目からウロコの・・・パート2.. / ONnoji (24/06/18(Tue) 15:54) #1455
│                  └Nomal Re[11]: 「目からウロコの・・・パート2.. / ONnoji (24/06/18(Tue) 16:48) #1456
│                    └Nomal Re[12]: 「目からウロコの・・・パート2.. / ONnoji (24/06/18(Tue) 17:05) #1457
│                      └Nomal Re[13]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/19(Wed) 10:53) #1458
│                        └Nomal Re[14]: 「目からウロコの・・・パート2.. / ONnoji (24/06/19(Wed) 11:28) #1459
Nomal Re[1]: 「目からウロコの・・・パート2.. / ONnoji (24/06/19(Wed) 15:42) #1460
│├Nomal Re[2]: 「目からウロコの・・・パート2.. / ONnoji (24/06/19(Wed) 16:04) #1461
│├Nomal Re[2]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/19(Wed) 17:02) #1462
│├Nomal Re[2]: 「目からウロコの・・・パート2.. / 尾形 (24/06/19(Wed) 18:06) #1463
││└Nomal Re[3]: 「目からウロコの・・・パート2.. / ONnoji (24/06/19(Wed) 19:11) #1464 1718792137.jpg/57KB
│└Nomal Re[2]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/20(Thu) 14:50) #1467
│  └Nomal 「目からウロコの・・・パート2」を公開.. / ONnoji (24/06/20(Thu) 16:14) #1468 ←Now
│    └Nomal Re[4]: 「目からウロコの・・・パート2.. / ONnoji (24/06/21(Fri) 00:40) #1469
│      └Nomal Re[5]: 「目からウロコの・・・パート2.. / ONnoji (24/06/21(Fri) 09:27) #1470
│        └Nomal Re[6]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/06/21(Fri) 15:23) #1471
│          └Nomal Re[7]: 「目からウロコの・・・パート2.. / ONnoji (24/06/24(Mon) 22:03) #1473
│            └Nomal Re[8]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/07/18(Thu) 16:12) #1484
│              └Nomal Re[9]: 多重化のメリット 時限式タイマ.. / ONnoji (24/07/18(Thu) 17:29) #1485
│                ├Nomal Re[10]: 多重化のメリット 時限式タイマ.. / ONnoji (24/07/18(Thu) 18:26) #1487
│                │└Nomal Re[11]: 多重化のメリット 時限式タイマ.. / ジェダイの桐 (24/07/19(Fri) 10:10) #1488
│                └Nomal Re[10]: 「目からウロコの・・・パート2.. / ジェダイの桐 (24/07/18(Thu) 18:24) #1486
│                  └Nomal Re[11]: 「多重化のメリット 時限式タイ.. / ONnoji (24/07/19(Fri) 12:59) #1489
Nomal Re[1]: 「目からウロコの・・・パート2.. / ONnoji (24/06/24(Mon) 19:35) #1472 1719227391.jpg/49KB

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/

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

- Child Tree -
- Antispam Version -