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

[ 親記事をトピックトップへ ]

このトピックに書きこむ

■14407 / inTopicNo.1)  Re[11]: モジュール化はフォームのレベルでも必要
  
□投稿者/ ななーし -(2024/05/28(Tue) 16:08:35)
    ジェダイの桐さんこんにちは。

    たしかにONnojiさんのサイトはわかりやすいです。
    ただ、かなり丁寧な書き方をしてもらっていることもあり、
    少し詰まるとわからない感じがしてくるということがありました。
    詰まった原因は言葉のニュアンス理解ですね。どういう意味だろう?がわからなかったことがあり、桐をベースなので桐を見ながら紐解きしてました。

    超初心者クラスのフォームベースの作成ではOK,キャンセルと
    少しのイベント処理がわかればいいので桐のサンプルを分解して確認してみると参考になると思います。(桐のサンプルもゴテゴテしてはいるんですけどね(笑)シンプルすぎるのと難しいの中間くらいのものが欲しかったがわがままだと思うので割愛

    サンプルでこれわからない!ってなったらONnojiさんのサイトを見るとめちゃくちゃわかります。参考にしてみてください。
引用返信 [メール受信/OFF] 削除キー/
■14393 / inTopicNo.2)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/26(Sun) 16:15:44)
    2024/05/26(Sun) 16:38:46 編集(投稿者)

    コマンドボタンの機能名の種類がたくさんあるので、一覧表の形式よりもWBSの形式の方が見やすそうです。

    試しにこんな感じで作ってみました。

    ご参考になれば。

    1 コマンドボタン

    ├ 1.1 ファイル
    │ ├ 1.1.1 閉じる
    │ ├ 1.1.2 上書き保存
    │ ├ 1.1.3 開く
    │ ├ 1.1.4 表整理
    │ ├ 1.1.5 結合表の再抽出
    │ ├ 1.1.6 読み込み_表
    │ ├ 1.1.7 読み込み_テキスト
    │ ├ 1.1.8 読み込み_K3
    │ ├ 1.1.9 読み込み_CSV
    │ ├ 1.1.10 読み込み_PDF
    │ ├ 1.1.11 書き出し_表
    │ ├ 1.1.12 書き出し_テキスト
    │ ├ 1.1.13 書き出し_K3
    │ ├ 1.1.14 書き出し_CSV
    │ ├ 1.1.15 書き出し_転置
    │ ├ 1.1.16 書き出し_表の枠組み
    │ ├ 1.1.17 書き出し_外部データベース
    │ ├ 1.1.18 併合
    │ ├ 1.1.19 一覧表印刷
    │ └ 1.1.20 レポート印刷

    ├ 1.2 編集
    │ ├ 1.2.1 訂正
    │ ├ 1.2.2 表示/訂正
    │ ├ 1.2.3 表示
    │ ├ 1.2.4 ジャンプ
    │ ├ 1.2.5 フォーカス移動
    │ ├ 1.2.6 検索_条件名
    │ ├ 1.2.7 検索_比較式
    │ ├ 1.2.8 検索_値
    │ ├ 1.2.9 次を検索
    │ ├ 1.2.10 前を検索
    │ ├ 1.2.11 次を検索_比較式
    │ ├ 1.2.12 前を検索_比較式
    │ ├ 1.2.13 項目置換
    │ ├ 1.2.14 置換_条件名
    │ ├ 1.2.15 元に戻す
    │ ├ 1.2.16 削除
    │ └ 1.2.17 すべて選択

    ├ 1.3 クリップボード
    │ ├ 1.3.1 コピー
    │ ├ 1.3.2 切り取り
    │ └ 1.3.3 貼り付け

    ├ 1.4 表示
    │ ├ 1.4.1 ズームイン
    │ ├ 1.4.2 ズームアウト
    │ ├ 1.4.3 表編集へ
    │ ├ 1.4.4 フォームの選択
    │ ├ 1.4.5 削除行
    │ └ 1.4.6 スラッシュメニュー

    ├ 1.5 行操作
    │ ├ 1.5.1 行挿入
    │ ├ 1.5.2 行追加
    │ ├ 1.5.3 行削除_指定行
    │ ├ 1.5.4 行削除_全行
    │ ├ 1.5.5 行復活_指定行
    │ ├ 1.5.6 行復活_全行
    │ ├ 1.5.7 レコードロック_指定行
    │ ├ 1.5.8 レコードロック_現在行
    │ ├ 1.5.9 ロック解除_全行
    │ ├ 1.5.10 絞り込み_条件名
    │ ├ 1.5.11 絞り込み_比較式
    │ ├ 1.5.12 絞り込み_値
    │ ├ 1.5.13 絞り込み_指定行
    │ ├ 1.5.14 絞り込み_単一化
    │ ├ 1.5.15 絞り込み_重複行
    │ ├ 1.5.16 絞り込み_行数
    │ ├ 1.5.17 絞り込み_同一値
    │ ├ 1.5.18 補集合
    │ ├ 1.5.19 並べ替え_条件名
    │ ├ 1.5.20 並べ替え_昇順
    │ ├ 1.5.21 並べ替え_降順
    │ ├ 1.5.22 絞り込み_解除
    │ ├ 1.5.23 解除
    │ ├ 1.5.24 グループ指定
    │ ├ 1.5.25 グループ検索
    │ ├ 1.5.26 グループ値訂正
    │ ├ 1.5.27 グループ追加
    │ ├ 1.5.28 グループ再抽出
    │ └ 1.5.29 グループ解除

    ├ 1.6 入力
    │ ├ 1.6.1 直前値
    │ ├ 1.6.2 直前行
    │ └ 1.6.3 値複写

    ├ 1.7 ウィンドウ
    │ ├ 1.7.1 多重化_表編集
    │ └ 1.7.2 多重化_フォーム編集

    ├ 1.8 Webビュー ※桐sSLで新しく追加されたグループ
    │ ├ 1.8.1 戻る
    │ ├ 1.8.2 進む
    │ ├ 1.8.3 更新
    │ ├ 1.8.4 ホーム
    │ └ 1.8.5 URL取得

    ├ 1.9 手続き実行
    │ └ 1.9.1 手続き実行

    ├ 1.10 その他
    │ ├ 1.10.1 再生
    │ ├ 1.10.2 状況依存ヘルプ
    │ ├ 1.10.3 モーダルフォーム
    │ ├ 1.10.4 ファイル名入力
    │ ├ 1.10.5 編集制御
    │ ├ 1.10.6 シェル実行
    │ ├ 1.10.7 実行条件
    │ ├ 1.10.8 一括処理へ戻る ※「フォーム+イベント処理」では使用しません
    │ └ 1.10.9 桐の終了

    └ 1.11 なし
      └ 1.11.1 なし

引用返信 [メール受信/OFF] 削除キー/
■14387 / inTopicNo.3)  Re[8]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/24(Fri) 10:12:41)
    ONnojiさん


    おはようございます!


    > 今回の質問のゴールであるポップアップウィンドウ(モーダルフォーム)で開始日時と終了日時を指定して、
    >
    > 呼び出し元のフォームの編集対象表のレコードを絞り込むという目的は達成できましたね。パチパチパチ (^^v♪


    本当に嬉しいです!
    ありがとうございましたm(__)m
    桐に不慣れな人も喜んでいます。喜んで貰える設計(構造)に助言を貰いながら作成出来た事も嬉しいです!


    > つまり、どんな事でも、少しづつ経験を積み重ねていかなければ一人前にはならないものなのですよね。
    >
    > これって、会社の仕事もしかりで何にでも当てはまりますよね。
    >
    > もしも、「フォーム+イベント処理」を上達したいと志すのであれば、経験をたくさん積んでください。

    > きっと、AKさんもその事をを伝えたかったのだと思いますよ。


    > ジェダイの桐さんの質問投稿を読むと、AKさんもですが私( ONnoji )も自分自身の昔の姿を思い起こしてしまうのですよ、
    >
    > だから、気になって仕方が無いのですね。アハハha


    私は幸せ者です。
    だって、色んな人に気にかけて貰えているのですから。
    ありがとうございます!


    図(ダイアグラム)を書いて、やりたい事を定める事を習慣づけます。


    シンプルなのに、やりたい事が実現でき 且つ 分かりやすい。
    サンプル作成頂いたアプローチが衝撃的でした。


    コマンドボタンの機能 モーダルフォームの機能を見定める。
    コマンドボタンの機能(使い方)の認識が変わりました。
    これが凄く重要ですね。
    今回の件で良く分かりました。


    > こちら
    >  ↓
    > ドレイファスモデルとは何か?技能の5段階と各段階にあわせた対応方法を解説 | Promapedia(プロマペディア)
    > https://ssaits.jp/promapedia/method/dreyfus_model.html
    >
    >
    > ドレイファスモデル:直観力の習得 – アイ&カンパニー
    > https://iandco.jp/ex/dreyfus/
    >
    >>ドレイファスモデル:直観力の習得
    >>
    >>1. 初心者、Novice :経験がほとんどない
    >>
    >>2. 中級者、Advanced beginner :自分だけでは問題解決にてこずる
    >>
    >>3. 上級者、Competent :自分で問題解決できる
    >>
    >>4. 熟練者、Proficient :自分で学び成長することができる
    >>
    >>5. 達人、Expert :直観で行動できる


    この記事を読んでいきます!
    教えて頂きありがとうございます!


    p.s.


    >【本当に必要なメッセージと不要なメッセージ】

    >サンプルでは、デバッグ目的でメッセージボックスを表示していますが、

    >特に else つまり、[OK]ボタン以外、つまり[キャンセル]・ボタン[×]ボタン・[Esc]キーを押すの場合には、

    >メッセージボックスを出す必要はありませんよ。※デバッグ中を除く

    >なぜならば、モーダルフォームを[キャンセル]・ボタン[×]ボタン・[Esc]キーを押した人は、

    >作業の取り消しの意思を示したのですから、ご丁寧に"キャンセルしました〜(^^♪"なんて表示するのは手間を増やすだけの余計なお節介です。
    >・・・・・・・・・・・・・・          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >お節介なメッセージが欲しいのは開発者がテストをしている時だけです。
    >・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >なので、実際に運用する時には、 else 側のメッセ―ボックスは表示されないようにコメントアウトしてください。


    ずっと不思議な事がありました。
    あこめさんの入門講座 Chapter4 でメッセージボックスが出てきます。


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

    else
     確認 "中止しました"

    キャンセルした際の表示なので、実際に稼働している時には不要でしょう。
    ここではメッセージボックスが動作したかどうかのデバック用に設定したわけです。

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


    と、解説が出てきます。
    私としては、せっかく作ったのに何故不要なんだろう??
    と思っていた訳ですが、ONnojiさんのコメントで解決しました!


    今なら、意味が理解出来ますし "キャンセルしました" は作業者にとって煩わしいですね。


引用返信 [メール受信/OFF] 削除キー/
■14386 / inTopicNo.4)  Re[10]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/24(Fri) 09:37:14)
    AKさん


    おはようございます!


    > ONnojiさんのHPは難しいと感じるかもしれませんが私が知りうる限りではイベント処理の勉強では間違いなく一番参考になると思います。
    > 同様にAkomeさんのHPも参考になると思います。
    > ぜひ見よう見真似をした上で自力で作成してみてください。


    今回の件で、本当の意味で理解出来た事があります。
    それは、切羽詰まらない(必要に迫られない)と真剣なつもりなんだなぁって事です。


    ONnojiさんのホームページを何回も読んでいるのですが、
    フォームアプリケーション教書 第1部 9.2 に実行条件の事が書いてあります。
    具体的な使用方法は今回学べたのですが、ヒントが既に提示されているんですよね・・・


    正に読んだつもり状態ですよね。(ヤレヤレです(T_T))


    > しかし繰り返し作っていって慣れてくれば、いづれ「今度はこうしたい!」という意欲がわいてきてドンドン上達すると思います。
    > 初心者、初級者はこの繰り返しの実践しかありません。
    > そして今回のような要求に耐えうる知識と技術が少しずつ身につくと思います。


    取り組み続けていきますね!
    (実際、桐のプログラム(仕掛け)を考えるのは楽しいですし、上手くいった時は嬉しいです(^^)/)


    > 次回は一から自作されたフォームとイベントファイルの質問を拝見させていただければなぁと勝手に思っております。^^


    はい!
    その時が来ましたら、助言の程よろしくお願いしますm(__)m


引用返信 [メール受信/OFF] 削除キー/
■14385 / inTopicNo.5)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/23(Thu) 22:57:26)
    2024/05/24(Fri) 00:21:18 編集(投稿者)
    2024/05/23(Thu) 23:57:06 編集(投稿者)

    今回の質問のゴールであるポップアップウィンドウ(モーダルフォーム)で開始日時と終了日時を指定して、

    呼び出し元のフォームの編集対象表のレコードを絞り込むという目的は達成できましたね。パチパチパチ (^^v♪

    今回もですが、Win桐の「フォーム+イベント処理」にしても(エクセルのVBAにしてもですが)、つくづく思いましたが初級者には難しいですね。

    これは自動車の運転と同じですね。※自動車の免許を持っていない人は初めて自転車に乗る時を思い出してください。

    当然ですが、誰でも最初から自動車を自由自在に運転できるワケではありませんよね。

    同じく、当然ですが、誰でも最初からジェット旅客機のパイロットになれるワケではありませんよね。

    だから、最初から自分が何でも出来ると思うのは誤りですね。

    つまり、どんな事でも、少しづつ経験を積み重ねていかなければ一人前にはならないものなのですよね。

    これって、会社の仕事もしかりで何にでも当てはまりますよね。

    もしも、「フォーム+イベント処理」を上達したいと志すのであれば、経験をたくさん積んでください。

    きっと、AKさんもその事をを伝えたかったのだと思いますよ。

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

    桐の「フォーム+イベント処理」では、内容にもよりますが、マイクロソフト社のVBやC#で作成したアプリケーションと遜色の無いくらいのアプリケーションが作れますよ。

    こんなにも、簡単にお手軽にアプリケーションが作れるのに放って置くのは勿体ないと思いませんか?

    いま流行の、「きんとん雲」より少しだけ手間が掛かりますが、「痒いところに細かに手が届く」アプリケーションが作れるのはWin桐くらいかと思いますよ。

    私( ONnoji )は、Win桐をアプリケーション開発のプラットフォームだと発信してきました。

    だから、Win桐でアプリケーションを開発する人は、もっともっともっと自信を持っていただきたいのでありますゾ!。

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

    ジェダイの桐さんの質問投稿を読むと、AKさんもですが私( ONnoji )も自分自身の昔の姿を思い起こしてしまうのですよ、

    だから、気になって仕方が無いのですね。アハハha

    というわけで、毎回のようにツリーが膨張してごめんなさいね。(^^ゞ > 【多遊】さん

    p.s.

    元々は人工知能を批判する哲学者が提唱したものですが・・・

    「ドレイファスモデル」という超有名な学習に関するモデルがあります。

    是非、お読みください。※随分昔に私( ONnoji )はアスキー刊の[純粋人工知能批判( 原題:Mind Over Machine )を読んで感銘を受けましたよ。


    こちら
     ↓
    ドレイファスモデルとは何か?技能の5段階と各段階にあわせた対応方法を解説 | Promapedia(プロマペディア)
    https://ssaits.jp/promapedia/method/dreyfus_model.html


    ドレイファスモデル:直観力の習得 – アイ&カンパニー
    https://iandco.jp/ex/dreyfus/

    > ドレイファスモデル:直観力の習得
    >
    > 1. 初心者、Novice :経験がほとんどない
    >
    > 2. 中級者、Advanced beginner :自分だけでは問題解決にてこずる
    >
    > 3. 上級者、Competent :自分で問題解決できる
    >
    > 4. 熟練者、Proficient :自分で学び成長することができる
    >
    > 5. 達人、Expert :直観で行動できる


    ちなみに、現在では「パトリシア・ベナーの看護理論」の方が有名かもしれませんが、内容は同じですよ。

引用返信 [メール受信/OFF] 削除キー/
■14384 / inTopicNo.6)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ まさやん -(2024/05/23(Thu) 20:28:09)
    ジェダイの桐さん

    > まさやんさんの #日数 という関数も知らなかったですし

    原始的な方法書いちゃいましてすみませんでした。

    イベント 発展途上人で 私も勉強になりました。
    ありがとうございます。
引用返信 [メール受信/OFF] 削除キー/
■14383 / inTopicNo.7)  Re[7]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/23(Thu) 17:31:31)
    2024/05/23(Thu) 17:38:51 編集(投稿者)

    > AKさんにもお勧め頂いたし、何より見やすいプラグラムを書きたいなと思い、
    > utx_list3 をインストールしました。
    > 感想ですが、もっと早くインストールすれば良かったな思いました(^^)/
    > 字下げを自動でやってくれるのは、有難いです。
    > 整形ユーティリティ教書 基本編 を読み込んで より使い方を勉強させて頂きますm(__)m

    「整形ユーティリティ教書 基本編」は紹介記事なので、

    同梱の説明書の

     1st_ヘルプ_utx_list3.txt

    も併せてお読みください。

引用返信 [メール受信/OFF] 削除キー/
■14382 / inTopicNo.8)  Re[6]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/23(Thu) 17:27:14)
    ONnojiさん


    > そこで、拙作:整形ユーティリティ 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
    >
    > もちろん、これは必須ではありませんので、こんなことも出来るんだなぁ〜と思っていただければ十分ですよ。


    AKさんにもお勧め頂いたし、何より見やすいプラグラムを書きたいなと思い、
    utx_list3 をインストールしました。


    感想ですが、もっと早くインストールすれば良かったな思いました(^^)/
    字下げを自動でやってくれるのは、有難いです。


    整形ユーティリティ教書 基本編 を読み込んで より使い方を勉強させて頂きますm(__)m


引用返信 [メール受信/OFF] 削除キー/
■14381 / inTopicNo.9)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ AK -(2024/05/23(Thu) 17:15:06)
    2024/05/26(Sun) 18:00:40 編集(投稿者)

    ジェダイの桐さんへ

    解決済み後に申し訳ないですが・・・。

    職場で色々試行錯誤されてご苦労されているのでしょうか?

    またまた本当に余計なお世話ですが、私の紆余曲折失敗した経験からお伝えします。


    ONnojiさんもおっしゃっているようにネット上の情報、ファイル、サンプルなどは玉石混合で参考になるものもあれば、参考にならないものがあります。

    しかも残念ながら、参考にならない(してはいけない)情報がほとんどではないでしょうか?

    これは何も桐だけに限った話ではないと思います。

    私は書店に行くたびにExcelVBAの参考書を立ち読みしますが、VBA初心者レベルの私が

    「これだ!わかりやすい!これは良書だ!」という書籍はこの10年間でわずか1冊です。

    実際にお金を払ってもよいと思える参考書でさえ、こんな感じですのでネットの情報は疑ってかかったほうが良いと思います。

    私も幾度となく間違った情報を読み漁って失敗しました。

    特にオブジェクト指向プログラミングの考え方についてはその最たる例でした。

    今回のやり取りを拝見しましたが、まずは自力でフォーム+イベント処理を作り上げたほうが良いと思います。

    これは当然簡単なものからでよいです。


    ONnojiさんのHPは難しいと感じるかもしれませんが私が知りうる限りではイベント処理の勉強では間違いなく一番参考になると思います。

    同様にAkomeさんのHPも参考になると思います。

    ぜひ見よう見真似をした上で自力で作成してみてください。

    私も10数年前にONnojiさんの当時のHPを参考にして、見よう見まねで三角形の面積計算のイベント処理から作成していきました。

    今でも自分で作ったサンプルファイルは大事にPCに保存しています。

    最初はすぐに頭が混乱してしまい人が作ったものを読むのは少しできましたが、自分の頭で考えると途端に頭がパンクしていました・・・。

    しかし繰り返し作っていって慣れてくれば、いづれ「今度はこうしたい!」という意欲がわいてきてドンドン上達すると思います。

    初心者、初級者はこの繰り返しの実践しかありません。

    そして今回のような要求に耐えうる知識と技術が少しずつ身につくと思います。

    私も当時はかなり苦労しましたが、幸いにして色々ご指導いただいたおかげで業務で必要なレベルは自前で作って修正や拡張ができるようになりました。

    当然人様に見せられるほどのレベルではありませんが・・・T_T


    お伝えしたいことは色々ありますが、最後に私なりに今回感じたことです。

    せっかくイベント処理の勉強を始められていますので、難しいかもしれませんが是非頑張って習得することをお勧めします。^^

    私はある程度習得できて業務の幅も広がり、併せて桐を通じてPCの難しさも経験しました。

    次回は一から自作されたフォームとイベントファイルの質問を拝見させていただければなぁと勝手に思っております。^^
引用返信 [メール受信/OFF] 削除キー/
■14380 / inTopicNo.10)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/23(Thu) 16:26:47)
    2024/05/23(Thu) 17:13:39 編集(投稿者)
    2024/05/23(Thu) 16:33:06 編集(投稿者)

    > そもそもなのですが、主ウィンドウ から モーダルフォームを呼び出して絞り込みをするなんて事はやりたくないのです。
    >
    > 今回は日時の範囲を指定して絞り込みをしたかったのですが、
    > 桐の表に慣れている人なら 絞り込み:比較式で
    > D"24/4/1"≦[]≦D"24/4/30" とか D"24/4/1"≦[]≦#月末(D"24/4/1")
    > とか使って絞り込めばいいだけです。
    >
    > じゃあ何故 主ウィンドウ から モーダルフォーム 方式に挑戦したかと言えば、桐を初めて使用する人が 日付の範囲絞り込みが難しいとの事だったので、
    > 絞り込み開始日 と 絞り込み終了日 を入力して絞り込む 方法をやってみたのです。
    >
    > 桐を初めて使用する人の評価は 使いやすい との事でした。
    >
    > だけど、桐に慣れてきたら このやり方は面倒になってくるんじゃないかな??
    > と思っています。
    > その時に 絞り込み:比較式 の方法を伝えようと思っています(^^)/

    ジェダイの桐さん本人以外も使用するアプリケーションの場合には、桐に慣れていない人を基準にするべきですよ。

    桐に慣れていない人が、勉強して上達するなどと期待しない方がよろしいのではありませんか?

    だって、皆さん忙しいんですし、そもそも桐に興味がないのですから・・・

    エクセルを使っている人だって、周りのみんなが使っているから仕方なしにエクセルを使っているわけです。

    多くの人は、出来ればPCなんか使わないで済むといいと思っていますよ。

    > 私がやりたかった事が、正に実現出来ました。
    > 期間指定絞込.wfx にある cmdok の 実行条件に
    > ( &gRefinementStartDate <= &gRefinementEndDate ) があるので、
    > 24/4/1 から 24/3/1 と入力した場合はそもそも okボタンが押せない
    >
    > 思い通りの日付が入力されたら
    > 主ウィンドウに戻り(期間指定絞込.wfxが閉じられ)絞り込みを実行するか しないかをメッセージボックスで問う
    > とにかく分かりやすかったです。

    【モーダルフォームで [Esc]キーを推す事】

    モーダルフォームで [Esc]キーを押すとモーダルフォームは閉じられます。

    これはタイトルバーの[×]ボタンを押したのと同じです。

    ただし、今回のモーダルフォームでは、開始時実行コマンド:cmdStartup で訂正モードに遷移していますから、

    [Esc]キーを押すと表示モードに遷移して、もう一度 [Esc]キーを押すとモーダルフォームは閉じられます。

    【本当に必要なメッセージと不要なメッセージ】

    サンプルでは、デバッグ目的でメッセージボックスを表示していますが、

    特に else つまり、[OK]ボタン以外、つまり[キャンセル]・ボタン[×]ボタン・[Esc]キーを押すの場合には、

    メッセージボックスを出す必要はありませんよ。※デバッグ中を除く

    なぜならば、モーダルフォームを[キャンセル]・ボタン[×]ボタン・[Esc]キーを押した人は、

    作業の取り消しの意思を示したのですから、ご丁寧に"キャンセルしました〜(^^♪"なんて表示するのは手間を増やすだけの余計なお節介です。
    ・・・・・・・・・・・・・・          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    お節介なメッセージが欲しいのは開発者がテストをしている時だけです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    なので、実際に運用する時には、 else 側のメッセ―ボックスは表示されないようにコメントアウトしてください。

    p.s.

    >>昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。
    > 分かりました。
    > これに関しては、もうどれを参考にしたかは分からなくなりましたが、
    > 具体的なプログラムは記載されていなかったんです。
    > 考え方として、主ウィンドウからモーダルフォームを開いて絞り込む手順がありますよ程度のアイデアを記載されていたと思います。

    最初に見せていただいたものは、それにしてもスゴイ作例でしたね。

    見た瞬間に、ほとんど気絶しそうでしたよ。( 一一)

    当方は小旅行中だったのでスマホしか使えませんでした。

    そのうち「解決済み」になっちゃったので気にしていなかったのですが、家に戻って拝見したらびっくり仰天でした。

    今回、「イベント駆動(イベントドリブン)」の「フォーム+イベント処理」を、

    「ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということ」に例えました。

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

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

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

    ソフトウェアの仕掛けを複数個用意するというのですから、まずフォームの機能に眼を向けてください。

    例えば、コマンドボタンの機能や、モーダルフォームの機能です。

    ということで、コマンド(メソッドを含む)の方の知識は後回しでいいのです。

    「フォーム+イベント処理」が上手にできないという人の場合には、

    長年一括処理を使用していたために、桐言語のコマンドに精通しているのですが、

    フォームの属性やコマンドボタンの機能に無関心で無知な場合なのです。※こういう人は、プログラムはコマンドで作るものだと漠然と思っているのです
    ・・・・・・・・・・・・・・・・・・・・・・・・・

    だって、フォームの事を何も知らないのですから、ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということが出来るハズがないのです。
        ・・・・・・・・・・・・・      ・・・・・・・・・・・・・・・・・・・・・・・・・・・

     今回のピタゴラスイッチ(ソフトウェアの仕掛け)

      日付絞り込み.wfx

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

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

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

                    機能名   機能パラメータリスト
                    1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
                    2 なし    #代入( &gAnswer, 1 )
                    3 閉じる
                     │
      ┌──────────────┘
      │
      4 手続き実行    cmd期間指定絞込Click
                  ↓
                  ↓
                手続き定義開始 cmd期間指定絞込Click( )
                 変数宣言 自動,文字列{ &title = "cmd期間指定絞込Click( )", &msg }
                  :
                  :
                手続き定義終了


     ※最初のうちは、↑上のような図(ダイアグラム)を書いてみるといいですよ。慣れれば頭の中でイメージできるようになります。


引用返信 [メール受信/OFF] 削除キー/
■14376 / inTopicNo.11)  Re[8]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/23(Thu) 13:53:28)
    ONnojiさん


    こんにちは!


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


    分かりました。
    これに関しては、もうどれを参考にしたかは分からなくなりましたが、
    具体的なプログラムは記載されていなかったんです。


    考え方として、主ウィンドウからモーダルフォームを開いて絞り込む手順がありますよ程度のアイデアを記載されていたと思います。


    今にして思えば、上級者通しのやり取りだった(少なからず、私より知識はある)
    ので、投稿者さんもそのアイデアでONnojiさんが提示してくれたサンプル
    (主ウィンドウ 絞り込み モーダルフォーム 変数操作)の手順で絞り込みを
    したんじゃないかと思います。


    その部分を私なりにやった結果が、あのやり方だったんです・・・


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


    cmd期間指定絞込 を押す前はフォームの変数管理の固有変数は無いですが、
    押した後は 変数管理画面に固有変数が現れました。


    名札 メイン に固有変数を宣言して、使用したら変数管理画面に出てくるんですね(^^♪


    > これには、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。
    >
    > しかし、どうしても試したいというのであれば、INF_Framework をフォームに導入してください。
    >
    > そして、あこめの桐のプログラミング入門のトップページから
    >
    >   INF_Framework:局所変数の受け渡し
    >
    > を読んでください。
    >
    > そうすれば、局所変数を使った本当に変数の値の受け渡しが試せますよ。しかも超簡単に(^^♪


    そもそもなのですが、主ウィンドウ から モーダルフォームを呼び出して絞り込みをするなんて事はやりたくないのです。


    今回は日時の範囲を指定して絞り込みをしたかったのですが、
    桐の表に慣れている人なら 絞り込み:比較式で
    D"24/4/1"≦[]≦D"24/4/30" とか D"24/4/1"≦[]≦#月末(D"24/4/1")
    とか使って絞り込めばいいだけです。


    じゃあ何故 主ウィンドウ から モーダルフォーム 方式に挑戦したかと言えば、桐を初めて使用する人が 日付の範囲絞り込みが難しいとの事だったので、
    絞り込み開始日 と 絞り込み終了日 を入力して絞り込む 方法をやってみたのです。


    桐を初めて使用する人の評価は 使いやすい との事でした。


    だけど、桐に慣れてきたら このやり方は面倒になってくるんじゃないかな??
    と思っています。
    その時に 絞り込み:比較式 の方法を伝えようと思っています(^^)/


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


    私がやりたかった事が、正に実現出来ました。
    期間指定絞込.wfx にある cmdok の 実行条件に
    ( &gRefinementStartDate <= &gRefinementEndDate ) があるので、
    24/4/1 から 24/3/1 と入力した場合はそもそも okボタンが押せない


    思い通りの日付が入力されたら
    主ウィンドウに戻り(期間指定絞込.wfxが閉じられ)絞り込みを実行するか しないかをメッセージボックスで問う


    とにかく分かりやすかったです。


    まさやんさんの #日数 という関数も知らなかったですし
    AKさんに教えて貰った 実行条件 も知らなかったです。


    ONnojiさんに作成して頂いた、サンプルも凄く勉強になりました。


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

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■14373 / inTopicNo.12)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 23:34:46)

    添付した"期間指定絞込.wfx"はチャイルド形式のフォームですが、

    モーダルフォームとして開くと、桐が自動的にポップアップ形式で表示します。

    そして、ポップアップ形式で表示された時に、タイトルバーの下にメニューバーが表示されます。

    メニューバーはポップアップの時にしか表示されませんので、

    もしも、邪魔な場合には、※余計な操作が出来ちゃうので結構邪魔なんですよ。アッハアha(^^ゞ

    フォームのオブジェクトの属性の[フォーム]タブの[メニューバー]のチェックをオフにしてください。

    ※添付画像を参照
919×453 => 250×123

1716388486.jpg
/73KB
引用返信 [メール受信/OFF] 削除キー/
■14371 / inTopicNo.13)  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] 削除キー/
■14370 / inTopicNo.14)  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] 削除キー/
■14369 / inTopicNo.15)  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] 削除キー/
■14368 / inTopicNo.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] 削除キー/
■14367 / inTopicNo.17)  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] 削除キー/
■14366 / inTopicNo.18)  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] 削除キー/
■14365 / inTopicNo.19)  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] 削除キー/
■14364 / inTopicNo.20)  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] 削除キー/

次の20件>

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

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

- Child Tree -
- Antispam Version -