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

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

■1445 / inTopicNo.1)  「目からウロコの・・・パート2」を公開しました。
  
□投稿者/ ONnoji -(2024/06/11(Tue) 16:31:26)
    2024/06/11(Tue) 16:44:53 編集(投稿者)

    <お知らせ>

    拙作webページで

    「目からウロコのデータベース桐プログラミング入門 パート2」を公開しました。

    こちら
     ↓
    桐の釣魚大全のトップ
    http://silicon7565.html.xdomain.jp/

    桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2
    http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html

    ブラウザで表示されない場合には、F5キーを押してリロードしてください。
                    ・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    このテキストの内容は、[フォーム+イベント処理]の初級者向けです。

    パート2で初級者の前に最初に立ちはだかる難問は、「オブジェクトって何ですか〜?」です。

    なお、このテキストは拙作webページの「桐の釣魚大全」の

    「桐のイベント処理の入門講座」

     新 フォームアプリケーション入門 §1
     新 フォームアプリケーション入門 §2

    の副読本として執筆したものです。

    目次
    10     オブジェクトって何ですか〜?
    10.1   オブジェクトは、パソコンの画面上の操作対象のこと
    10.2   [オブジェクトのリスト]ウィンドウを使いましょう
    11     属性ってなんですか〜?
    11.1   [オブジェクトの属性]ウィンドウと[オブジェクトのリスト]ウィンドウの違い
    11.2   属性の取得と属性の設定
    11.2.1 属性の取得
    11.2.2 オブジェクトの属性と変数のデータ型
    11.2.3 属性の設定
    12     メソッドってなんですか〜?
    12.1   メソッド呼び出し
    12.2   [更新モード設定]メソッドを使うか? コマンドボタンの機能を使うか?、それが問題だ
    12.3   [フォーカス設定]メソッドを使うか? タブオーダーの設定を使うか?、それが問題だ
    13     エラー対策のあれこれ
    13.1   if ( 条件 ) ... else ... end
    13.2   エラー処理コマンドはあるけれど
    13.3   フォーム以外のオブジェクト名をチェックする


580×442 => 250×190

1718091910.jpg
/44KB
引用返信 [メール受信/OFF] 削除キー/
■1446 / inTopicNo.2)  Re[1]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/14(Fri) 17:36:49)
    ONnojiさん


    こんにちは!


    まさか 目からうろこのデータベース桐プログラミング入門 に パート2が出るとは思っていませんでした!

    初級者には助かります。


    感想です。


    11.2 からの 属性の取得 設定 で勉強になった(知らなかった)部分が
    オブジェクトリストから 雛形 が取得できる事です。


    私はオブジェクト操作での 文章を書くのが得意ではありません。
    なので、雛形があれば今よりかは早くやりたい事の文章を書くことが出来ると思います(^^♪

    オブジェクト操作 って何種類も書き方があるので、結構ハードルが高く感じていました。
    なので、慣れるまでは雛形に倣って覚えていき、慣れてきたら応用すると言う、ステップアップの方法が私には分かりやすいと思います。


    12.2 更新モード設定


    私は、出来るだけコマンドボタンの機能で完結したいのですが、未だに達成できていない(理解出来ていない)事があります。


    コマンドボタンで 機能名 行追加 をした後に 機能名 表示 をしても
    表示モードになりませんでした。

    これは、仕様 なのか 私のやり方が悪い のか未だ分かっていませんが
    解決した方法が

    メソッド呼び出し @フォーム.更新モード設定( 6 )
    メソッド呼び出し @フォーム.更新モード設定( 0 )

    でした。


    更新モード設定があって良かったと思う反面、なにかしっくりきませんでした(T_T)


    話がそれましたが、記述されている様に基本的にコマンドボタンの機能名で指示した方が便利だと思います(^^)/


    13.1


    if else end も得意ではないのですが、


    else end をエラー関連処理
    .not エラーの条件


    という記述を見て、少し モヤモヤ が晴れた気がしました。


    エラー(偽)の条件を考えて .not を付ける
    かなり応用範囲が広い考え方だと感じました!

    勉強になりました!


    以上 私の感想になります。


引用返信 [メール受信/OFF] 削除キー/
■1447 / inTopicNo.3)  Re[2]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/15(Sat) 17:45:21)
    2024/06/16(Sun) 11:16:46 編集(投稿者)
    2024/06/15(Sat) 21:02:18 編集(投稿者)

    ジェダイの桐さん

    フィードバックありがとうございます。m(__)m


    > まさか 目からうろこのデータベース桐プログラミング入門 に パート2が出るとは思っていませんでした!

    本編の「新 フォームアプリケーション入門」は§1/§2で終了で続編はありません。
    実は、この種のテキストは画像を含むので非常に手間が掛かるので大変なんです。アハハハ(^^ゞ
    それに初級者向けの内容というのは膨大になるため、「ネバ―エンディング・ストーリー」なる危うさがあります。
       ・・・・・・・・・・・・・・・・・・

    一方、「フォームアプリケーション教書 第1部/第2部」は上級者向けの事典のような内容です。

    ちなみに、私( ONnoji )は技能の習得というレベルを「初級者・熟練した初級者・上級者・プロ・エキスパート」の5段階に分けています。※ドレイファスモデル
    ということで、いわゆる「世間の中級者」は「熟練した初級者」という扱いになります。

    そして最近、この「熟練した初級者」という技能レベルの人向けならば、(基本的に画像が無しで)文章と図解だけで十分解説出来るだろうと気が付いたのです。
    それが、「目からウロコの・・・」というシリーズの執筆の発端でした。

    ということで、文章と図解だけであれば当方の執筆の負担が少ないので、パート3等の続編を掲載しようと考えています。アハハハha

    > 11.2 からの 属性の取得 設定 で勉強になった(知らなかった)部分が
    > オブジェクトリストから 雛形 が取得できる事です。

    実は、ヘルプに書いてあるんですよ。

    こちら
     ↓
    [桐 - ヘルプ]→[一括処理・履歴・イベント]→[入門]→[イベント処理]→[定義してみましょう]→[オブジェクト属性の参照]

    でもね、読まない人が多いんですよ。※私もちゃんと読んだことが有りませんけれどねぇ〜。アハハハ

    [オブジェクト属性の参照]はヘルプにあるのですから、「新 フォームアプリケーション入門 §1/§2」では割愛しているのですよ。

    しかし、「目からウロコの・・・」は(基本的に画像が無しで)文章と図解だけなので、今回[オブジェクト属性の参照]を題材にしました。

    > 私はオブジェクト操作での 文章を書くのが得意ではありません。
    > なので、雛形があれば今よりかは早くやりたい事の文章を書くことが出来ると思います(^^♪
    > オブジェクト操作 って何種類も書き方があるので、結構ハードルが高く感じていました。
    > なので、慣れるまでは雛形に倣って覚えていき、慣れてきたら応用すると言う、ステップアップの方法が私には分かりやすいと思います。

    [オブジェクト操作]コマンドには、2つの書式がありますね。

    a.オブジェクト操作 &variableName1 = @objectName.属性名1, &variableName2 = @objectName.属性名2

      オブジェクト操作 @objectName.属性名1 = expression1, @objectName.属性名2 = expression2


    b.オブジェクト操作 @objectName{ &variableName1 = 属性名1, &variableName2 = 属性名2 }

      オブジェクト操作 @objectName{ 属性名1 = expression1, 属性名2 = expression2 }

    [オブジェクト属性の参照]の雛形は、a形式ですね。

    b形式は、雛形を更に書き直さなければなりませんので手間が掛かります。

    しかし、慣れてしまうとそれ程の手間もかかりませんので、最近では私( ONnoji )はb形式の方を使っていますね。

    どちらでも結果は同じなので、単に好みの問題ですね。

    > 12.2 更新モード設定
    > 私は、出来るだけコマンドボタンの機能で完結したいのですが、未だに達成できていない(理解出来ていない)事があります。
    > 解決した方法が
    > メソッド呼び出し @フォーム.更新モード設定( 6 )
    > メソッド呼び出し @フォーム.更新モード設定( 0 )
    > でした。

    これですね
     ↓
     オブジェクト名: cmd予定追加
     標題     : 予定追加

      機能名    機能パラメータリスト
     1 表示     確定する
     2 手続き実行  cmd予定追加Click
     3 訂正     "txt日付_入力用"
     4 なし

    手続き定義開始 cmd予定追加Click()

     メソッド呼び出し @フォーム.更新モード設定( 6 )
     項目値代入 [日付] = &m日付, [予定] = &m予定
     メソッド呼び出し @フォーム.更新モード設定( 0 )

     &m日付 = #u, &m予定 = #u

    手続き定義終了

    もしも、私だったら以下のようにしますよ。

     オブジェクト名: cmd予定追加
     標題     : 予定追加

      機能名    機能パラメータリスト
     1 表示
     2 手続き実行  cmd予定追加Click
     3 訂正     "txt日付_入力用"
     4 なし

    手続き定義開始 cmd予定追加Click()
     変数宣言 自動,整数{ &status }

     ** cf.桐ヘルプ[行追加]コマンド  編集対象表の最後に新規行を追加します。1回の実行で、1件の行を追加します。
     行追加 終了状態 = &status, [日付] = &m日付, [予定] = &m予定

     ** &status
     ** 戻り値 説明
     ** 1    正常に終了した
     ** 0    共有違反以外のエラーが発生した
     **-2    他の利用者が置換や併合などの処理を実行中(ファイル排他)

     &m日付 = #u /* 代入をマルチステートメント風に書くと水平方向に視線が移動するので変数名が探し難くなります */
     &m予定 = #u

    手続き定義終了

    > コマンドボタンで 機能名 行追加 をした後に 機能名 表示 をしても
    > 表示モードになりませんでした。
    > これは、仕様 なのか 私のやり方が悪い のか未だ分かっていませんが
    > 更新モード設定があって良かったと思う反面、なにかしっくりきませんでした(T_T)

    桐だけしか使っていない人の場合には当たり前のことですが、
    それ以外の人にとっては、桐に[更新モード]があることを不思議に感じた人が多いのではないでしょうかね。

    つまり、[更新モード]があるから超・面倒臭いと思いますよね。
    でも、DOS桐の時から存在するので仕方がないですね。

    さて、コマンドボタンの機能名:行挿入 というのは、

     指定されたオブジェクト名の場所にフォーカスを移動して、
     行挿入状態にする。

    ということなんですよね。

    つまり、

    ・メニューバーの[行操作]メニュー→[行挿入]を実行する
     または
    ・ファンクションキーのA|F3(行挿入)を押す

    と同じなんです。

    決して、自動的に1行追加するわけでは無いんです。だって、[Esc] キー等でキャンセルできますからねぇ〜。

    コマンドボタンの機能名を見て「きっと、こうだろう!」と予想するのは構いませんが、本当に予想通りかは試してみないと分かりませんね。

    もちろん、経験済みのコマンドボタンの機能名ならば、既知なのですぐに判断できますが・・・

    ということで、慣れない間は、コマンドボタンのヘルプを確認してください。

    こちら
     ↓
    12.5 コマンドボタンの機能グループ・機能名・機能パラメータ・説明・起動条件など|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-5

    12.6 コマンドボタンでよくある勘違い|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-6

    > 話がそれましたが、記述されている様に基本的にコマンドボタンの機能名で指示した方が便利だと思います(^^)/

    コマンドボタンは便利ですが、決して万能ではありませんね。

    イチにも二にも経験ですから、だんだんとコツを掴んで上手になりますよ。

    p.s.

    > コマンドボタンで 機能名 行追加 をした後に 機能名 表示 をしても
    > 表示モードになりませんでした。
    > これは、仕様 なのか 私のやり方が悪い のか未だ分かっていませんが
    > 更新モード設定があって良かったと思う反面、なにかしっくりきませんでした(T_T)

    ↑これを再現しようと試みましたが出来ませんでした。

    具体的に

    1.コマンドボタンの設定
    2.機能名:手続き実行で実行する一般手続きの内容

    を示していただければ、理由を解明できるかもしれません。



引用返信 [メール受信/OFF] 削除キー/
■1448 / inTopicNo.4)  Re[3]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/17(Mon) 12:06:36)
    ONnojiさん


    > それに初級者向けの内容というのは膨大になるため、「ネバ―エンディング・ストーリー」なる危うさがあります。
    >    ・・・・・・・・・・・・・・・・・・


    本当にそうですよね・・・
    どこまで理解しているか分からないと、どこまで掘り下げてもキリがないですよね(T_T)


    > そして最近、この「熟練した初級者」という技能レベルの人向けならば、(基本的に画像が無しで)文章と図解だけで十分解説出来るだろうと気が付いたのです。
    > それが、「目からウロコの・・・」というシリーズの執筆の発端でした。
    >
    > ということで、文章と図解だけであれば当方の執筆の負担が少ないので、パート3等の続編を掲載しようと考えています。アハハハha


    もしも、アップロードされたら必ず拝見させて頂きますm(__)m


    > 実は、ヘルプに書いてあるんですよ。
    >
    > こちら
    >  ↓
    > [桐 - ヘルプ]→[一括処理・履歴・イベント]→[入門]→[イベント処理]→[定義してみましょう]→[オブジェクト属性の参照]
    >
    > でもね、読まない人が多いんですよ。※私もちゃんと読んだことが有りませんけれどねぇ〜。アハハハ


    確認漏れでした。
    実際にヘルプを見る時は、気になる事がある時 困った時 だと思います。


    今回、実際に困ったのに雛形の存在に気づけなかったと言う事は、
    まだまだだなぁ〜と思ってしまいます。


    > [オブジェクト操作]コマンドには、2つの書式がありますね。
    >
    > a.オブジェクト操作 &variableName1 = @objectName.属性名1, &variableName2 = @objectName.属性名2
    >
    >   オブジェクト操作 @objectName.属性名1 = expression1, @objectName.属性名2 = expression2
    >
    >
    > b.オブジェクト操作 @objectName{ &variableName1 = 属性名1, &variableName2 = 属性名2 }
    >
    >   オブジェクト操作 @objectName{ 属性名1 = expression1, 属性名2 = expression2 }
    >
    > [オブジェクト属性の参照]の雛形は、a形式ですね。
    >
    > b形式は、雛形を更に書き直さなければなりませんので手間が掛かります。
    >
    > しかし、慣れてしまうとそれ程の手間もかかりませんので、最近では私( ONnoji )はb形式の方を使っていますね。
    >
    > どちらでも結果は同じなので、単に好みの問題ですね。


    選択出来る事はよい事ですよね!
    ただ、プログラムの中で、aパターン bパターン が混在すると
    見にくくなると思うので、どちらかで統一してプログラミングする様に
    心がけます(^^♪
    (といっても、混在しそうですが・・・)


    > もしも、私だったら以下のようにしますよ。
    >
    >  オブジェクト名: cmd予定追加
    >  標題     : 予定追加
    >
    >   機能名    機能パラメータリスト
    >  1 表示
    >  2 手続き実行  cmd予定追加Click
    >  3 訂正     "txt日付_入力用"
    >  4 なし
    >
    > 手続き定義開始 cmd予定追加Click()
    >  変数宣言 自動,整数{ &status }
    >
    >  ** cf.桐ヘルプ[行追加]コマンド  編集対象表の最後に新規行を追加します。1回の実行で、1件の行を追加します。
    >  行追加 終了状態 = &status, [日付] = &m日付, [予定] = &m予定
    >
    >  ** &status
    >  ** 戻り値 説明
    >  ** 1    正常に終了した
    >  ** 0    共有違反以外のエラーが発生した
    >  **-2    他の利用者が置換や併合などの処理を実行中(ファイル排他)
    >
    >  &m日付 = #u /* 代入をマルチステートメント風に書くと水平方向に視線が移動するので変数名が探し難くなります */
    >  &m予定 = #u
    >
    > 手続き定義終了


    プログラム例ありがとうございます。


    このプログラムでやってみたのですが、
    3 訂正     "txt日付_入力用"
    になりませんでした。


    試しに、 機能名 訂正 → 機能名 表示 にしてみましたが 表示モードになりません。


    トレース出力で &status を見てみると 1 になっているので 正常に終了をしています。


    > ということで、慣れない間は、コマンドボタンのヘルプを確認してください。
    >
    > こちら
    >  ↓
    > 12.5 コマンドボタンの機能グループ・機能名・機能パラメータ・説明・起動条件など|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    > http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-5
    >
    > 12.6 コマンドボタンでよくある勘違い|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
    > http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-6


    はい!
    読み込んで勉強します!


    >>話がそれましたが、記述されている様に基本的にコマンドボタンの機能名で指示した方が便利だと思います(^^)/
    >
    > コマンドボタンは便利ですが、決して万能ではありませんね。
    >
    > イチにも二にも経験ですから、だんだんとコツを掴んで上手になりますよ。


    こうやって、アドバイスを頂けるので少しづつですが、やりたい事が実現出来始めています。
    ありがとうございます!


    > p.s.
    >
    >>コマンドボタンで 機能名 行追加 をした後に 機能名 表示 をしても
    >>表示モードになりませんでした。
    >>これは、仕様 なのか 私のやり方が悪い のか未だ分かっていませんが
    >>更新モード設定があって良かったと思う反面、なにかしっくりきませんでした(T_T)
    >
    > ↑これを再現しようと試みましたが出来ませんでした。
    >
    > 具体的に
    >
    > 1.コマンドボタンの設定
    > 2.機能名:手続き実行で実行する一般手続きの内容
    >
    > を示していただければ、理由を解明できるかもしれません。


    申し訳ありません。
    手続き定義中 の 行追加と混同して書いてしまいました。

    下記の通り

     機能名    機能パラメータリスト
     1 表示     
     2 行追加
     3 手続き実行  cmd予定追加Click    
     4 表示 


    手続き定義開始 cmd予定追加Click()

     項目値代入 [日付] = &m日付, [予定] = &m予定
     

     &m日付 = #u
     &m予定 = #u

    手続き定義終了


    であれば、ちゃんと表示モードになります。


引用返信 [メール受信/OFF] 削除キー/
■1449 / inTopicNo.5)  Re[4]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/17(Mon) 15:17:11)
    2024/06/17(Mon) 16:12:12 編集(投稿者)

    >> コマンドボタンで 機能名 行追加 をした後に 機能名 表示 をしても
    >> 表示モードになりませんでした。
    >>
    >> これは、仕様 なのか 私のやり方が悪い のか未だ分かっていませんが
    >> 解決した方法が
    >>
    >> メソッド呼び出し @フォーム.更新モード設定( 6 )
    >> メソッド呼び出し @フォーム.更新モード設定( 0 )
    >>
    >> でした。

    > これですね
    >  ↓
    >  オブジェクト名: cmd予定追加
    >  標題     : 予定追加
    >
    >   機能名    機能パラメータリスト
    >  1 表示     確定する
    >  2 手続き実行  cmd予定追加Click
    >  3 訂正     "txt日付_入力用"
    >  4 なし
    >
    > 手続き定義開始 cmd予定追加Click()
    >
    >  メソッド呼び出し @フォーム.更新モード設定( 6 )
    >  項目値代入 [日付] = &m日付, [予定] = &m予定
    >  メソッド呼び出し @フォーム.更新モード設定( 0 )
    >
    >  &m日付 = #u, &m予定 = #u
    >
    > 手続き定義終了

    この件↑ですが、ジェダイの桐さんと当方の双方で認識が違うように思うようになりました。

    そこで、出発点に戻って確認したいのです。

    ■スケジュール表.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     │ └ cmdStartUp
     ├ フォームヘッダ部
     │ ├ lbl日付
     │ ├ a予定                            機能名  機能パラメータリスト
     │ ├ txt日付_入力用     0.フォームが開いた時 cmdStartUp で 4.訂正  "txt日付_入力用"
     │ │ └ lbl日付_入力用 ←─ 1.最初に入力
     │ ├ txt予定_入力用
     │ │ └ lbl予定_入力用 ←─ 2.次に入力
     │ ├ cmd予定追加    ←─ 3.コマンドボタンを実行
     │ ├ cmd当日
     │ ├ cmd週間
     │ ├ cmd絞込_式
     │ ├ cmd絞込_値
     │ ├ cmd前週
     │ ├ cmd次週
     │ ├ cmd今月
     │ ├ cmd前月
     │ └ cmd次月
     └ フォーム明細部
       ├ 行セレクタ
       ├ txt日付
       └ txt予定


    上の図解のように0.1.2.3.の順で実行するわけですよね。

    そこで、確認したいのは、このシーケンス(手順)を実行した後に、

    フォーカスがあるオブジェクトをどのオブジェクトにしたいのでしょうか?

    もしも、そのオブジェクトがテキストボックスであれば、その時にキャレット(入力カーソル)が表示されている必要があるのでしょうか??


    p.s.

    最初に、

     項目値代入 [日付] = &m日付, [予定] = &m予定

    ↑を見付けた時に変なことするなぁ〜と思ったんですよ。

    なぜならば、[項目値代入]コマンドは、

      △項目値の入力中のみ実行可能(項目訂正、行訂正、行挿入、行追加)。

      ・入力中の項目値を設定または変更します。フォーム上に表示していない項目の値や、
       オブジェクトの属性で編集禁止にしている項目の値も、このコマンドで指定することができます。
      ・このコマンドは、フォームのイベントハンドラ内に記述します。一括処理から実行することはできません。
      ・つぎの会話処理を行なっているあいだに実行する、イベントハンドラに記述できます。
        項目訂正(表の項目訂正)
        行訂正
        行挿入
        行追加
      ・項目値を編集するオブジェクトがひとつもないとき、またはフォームが表示状態のときは、実行することができません。

    [桐 - ヘルプ]にある、"このコマンドは、フォームのイベントハンドラ内に記述します。" ← という所がどうも心に引っかかったのです。

    だから、(あくまでも私の場合にですが)あまり使うことがないコマンドなんですよ。

    >  メソッド呼び出し @フォーム.更新モード設定( 6 )
    >  項目値代入 [日付] = &m日付, [予定] = &m予定

    でも、↑このように挿入モード遷移した状態ならば、アリなんだろうと思った次第です。


引用返信 [メール受信/OFF] 削除キー/
■1450 / inTopicNo.6)  Re[5]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/17(Mon) 16:22:13)
    2024/06/18(Tue) 10:27:38 編集(投稿者)

    ONnojiさん


    こんにちは!


    > ■スケジュール表.wfx
    >
    >  フォーム
    >  ├ ファミリ
    >  ├ ワークスペース
    >  │ └ cmdStartUp
    >  ├ フォームヘッダ部
    >  │ ├ lbl日付
    >  │ ├ a予定                            機能名  機能パラメータリスト
    >  │ ├ txt日付_入力用     0.フォームが開いた時 cmdStartUp で 4.訂正  "txt日付_入力用"
    >  │ │ └ lbl日付_入力用 ←─ 1.最初に入力
    >  │ ├ txt予定_入力用
    >  │ │ └ lbl予定_入力用 ←─ 2.次に入力
    >  │ ├ cmd予定追加    ←─ 3.コマンドボタンを実行
    >  │ ├ cmd当日
    >  │ ├ cmd週間
    >  │ ├ cmd絞込_式
    >  │ ├ cmd絞込_値
    >  │ ├ cmd前週
    >  │ ├ cmd次週
    >  │ ├ cmd今月
    >  │ ├ cmd前月
    >  │ └ cmd次月
    >  └ フォーム明細部
    >    ├ 行セレクタ
    >    ├ txt日付
    >    └ txt予定
    >
    >
    > 上の図解のように0.1.2.3.の順で実行するわけですよね。
    >
    > そこで、確認したいのは、このシーケンス(手順)を実行した後に、
    >
    > フォーカスがあるオブジェクトをどのオブジェクトにしたいのでしょうか?
    >
    > もしも、そのオブジェクトがテキストボックスであれば、その時にキャレット(入力カーソル)が表示されている必要があるのでしょうか??


    0. 1. 2. 3. の後 1. ( txt日付_入力用 ) にフォーカスされ キャレットが表示されている事が狙いでした。


    基本的に txt日付 と txt予定に直接入力はせずに
    txt日付_入力用 と  txt予定_入力用 で入力した物を 
    txt日付 と txt予定 に行追加する狙いです。


    なので、フォームを開いた時 txt日付_入力用 が訂正モードになっているし
    cmd予定追加 をクリックした後は txt日付_入力用 にフォーカスが移動していて 且つ 訂正モード になっていて欲しいです。


    0. 1. 2. 3. → 1. 2. 3. → 1. 2. 3. ・・・
    が狙いでした。


    添付したファイルですと、 0. 1. 2. 3. までは狙い通りなのですが、
    その後、表示モードにならず エンターを押すと行追加が繰り返し行われます。


引用返信 [メール受信/OFF] 削除キー/
■1451 / inTopicNo.7)  Re[6]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/17(Mon) 17:33:36)
    2024/06/17(Mon) 22:34:41 編集(投稿者)

    > 0. 1. 2. 3. → 1. 2. 3. → 1. 2. 3. ・・・
    > が狙いでした。

    なるほど、スケジュール表2.wfx の場合には、

    現行では次のようにすると、一見解決したようになります。
                 ・・・・・・・・・

    1.cmd予定追加 (コマンドボタン)の[フォーカスの設定]属性を

     × 許可   ※許可では、コマンドボタンの機能を実行した後で、フォーカスがボタンに戻ってしまいます

     〇 自動

    に変更します。

    2.一般手続き:cmd予定追加Click() を次のように変更します・

    手続き定義開始 cmd予定追加Click()
     変数宣言 自動, 整数 { &status }

     行追加 終了状態 = &status, [日付] = &m日付, [予定] = &m予定

     ジャンプ 行番号 = 最終 /* これを挿入 */

     &m日付 = #u
     &m予定 = #u

    手続き定義終了


    でもね、根本的な問題があるんですよ。

    現行では

    次の↓[開始時実行]コマンドボタンで

     オブジェクト名: cmdStartUp
     標題     : StartUp

      機能名      機能パラメータリスト
     1 表示
     2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
     3 並べ替え_昇順   [日付]
     4 訂正        "txt日付_入力用"


    絞り込みをしていますね。

    そして、レコードが絞り込まれた結果が0行ではありませんね。
        ・・・・・・・・・・・・・・・・・・・・・・・

    だから気が付かなかったのですが、

    実は、

    ・編集対象表が0行の時 ※これは先頭行ですが、終端行でもあります。

    ・編集対象表の現在行が終端行の時

    レコードが無いのですから、どう逆立ちしても[訂正]モードには遷移できないのです。

    ここが、編集対象表が無いNULLフォームと編集対象表が有るフォームとの大きな違いです。ガ〜〜〜ン

    ということで、編集対象表が0行の時の対策をしなければなりませんが・・・

    しかし、私にはお世辞にもスマートなアプローチに思えませんので、具体策の提示は差し控えます。
        ・・・・・・・・・・・・・・・・・・・・・・・・

    だって、0行の時だけの対策って変でしょう。これは個人のセンスの問題ですけれどね・・・アハハハ

    私は、無理やり出来るようにするよりも、余計な手を掛けずに済ます方を選びたいですね。

    ということで、

    編集対象表が有る普通のフォームの場合には、

    フォームヘッダ部に検索する値を入力するテキストボックスは良いと思いますが ※レコードが無ければ[検索]も[絞り込み]も意味が無いです

    今回のような入力用のテキストボックスは向いていません。

    何故ならば、繰り返しになりますが、編集対象表が0行の時があるからです。

    p.s.

    コマンドボタンの[フォーカスの設定]属性は、編集対象表が有るフォームでは "自動" のまま使うのが普通ですよ。

    変更する場合は、どうしても都合が悪い時だけにしますね。

    p.p.s.

    拙作のオートフォームのヘッダ部に[固定 ▼][項目 ▼]と表示しているテキストボックスがあります。

    これは(見た目はボタンですが)テキストボックスですので、

    入力支援ボタンのドロップダウンリストを出すために訂正モードにしたいのですが、終端行ではこれが出来ません。

    そこで仕方なく、

     &msg = "この機能は表示モードの場合、終端行では実行できません"

    というメッセージボックスを表示しています。

    もちろん、行挿入モードに遷移すれば出来るんですよ。

    でも「出来れば何でもOKという無節操な態度」は、私のポリシーではないのです。

    行を登録するつもりがないのに[表示]モードから[行挿入]モードに遷移するのが意地でも嫌なんですね。アハハハha
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これは私( ONnoi )個人のセンスですよ。アハハハha

414×316 => 250×190

1718614704.jpg
/36KB
引用返信 [メール受信/OFF] 削除キー/
■1452 / inTopicNo.8)  Re[7]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/18(Tue) 10:27:22)
    ONnojiさん


    おはようございます!


    > 2.一般手続き:cmd予定追加Click() を次のように変更します・
    >
    > 手続き定義開始 cmd予定追加Click()
    >  変数宣言 自動, 整数 { &status }
    >
    >  行追加 終了状態 = &status, [日付] = &m日付, [予定] = &m予定
    >
    >  ジャンプ 行番号 = 最終 /* これを挿入 */
    >
    >  &m日付 = #u
    >  &m予定 = #u
    >
    > 手続き定義終了


    ジャンプ 行番号 = 最終 を入れる事で解決しました。
    メソッド呼び出しで更新モードを使用するより 分かりやすいです。


    > でもね、根本的な問題があるんですよ。
    >
    > 現行では
    >
    > 次の↓[開始時実行]コマンドボタンで
    >
    >  オブジェクト名: cmdStartUp
    >  標題     : StartUp
    >
    >   機能名      機能パラメータリスト
    >  1 表示
    >  2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
    >  3 並べ替え_昇順   [日付]
    >  4 訂正        "txt日付_入力用"
    >
    >
    > 絞り込みをしていますね。
    >
    > そして、レコードが絞り込まれた結果が0行ではありませんね。
    >     ・・・・・・・・・・・・・・・・・・・・・・・
    >
    > だから気が付かなかったのですが、
    >
    > 実は、
    >
    > ・編集対象表が0行の時 ※これは先頭行ですが、終端行でもあります。
    >
    > ・編集対象表の現在行が終端行の時
    >
    > レコードが無いのですから、どう逆立ちしても[訂正]モードには遷移できないのです。


    この事は知らないと分からなかったです。
    というよりか、そもそもの出発点として


    > 編集対象表が有る普通のフォームの場合には、
    >
    > フォームヘッダ部に検索する値を入力するテキストボックスは良いと思いますが ※レコードが無ければ[検索]も[絞り込み]も意味が無いです
    >
    > 今回のような入力用のテキストボックスは向いていません。


    入力用テキストボックスが ヘッダ部にある事で複雑になってしまったのですね(T_T)


    NULLフォーム で スケジュール表.TBX に行追加する方法が 入力方法としては向いているのですね(^^♪ 


    勉強になりました!


    何故、ヘッダ部に入力用テキストボックスを置いたかと言うと、直感的に分かりやすいかな?と思ったからなんです。


    > p.s.
    >
    > コマンドボタンの[フォーカスの設定]属性は、編集対象表が有るフォームでは "自動" のまま使うのが普通ですよ。
    >
    > 変更する場合は、どうしても都合が悪い時だけにしますね。


    そうだったんですね!
    教えて頂きありがとうございますm(__)m


    > p.p.s.
    >
    > 拙作のオートフォームのヘッダ部に[固定 ▼][項目 ▼]と表示しているテキストボックスがあります。
    >
    > これは(見た目はボタンですが)テキストボックスですので、
    >
    > 入力支援ボタンのドロップダウンリストを出すために訂正モードにしたいのですが、終端行ではこれが出来ません。
    >
    > そこで仕方なく、
    >
    >  &msg = "この機能は表示モードの場合、終端行では実行できません"
    >
    > というメッセージボックスを表示しています。
    >
    > もちろん、行挿入モードに遷移すれば出来るんですよ。
    >
    > でも「出来れば何でもOKという無節操な態度」は、私のポリシーではないのです。
    >
    > 行を登録するつもりがないのに[表示]モードから[行挿入]モードに遷移するのが意地でも嫌なんですね。アハハハha
    > ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > これは私( ONnoi )個人のセンスですよ。アハハハha


    確かに 出来れば何でもOK という考え方は実際あると思うのです。
    しかし、出来るからといって 無秩序にやってしまうと 整合性が取れなくなり
    結果として管理(保全)が出来なくなると思うんです。


    私が フォーム+イベント をやってみようと本格的に思った事があります。


    桐質問掲示板 ■14187 行制約について で質問した時
    ONnojiさんに 行制約で出来るか出来ないかと言えば 近しい事は出来たとしても 表をそのまま使って、[行制約]で入力許可/入力禁止をというアプローチは無理筋 だけど フォーム+イベント であれば実現可能 と教えて貰いました。


    更にサンプルまで作成して頂き、思った通りの事が実現出来ました。


    あの時、むりやり 行制約 でやりたい事を実現してしまうと 無秩序となり
    管理が難しくなっていたと思います。


    なので、今私が心がけていることは、

    1、単純な方法で進めたい
    2、桐の機能としても、使用する人に対しても不自然でない素直な方法

    で フォーム作りをしています。


    なので、 機能名 訂正 があるのに、メソッド呼び出し 更新モード設定
    を使用する事が いまいちシックリこなかった(と言うよりは、不自然に感じた)のです。


    今回教えて頂いた方法は、表面上の救済処置なのでしょうが、更新モードを使用するよりシックリきます。


    (これこそ、初級者の私が感じるセンスだけの問題かもしれませんけれど(◎_◎;))


    目からウロコのデータベース桐プログラミング入門 パート2 のフィードバックを書き込んでいたのに、色々教えて頂きありがとうございましたm(__)m


    ONnojiさんが立てられたスレッドなので、私が 解決済み! を押すのは何だか変なので押しませんが、個人的に 解決済み! です!
引用返信 [メール受信/OFF] 削除キー/
■1453 / inTopicNo.9)  Re[8]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/18(Tue) 11:00:29)
    2024/06/18(Tue) 11:03:38 編集(投稿者)

    >>編集対象表が有る普通のフォームの場合には、
    >>フォームヘッダ部に検索する値を入力するテキストボックスは良いと思いますが ※レコードが無ければ[検索]も[絞り込み]も意味が無いです
    >>今回のような入力用のテキストボックスは向いていません。
    >
    > 入力用テキストボックスが ヘッダ部にある事で複雑になってしまったのですね(T_T)
    > NULLフォーム で スケジュール表.TBX に行追加する方法が 入力方法としては向いているのですね(^^♪ 

    別の方法を考えましたので、現在試しています。

    出来上がったらサンプルをアップしますので、しばらくお待ちください。



    > 何故、ヘッダ部に入力用テキストボックスを置いたかと言うと、直感的に分かりやすいかな?と思ったからなんです。

    編集対象表があるフォームの場合には、コマンドボタンまたはメニュー・ファンクションキーの直接操作で行を挿入・追加するのが面倒がなくて良いです。

    これは、フォームといえども編集対象表が有るフォームは、表の編集と大差ないからです。

    NULLフォームの場合には、編集対象表が無いですから、フォームで変数を編集するのは簡単ですね。

    ちなみに、DOS桐のフォームでは変数は編集できなかったんですよ。項目しか編集できなかったのです。



    > 何故、ヘッダ部に入力用テキストボックスを置いたかと言うと、直感的に分かりやすいかな?と思ったからなんです。

    これっ↑て、エクセルのユーザインタフェースから思い付きましたか???



    > 確かに 出来れば何でもOK という考え方は実際あると思うのです。
    > しかし、出来るからといって 無秩序にやってしまうと 整合性が取れなくなり
    > 結果として管理(保全)が出来なくなると思うんです。

    その通りですね。ただ我武者羅にやるのはスマートではありません。

    その時には気分が良くても、後で大変な目に合うかもしれませんからね。アハハハha

    > あの時、むりやり 行制約 でやりたい事を実現してしまうと 無秩序となり
    > 管理が難しくなっていたと思います。
    > なので、今私が心がけていることは、
    > 1、単純な方法で進めたい
    > 2、桐の機能としても、使用する人に対しても不自然でない素直な方法
    > で フォーム作りをしています。
    > なので、 機能名 訂正 があるのに、メソッド呼び出し 更新モード設定
    > を使用する事が いまいちシックリこなかった(と言うよりは、不自然に感じた)のです。
    > 今回教えて頂いた方法は、表面上の救済処置なのでしょうが、更新モードを使用するよりシックリきます。

    センスが良いと思いますよ。大切にしてください。


引用返信 [メール受信/OFF] 削除キー/
■1454 / inTopicNo.10)  Re[9]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/18(Tue) 12:03:06)
    ONnojiさん


    > 別の方法を考えましたので、現在試しています。
    >
    > 出来上がったらサンプルをアップしますので、しばらくお待ちください。


    ありがとうございます。


    > 編集対象表があるフォームの場合には、コマンドボタンまたはメニュー・ファンクションキーの直接操作で行を挿入・追加するのが面倒がなくて良いです。
    >
    > これは、フォームといえども編集対象表が有るフォームは、表の編集と大差ないからです。


    言われてみれば確かにそうですね・・・
    直接入力の方が、分かりやすいし、今回のフォームに対しては一番素直だと思いました。


    >>何故、ヘッダ部に入力用テキストボックスを置いたかと言うと、直感的に分かりやすいかな?と思ったからなんです。
    >
    > これっ↑て、エクセルのユーザインタフェースから思い付きましたか???


    いえ。単純にそう思ってしまったのです。
    しかも、自分自身で単純で素直が良いと言っておきながら、
    イベント過多症候群の様な状態になっていました・・・


    入力テキストがあった方が良いだろうと、思い込んで もしくは 決めつけてしまいました。
    (今にしてみれば、少しフォームが使える様になったから機能を詰め込もうと無意識に思っていたのだと思います(T_T))


引用返信 [メール受信/OFF] 削除キー/
■1455 / inTopicNo.11)  Re[10]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/18(Tue) 15:54:57)
    2024/06/18(Tue) 15:58:28 編集(投稿者)

    [トレース出力]ウィンドウを観察していると・・・

    フォームが開いた時、

     "D:\kiri10s\1718608933\スケジュール管理2.kex"を一括処理実行で開きました
     エラー :KD1618:比較できないデータ型の組合わせがあります ...値) <= #日時日付([日付]) <=←(D:\kiri10s\1718608933\スケジュール表.TBX )

    こいうエラーが表示されます。

    これは[開始時実行]コマンドボタンを実行した際に表示されていました。

     オブジェクト名: cmdStartUp
     標題     : StartUp

      機能名      機能パラメータリスト
     1 表示
     2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
     3 並べ替え_昇順   [日付]
     4 訂正        "txt日付_入力用"

    これを実行した時に

     2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )

    ↑の部分を実行する時に表示されています。

    しかし、絞り込みはちゃんとできています。

    試しに、ヘッダの[cmd絞込_式]ボタンを実行して比較式ダイアログに

     #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )

    を張り付けて実行すると、[トレース出力]ウィンドウにエラーは表示されません。

    さらに調べると

    OK #日時日付(#日時値) <= #日時日付([日付])

    OK #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )

    NG #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )

    という具合に、expression1 <= val <= expression2

    の時だけエラーを表示していることが分かりました。

    しかし、実行結果は正しいのです。アハハハha

    ということで、

    <改良案1>

     オブジェクト名: cmdStartUp
     標題     : StartUp

      機能名      機能パラメータリスト
     1 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付])         ← 一段め絞り込み
     2 絞り込み_比較式  #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) ) ← 二段め絞り込み
     3 並べ替え_昇順   [日付]
     4 訂正       "txt日付_入力用"

    ※↑本当は 解除 * が必要なのですが・・・


    <改良案2>

     オブジェクト名: cmdStartUp
     標題     : cmdStartUp:開始時実行コマンド:(cmd週間とほぼ同じ設定)

      機能名     機能パラメータリスト
     1 表示
     2 解除      *
     3 手続き実行   cmd週間Click
     4 訂正      "txt日付_入力用"

     手続き定義開始 cmd週間Click()

      ** 解除 *
      並べ替え {[日付] 昇順 }
      絞り込み [日付] { #日時日付(#日時値) <= #日時日付([]) <= #日時日付( #日数加算(#日時値, 7 ) ) }

     手続き定義終了

     ※一般手続き:cmd週間Click()側 に [解除 *]コマンドがあった方が良いのでは????
      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    のように変更することをお勧めします。

    <改良案2>の方がおススメですね。(^^ok

    繰り返しになりますが、エラーが表示されていますが、正しく実行されているようです。

    ですが、今後エラーに気が付いて後戻りして調べるよりは、エラーが表示されないように処置しておくのがベターだと思います。

    取り急ぎお知らせまで。

    p.s.

    サンプルは無事に進捗していますが、エラーを調べていましたので時間を取られてまだ完成していません。

    こうご期待。(^^ゞ


引用返信 [メール受信/OFF] 削除キー/
■1456 / inTopicNo.12)  Re[11]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/18(Tue) 16:48:15)
    2024/06/18(Tue) 16:49:10 編集(投稿者)

    こんな実験をしてみました。

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

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

     条件 ( &trace ) トレース出力 _#日時値, "  ", _[日付], "  ", _#日数加算(#日時値, 7 )
     条件 ( &trace ) トレース出力 _#日時日付(#日時値), "  ", _#日時日付([日付]), "  ", #日時日付( #日数加算(#日時値, 7 ) )
     条件 ( &trace ) トレース出力 _( #日時日付(#日時値) <= #日時日付([日付]) )
     条件 ( &trace ) トレース出力 _( #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) ) )
     条件 ( &trace ) トレース出力 _( #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日時値 ) )
     条件 ( &trace ) トレース出力 _( #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) ) )

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

    ■トレース出力
        :cmdTestClick( )を実行開始しました
        :#日時値 : 2024年 6月18日 16時33分21.02秒  [日付] : 2024年 6月25日 0時 0分 0秒  #日数加算(#日時値, 7 ) : 2024年 6月25日 16時33分21.02秒
        :#日時日付(#日時値) : 2024年 6月18日 0時 0分 0秒  #日時日付([日付]) : 2024年 6月25日 0時 0分 0秒  2024年 6月25日 0時 0分 0秒
        :( #日時日付(#日時値) <= #日時日付([日付]) ) : 1
        :( #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) ) ) : 1
    エラー :KU1094:データの型が一致していません(D:\kiri10s\1718608933\スケジュール管理2\スケジュール表_main.kex 77行目)

    エラーになったのは、次のコマンドです

     条件 ( &trace ) トレース出力 _( #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日時値 ) )

    たぶんですが、


     #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付([日付])
     ・・・・・・・・・・・・・・・・・・・
             ↑
     この部分の評価は整数の1(イチ:真)です

    次に右辺を比較すると

     1 <= #日時日付([日付])

    1(イチ)と日時型の式( #日時日付([日付])を比較したので、:KU1094:データの型が一致していません となった!。

    もちろん当方の推測ですけれど、だいたいそんなところでしょうね。


引用返信 [メール受信/OFF] 削除キー/
■1457 / inTopicNo.13)  Re[12]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/18(Tue) 17:05:22)
    2024/06/18(Tue) 23:55:23 編集(投稿者)

    [桐 - ヘルプ]→[データと式]→[比較式]→[日時の検索]→[範囲で検索する]を参照すると

     日時の範囲が「2014年10月1日」〜「2015年4月20日」のレコードを検索します。
      d"2014/10/1"<=[]<d"2015/4/21"
      または
      >=d"2014/10/1",<d"2015/4/21"

    とあります。

    そこで、

    【変更前】expression1 <= val <= expression2

     オブジェクト名: cmdStartUp
     標題     : StartUp

      機能名      機能パラメータリスト
     1 表示
     2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
     3 並べ替え_昇順   [日付]
     4 訂正        "txt日付_入力用"


    【変更後】expression1 <= val, val <= expression2

     オブジェクト名: cmdStartUp
     標題     : StartUp

      機能名      機能パラメータリスト
     1 解除       *
     2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]), #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
     3 並べ替え_昇順   [日付]
     4 訂正       "txt日付_入力用"

    とすると、エラーしなくなりました。

    もちろん、これはコマンドボタンの機能パラメータのエラー対策ということですよ。

    コマンドボタンの機能パラメータで使用する場合にだけ注意してください。





引用返信 [メール受信/OFF] 削除キー/
■1458 / inTopicNo.14)  Re[13]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/19(Wed) 10:53:31)
    ONnojiさん


    >  日時の範囲が「2014年10月1日」〜「2015年4月20日」のレコードを検索します。
    >   d"2014/10/1"<=[]<d"2015/4/21"
    >   または
    >   >=d"2014/10/1",<d"2015/4/21"
    >
    > とあります。

    > 【変更前】expression1 <= val <= expression2

    >  2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )
    >
    > 【変更後】expression1 <= val, val <= expression2

    >  2 絞り込み_比較式  #日時日付(#日時値) <= #日時日付([日付]), #日時日付([日付]) <= #日時日付( #日数加算(#日時値, 7 ) )


    > とすると、エラーしなくなりました。


    添削ありがとうございますm(__)m
    エラーが無くなりました。

    どうやったらエラーが無くなるか、実は試行錯誤していました。
    とは言え、求めたい結果が出ている、比較式で絞り込んでも 求めたい答えが出る・・・

    と苦慮していました。


    > #日時日付(#日時値) <= #日時日付([日付]) <= #日時日付([日付])
    > ・・・・・・・・・・・・・・・・・・・
             ↑
    > この部分の評価は整数の1(イチ:真)です

    >次に右辺を比較すると

    > 1 <= #日時日付([日付])

    >1(イチ)と日時型の式( #日時日付([日付])を比較したので、:KU1094:データの型が一致していません となった!。

    >もちろん当方の推測ですけれど、だいたいそんなところでしょうね。

    の解説と


    expression1 <= val, val <= expression2
    >=d"2014/10/1",<d"2015/4/21"

    の対応策 解説があることで、意味が理解出来ました。


    ■14350 期間絞込でのエラー時対応について の中の
    ■14369 モジュール化はフォームのレベルでも必要 の時の様に
    分かってしまえばあっけないのですが、理解するまでが時間がかかります。


    ある程度自分で考えて色々やった上で解説があると、理解度が増します。


    ありがとうございました!


    客観的に考えると、<改良案2> の方が素直に感じました。
    まだまだ私は考え方が甘いです(T_T)


    p.s.

    サンプル開発に時間を割いて頂き、ありがとうございますm(__)m


引用返信 [メール受信/OFF] 削除キー/
■1459 / inTopicNo.15)  Re[14]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/19(Wed) 11:28:49)
    2024/06/19(Wed) 11:35:21 編集(投稿者)

    > 添削ありがとうございますm(__)m
    > エラーが無くなりました。
    > どうやったらエラーが無くなるか、実は試行錯誤していました。
    > とは言え、求めたい結果が出ている、比較式で絞り込んでも 求めたい答えが出る・・・
    > と苦慮していました。

    そうですか、お気づきでしたか?

    > の対応策 解説があることで、意味が理解出来ました。

    これは個人の好みの問題ですが・・・、

    私( ONnoji )は、expression1 <= val <= expression2 という比較式は一切使わないのです。

    もちろん、あくまでも個人の好みですから気にしないでください。(^^ゞ

    > ■14350 期間絞込でのエラー時対応について の中の
    > ■14369 モジュール化はフォームのレベルでも必要 の時の様に
    > 分かってしまえばあっけないのですが、理解するまでが時間がかかります。

    コマンドボタンの機能パラメータリストの時だけの問題ですね。

    忘却していますが、ずいぶん昔に同じ話題を掲示板で調べたような記憶があります。

    > ある程度自分で考えて色々やった上で解説があると、理解度が増します。
    > 客観的に考えると、<改良案2> の方が素直に感じました。
    > まだまだ私は考え方が甘いです(T_T)

    桐の「フォーム+イベント処理」のプログラミングを始めたばかりなのですからねぇ〜。

    そう簡単に上級者になれるハズがありませんよ。

    焦りは禁物です。

    コツコツ努力すれば必ず報われますよ。

    p.s.

    さて、サンプルはほぼ出来上がりました。

    しかし、内容が初級者レベルではありませんので、解説を用意します。

    なお先に申し上げておきますが、今回のサンプルは私( ONnoji )の好奇心で作ったものです。

    従って、こうすると良いよという提案ではありません。

    「こんなことも出来るんだけどね・・・でもそこまでする必要ないでしょ」という代物ですよ。

    どちらかというと、[トレース出力]コマンドを使ったデバッグの実習という感じでご覧ください。

    サンプルは午後にアップする予定です。


引用返信 [メール受信/OFF] 削除キー/
■1460 / inTopicNo.16)  Re[1]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/19(Wed) 15:42:50)
    2024/06/19(Wed) 16:31:13 編集(投稿者)

    試してみれば分かりますが・・・

    編集対象表があるフォームは、表(.tbx)をフォーム(.wfx)でラップ(包む)したものですから、

    変数をソースにしたテキストボックスにキャレット(入力カーソル)を出現させると、

    表示モードから訂正モードや行挿入モードに遷移してしまいます。

    なので、NULLフォームとは勝手が違い戸惑いますよね。

    ということで、私( ONnoji )の場合ですが、

    編集対象表があるフォームのヘッダ部フッタ部に変数をソースにした編集可能なテキストボックスを基本的に作らないようにしています。
                          ・・・・・・・・・・・・・・・・・・・・・・

    それならばどうするのか?

    1.ポップアップ形式のダイアログボックスとしてのNULLフォームにデータを入力する


     ┌───────────────┐   ポップアップ
     │編集対象があるフォーム    │  ┌───────────────┐
     │               │  │NULLフォーム         │
     │               ├←─┤               │
     │               │  │ダイアログボックス      │
     │               │  └───────────────┘
     │               │
     │               │
     │               │
     │               │
     └───────────────┘
     ※大量にデータを入力する使い方には向いていません

    2.下側にデータエントリー用(NULLフォーム)のフォームを、上側に編集対象があるフォームをピッタリと上下に並べてにダイアログボックス側にデータを入力する

     ┌───────────────┐
     │編集対象があるフォーム    │
     │               │
     │               │
     │               │
     │               │
     │               │
     │               │
     │               │
     └──────┬────────┘
          [行追加]コマンド
     ┌──────┴────────┐
     │NULLフォーム         │
     │               │
     │データエントリー用      │
     └───────────────┘
     ※上下でセットになっていますので、大量にデータを入力する使い方には向いています。

    が考えられます。

    私( ONnoji )は2.の方法のアプリケーションを数多く作っています。

    データエントリー用のフォームは汎用で1つだけ用意して、編集対象があるフォームを指定できる仕様にしてあります。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    そしてこの度、3番めのアプローチに気が付いたのです。(^^ゞ

    それはメイン&サブフォームという形式です。、

     ┌───────────────┐
     │メインフォーム        │
     │               │
     │┌────────────┐ │
     ││サブフォーム      │ │
     ││            │ │
     ││  NULLフォーム    │ │
     │└────────────┘ │
     │               │
     │               │
     │編集対象があるフォーム    │
     │               │
     │               │
     │               │
     │               │
     │               │
     └───────────────┘

    サンプルは出来上がりました。

    しかし、内容が初級者レベルではありませんので、↑このような解説を用意しました。

    なお先に申し上げておきますが、今回のサンプルは私( ONnoji )の好奇心で作ったものです。

    従って、こうすると良いよという提案ではありません。

    「こんなことも出来るんだけどね・・・でもそこまでする必要ないでしょ」という代物ですよ。

    どちらかというと、[トレース出力]コマンドを使ったデバッグの実習という感じでご覧ください。

引用返信 [メール受信/OFF] 削除キー/
■1461 / inTopicNo.17)  Re[2]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/19(Wed) 16:04:52)
    2024/06/19(Wed) 16:35:24 編集(投稿者)

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

    スケジュール表_main.kex
    スケジュール表_main.wfx
    スケジュール表_subform_accept.kex
    スケジュール表_subform_accept.wfx

    ※スケジュール表.TBX は含まれていません

    (ご注意)

    サブフォームからメインフォームへフォーカスを移動した場合には、
    サブフォームが表示モードになりますが、これは桐の仕様ですのでご了承ください。

    サブフォーム側をだけを操作している時には、訂正モードを維持します。
    ※実際には一時的に表示モードになりますけどね気が付かないと思います。(^^ゞ

    トレース出力を停止したい場合には、

     &trace = 1

    を次のように

     *&trace = 1

    コメントアウトしてください。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    以下は[トレース出力]コマンドの結果です。

    このような出力を得るには、[トレース出力]ウィンドウで、右クリックで[すべて選択]→[コピー]でクリップボードに保存してから、

    拙作の整形ユーティリティの[トレース整形]を実行して、[メモ帳を開く]ボタンを実行して、貼り付けてメモ帳を保存終了してください。

    自動的に整形が行われますよ。


    ┌when :main -> cmdStartupClick( )を実行開始しました

    │ :この手続きは[開始時実行コマンド]ボタンから呼び出されました

    │┌when :main -> cmd週間Click( )を実行開始しました
    │└end

    │┌when :main -> prcサブフォームへフォーカスを移動( )を実行開始しました
    ││
    ││ :subform -> txt日付_入力用 のフォーカス設定()メソッドを実行します
    ││ :メソッドの実行結果
    ││ :&return : 1  メソッド呼び出し 戻り値 = &return, @subformAccept.@txt日付_入力用.フォーカス設定()
    ││ :
    ││ :subform -> cmd訂正 の実行()メソッドを実行します
    ││ :メソッドの実行結果
    ││ :&return : 0  メソッド呼び出し 戻り値 = &return, @subformAccept.@cmd訂正.実行()
    ││ :&mCommanButtonDone : 1  &mCommanButtonDone が 1 になればOK 何故かサブフォームでは &return が ゼロで返ってくる事がある
    ││
    │└end

    └end

    ┌when :subform -> cmd予定追加Click( )を実行開始しました

    │ :main -> フォーム に cmd行追加 が存在するか否かを調べるためにオブジェクト検査()メソッドを実行します
    │ :メソッドの実行結果
    │ :&isObject : 1  &objectName : cmd行追加 メソッド呼び出し ハンドル = &hwindow, 戻り値 = &return, @フォーム.オブジェクト検査( &objectName, &isObject )
    │ :
    │ :入力エラーを判定します &error日付 = ( &m日付 = #u ) &error予定 = ( #trim( &m予定, 4 ) = #u ) &logical  = .not ( &error日付 .or &error予定 )
    │ :&error日付 : 0  &error予定 : 0  &logical : 1
    │ :
    │ :main -> cmd行追加 の実行()メソッドを実行します

    │┌when :main -> cmd行追加Click( )を実行開始しました
    ││
    ││ :&m日付 : 2024年 6月23日 0時 0分 0秒  &m予定 : てすとです
    ││ :&status : 1  行追加  終了状態 = &status, [日付] = &m日付, [予定] = &m予定
    ││ :
    ││ :ここで prcサブフォームへフォーカスを移動( ) を実行するとサブフォームのフォーカスの移動が上手くいかない事がある
    ││ :回避策として、時限タイマーの[タイマー1]イベントをインターバル 20/100秒で予約して、プログラムの流れを中断する
    ││ :オブジェクト操作 @フォーム{ タイマー1 = 1, タイマー値1 = 20 }
    ││
    │└end

    │ :メソッドの実行結果
    │ :&return : 1  &objectName : cmd行追加 メソッド呼び出し ハンドル = &hwindow, 戻り値 = &return, &objectName.実行()

    └end

    ┌when :main -> フォーム::タイマー1( )を実行開始しました

    │ :時限タイマーの[タイマー1]イベントを停止
    │ :オブジェクト操作 @フォーム{ タイマー1 = 0 } /* 時限タイマーの[タイマー1]イベントを停止 */
    │ :
    │ :cmd行追加Click( )で中断したプログラムの流れをここから再開する
    │ : ↓
    │ :手続き実行 prcサブフォームへフォーカスを移動( )

    │┌when :main -> prcサブフォームへフォーカスを移動( )を実行開始しました
    ││
    ││ :subform -> txt日付_入力用 のフォーカス設定()メソッドを実行します
    ││ :メソッドの実行結果
    ││ :&return : 1  メソッド呼び出し 戻り値 = &return, @subformAccept.@txt日付_入力用.フォーカス設定()
    ││ :
    ││ :subform -> cmd訂正 の実行()メソッドを実行します
    ││ :メソッドの実行結果
    ││ :&return : 0  メソッド呼び出し 戻り値 = &return, @subformAccept.@cmd訂正.実行()
    ││ :&mCommanButtonDone : 1  &mCommanButtonDone が 1 になればOK 何故かサブフォームでは &return が ゼロで返ってくる事がある
    ││
    │└end

    └end

    p.s.

    > なお先に申し上げておきますが、今回のサンプルは私( ONnoji )の好奇心で作ったものです。
    > 従って、こうすると良いよという提案ではありません。
    > 「こんなことも出来るんだけどね・・・でもそこまでする必要ないでしょ」という代物ですよ。

    これは個人の感想です。(^^ゞ

    メイン&サブフォームを好んで使う人もいますが、私はメイン&サブフォームはもうコリゴリなので避けています。

    しかし、今回は面白いテーマだったので試してみました。(^^ゞ

    なぜもうコリゴリなのかと言うと・・・

    ・メインの局所変数がサブで上書きされる事 ※メインとサブの局所変数のスコープは共通ですから当然ですけど(^^ゞ

    ・デバッグが非常にし難い事

    ・拙作:フレームワークがサブフォームに適用できない事 ※初期はサブフォームにも対応していましたが、デバッグと変数のスワップが大変なので止めました。

    ですね。


引用返信 [メール受信/OFF] 削除キー/
■1462 / inTopicNo.18)  Re[2]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ジェダイの桐 -(2024/06/19(Wed) 17:02:33)
    ONnojiさん


    こんにちは!

    サンプルありがとうございますm(__)m

    本日は、所用がありますので明日熟読し、返信させて頂きます。
引用返信 [メール受信/OFF] 削除キー/
■1463 / inTopicNo.19)  Re[2]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ 尾形 -(2024/06/19(Wed) 18:06:28)
    どうも、こんにちは

    ガンチャートに興味があったので
    拝見してました


    > 変数をソースにしたテキストボックスにキャレット(入力カーソル)を出現させ>
    > 表示モードから訂正モードや行挿入モードに遷移してしまいます。

    わたしも困ってたので、色々探しました

    変数(ファミリ)のフォーカス取得イベントで
    オブジェクト操作 @フォーム.訂正モード = "0"

    で多分いいかと思います

    流し読みなので、違ってたらすいません

引用返信 [メール受信/OFF] 削除キー/
■1464 / inTopicNo.20)  Re[3]: 「目からウロコの・・・パート2」を公開しました。
□投稿者/ ONnoji -(2024/06/19(Wed) 19:11:08)
    2024/06/19(Wed) 19:27:10 編集(投稿者)

    尾形さん

    >>変数をソースにしたテキストボックスにキャレット(入力カーソル)を出現させ>
    >>表示モードから訂正モードや行挿入モードに遷移してしまいます。
    > わたしも困ってたので、色々探しました
    > 変数(ファミリ)のフォーカス取得イベントで
    > オブジェクト操作 @フォーム.訂正モード = "0"

    なるほどですね。(^^v

    [名札 メイン]で次のように指定してもOKですね。

     オブジェクト操作 @フォーム{ 行訂正 = 0, 行挿入 = 0, 行削除 = 0, 行復活 = 0 }

      または

     オブジェクト操作 @フォーム{ 行訂正 = "0", 行挿入 = "0", 行削除 = "0", 行復活 = "0" }


    これらの属性は[オブジェクトのリスト]ウィンドウの[フォーム]オブジェクトの[許可作業]タブにあります。

    添付画像を参照。

    フォーカスによってオン/オフをするというのも一つの方法ですね。

    p.s.

    詳しく調べていませんが・・・(^^ゞ

    ヘッダ部・フッタ部に[変数がソースのテキスト]があったとして、

    明細部のレコードの[項目名がソースのテキスト]と[変数がソースのテキスト]を往来する場合には、

    モードの管理がちょっとややこしくなるかもしれませんね。

662×348 => 250×131

1718792137.jpg
/57KB
引用返信 [メール受信/OFF] 削除キー/

次の20件>

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

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

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

- Child Tree -
- Antispam Version -