ゴミの日トップ手順0手順1|手順2|手順3
手順2.ゴミの日を入力出来るように修正だんだんおもしろくなりますよ
  次は、メインよりおおきい?サブの作成です
   1.ゴミの日を記録する表(tbl)を作成
   2.フォームに、上記ゴミの日表設置+ボタン追加
   3.イベントの追加

  2回目は、追加部分のみ説明致します


■表・・ゴミの日区分用のテーブル作成

ファイル名はフォーム名と同じにします。下記参照の上表(tbl)作成してください
  • 表の定義内容と項目

    項目名 データ型 項目計算式 説明
    内容 文字列 具体的に、「可燃物・不燃物・ペットボトル・・・」等を入力
    文字列 第○週など、例外で「毎週」にも対応
    曜日 文字列 ○曜日を入力
    週数 整数 #条件選択(#数値([週])>0,#数値([週])) 桐で計算するのに「毎週×曜日」みたいなことはできません
    そこで、「日=1・月=2・・・土=7」のように数字に置き換えして計算に利用します
    曜数 整数 #文字位置("日月火水木金土",[曜日])
    重複 整数 ([週数]-1)*7+[曜数] 同じ日付に別の内容を重複設定しているか?のチェック用

  • 値集合の説明

    桐の特徴のひとつに、表引きがありますが、選択肢が少ない場合は、値集合を利用しましょう。
    今回は、[内容]に、「可燃物・不燃物・缶・陶器・・・など」、[週]に、「毎週・1・2・3・4・5」そして[曜日]に、
    「月・火・水・木・金・土・日」を設定しています。

    注意−1:[内容]は、実情に合わせた内容に変更下さい。[週]は、本当は第○週と入力するので、数値項目でもいいのですが、たいていの地区は、「可燃物は、毎週(火・金)」みたいに決まってるようです。そこで、「毎週」の文字も入力出来るよう文字列で設定しています。また[曜日]は、たぶん、日曜日はあまりないかな?と思いましたので、一番最後に設定しました。

    注意−2:値集合の内容は、コンマで区切ってください。桐の表定義を利用して行う場合は、自動でコンマが挿入されますので問題はありません

  • 項目制約の説明
    項目の制約として、[内容に]、「#桁数([内容])<10」を設定しています。これは、画面やレポートの関係です。たんなる文字が多いと入りきらないというだけで、フォントサイズを小さくすればもっと多くしても構いません。また、「#桁数()」で指定してあるのは、半角カナでの入力と全角文字では、「#文字数()」では制限できない為です


■フォーム修正(ゴミの日表表示&ボタン追加)

フォームは下記を参照に大きく変更してください。
これが出来れば100%です

画面図(最終版です。印刷ボタンはここでは使用しませんが一緒に作成しておきます)
これもわかりやすくヘッダー部の背景の色を変更しております
フォームの変更箇所
  • フォームの横幅(W):520pt

  • ヘッダーの高さ(H):75pt

  • ボタン追加と修正(画面図を参照下さい)
    • 印刷ボタン・印刷4ボタン追加(詳細は手順3にて説明)
    • 設定・更新ボタンの追加
    • 年−〜年+までの5個を図の位置に移動

  • 表(tbl)表示関係追加
    • ラベル・・・ヘッダーに、内容・週・曜日(オブジェクト名は前に「a」を付ける)
    • テキスト・・・明細行に、内容・週・曜日(オブジェクト名は前に「t」を付ける)
        ソース(S)は、それぞれ[内容][週][曜日]とする
    • 説明用テキスト
      「始点X:370pt・始点Y10pt・表示幅(W):140pt・高さ(H):40pt・オブジェクト名(N):t説明・標題:年−」
        ソース(S)は、「"内容:半角「9桁以内」♪週 :毎週=「毎週」、他は数字♪第2・4等は、2行で入力"」
      ♪(音符)は、かざりじゃないよ〜!!。強制改行文字に使用しています。
    • タイトル・・画面図では2個の位置をずらしフォントの色も変更しています

  • ゴミ区分関係表示
    ここで、一度リストを参照下さい。区分表示のオブジェクト名(N):tg1〜tg42になってますね。
    ゴミ区分を表示するテキストオブジェクトを新規作成します。配置する場所は、明細部部です
    ちなみに、一番左上の属性は、
     「始点X:10pt・始点Y0pt・表示幅(W):50pt・高さ(H):40pt・オブジェクト名(N):t1・ソース(S):&ごみ[1]」
    テキストオブジェクトの最後は、「オブジェクト名(N):tg42」
    ソースは37まで、「ソース(S):&ごみ[37]」まで、入力。38〜42は空白のままです。
    先に作成した日付テキストと同じ方法で同じ大きさで作成してください。

  • 最後に、日付テキストとゴミ区分テキストの大きさを調整します。また配置も上下(前後)の変更を行います

★ボタンの機能&機能パラメータの設定&変更
○新規作成のコマンドボタン
・設定ボタン
・更新ボタン

機能(共通) 機能パラメータ(設定) 機能パラメータ(更新) 説明
実行条件 &状態="更新" &状態="設定" 実行条件:パラメータを判断しボタンの使用可否を決定
なし #代入(&状態,"設定") #代入(&状態,"更新") 新しく変数に値を代入します
手続き実行 設定処理 更新処理 それぞれ手続きを呼び出します
なし

注:単に変数に値を代入しているだけですが、イベントのコマンドでは、「=」を使用するのに対してコマンドボタンでは、コンマを使用します


・印刷ボタン
・印刷4ボタン

機能(共通) 機能パラメータリスト(印刷) 機能パラメータリスト(印刷4) 説明
実行条件 &状態="更新" &状態="更新" 上記と同じ
なし #代入(&レポート,"ゴミの日.rpt") #代入(&レポート,"ゴミの日4.rpt")   〃
手続き実行 設定処理 更新処理   〃
なし


○修正をするコマンドボタン
・「年−・月−・月+・年+・今月・終了」
 変更内容:2行目の内容を3行目に、1行目の内容を2行目に移動して1行目に上記同様
 「機能:実行条件、パラメータリストに:&状態="更新"」を記入してください
 (終了ボタンは、2行目から3行目への移動はありません)

○いま、何を行ったか・・・?
コマンドボタン「設定」を押したときは、つまり「ゴミの日の内容」が、修正や更新可能な状態になっています。
このときは、定義内容が変更されてる可能性があり、この状態で、カレンダー表示や印刷しても正しい答えはでません。そこで、設定ボタンを押したとき、つまり設定ボタンの2行目「#代入(&状態,"設定")」が実行され、&状態の値が"設定"になります。
これを利用して、実行条件(&状態="更新")でなければ、実行できないように制限をかけています。

変数を利用した計算式、プログラムないで、変数を代入していますので、普通は他の変数値は入りません。したがって、実行条件の(&状態="更新")と(&状態<>"設定")は、同じ動きをするはずですが、(&状態="更新")は、絶対に"更新"でなかれば行けないし、(&状態<>"設定")は、"設定"以外だったらなんでもいいわけですので、少しニュアンスが違います。したがって、「実行条件の(&状態="更新")」の方が、制限が厳しい状態になります


■イベントの処理・・ゴミの日のデータ入力〜カレンダーに表示まで

  • 表(tbl)への入力。入力後のエラー判定
  • 起動時や編集後の変数への代入
  ここでは、ポイントを紹介します。
  追加分のイベントは、トップの「イベント説明」にまとめて紹介しています。

○ ゴミの日を設定することによって、大きくわけて2つの作業が増えます

1.入力するための準備・入力補助・入力データのチェック・入力作業終了処理
  • 準備は、設定ボタンを押すことによって行っています。
    テキストオブジェクトのフォーカス解放(自由設定)・また誤動作のため、不要ボタンの操作禁止処理

  • 桐の入力補助には、表の値集合等を利用しています。全固定入力(曜日など)・半固定入力などは積極的に利用しましょう

  • 今回は、入力のサービスに、第○週と入力する箇所を、"毎週"も可能とする仕様にしました。入力の便利さとプログラムの手数は反比例かもしれませんが、なにごとも勉強のためと・・・入力されたデータはのチェックはこのときしか行っていません。
    その他配列変数以上のデータがあった場合訂正用のメッセージを表示します。

  • 入力作業の終了時点で、表のテキストオブジェクトも、操作(修正・追加等)禁止しています。
    最後のチェックと、更新処理は更新ボタンで行ってます。ここで、再度定義を読み込みカレンダーの再表示も行います

2.入力された設定をカレンダーに、反映させる作業
  • 先にカレンダを表示し、1日から月末の範囲で表示できる箇所を決めています。計算式は、もっと簡単なものにできるかも知れませんが手順はおよそ変わらないでしょう。(たぶん最初に作成した計算式よりは簡単になる予定です)計算式の話は別として、表示方法は、日付と同じです。変数に代入して表示しています。
  • ところで、このデータは、いつ読み込まれるかむかですが、起動時と、設定変更時です。当然月が変わっても、年が変わっても町内会のからの案内がこない限り変わりません。他のプログラムで壊さないようにしましょうね。
    この読み込み時にうまくいかなければ、エラーフラグを更新しています。

  • そしてこのゴミの日を表示する判定はエラーフラグを参照しています(&ch=0)
    エラーが有れば、ゴミの日の表示は行わないようにしてあります

top