- ベストアンサー
FileMaker Pro7 カレンダーの作り方
filemaker pro7を使いカレンダーを作りたいのですがわからないことばかりで困っています。 どうかどなたか作り方を教えていただけないでしょうか。 目標は、携帯のカレンダー画面のような感じで、当日の日付が画面上部に2005年12月15日(木)と表示され、さらに15日の場所が青のマークで塗られていて、また予定を入れたい場合は、その日にちをクリックすると別の画面に移動し、予定を書き込め、予定を入れた場合は、カレンダー画面のその日の下に予定が入っていることを示すマークが表示されているようにしたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
先に聞くべきことだったのですが。。。 カレンダーは標準的なスタイルのカレンダーをイメージしていたのですがそれで間違いないですか? 7列(日→・・・→土) 6行(1週目→・・・→6週目) そうだとして その状態でマス目を並べます。 #1の時はマス目A1~G6は計算フィールドと書きましたが、実現するにはかなり複雑な計算式になるので、ここは簡単にスクリプトで処理したほうが得策でした 第一週だけ計算して数字をあてます。 二週目からは前日マスに1を足すことでマスを埋めます。 スクリプトを作成して(スクリプト名は日にち割り当てとか適当で) なおDayNameの代わりに解りやすくDayNameJを使用しています(意味はほぼ同じ) If[DayNameJ (Date(表示月;1;表示年)) = "日曜日"] フィールド設定[マス目A1;1] フィールド設定[マス目B1;2] : フィールド設定[マス目G1;1] Else If[DayNameJ (Date(表示月;1;表示年)) = "月曜日"] フィールド設定[マス目A1;""] フィールド設定[マス目B1;1] : フィールド設定[マス目G1;6] Else If[DayNameJ (Date(表示月;1;表示年)) = "火曜日"] : End If フィールド設定[マス目A2;マス目G1+1] フィールド設定[マス目B2;マス目A2+1] : このスクリプトを走らせればマス目にカレンダーのように数字が並びます。 A列を赤文字にG列を青文字にすることでさらにもっともらしくなります
その他の回答 (2)
- 7marine
- ベストアンサー率36% (59/160)
>あと、マス目A、マス目Bなどはデータベースで定義しておけばいいんですよね? はい、データベースのフィールドで定義します。 タイプは数字を選択してください。 ただ今までの流れではマス目A、マス目Bの名称は正確にはマス目A1、マス目B1としてましたけど~ >フィールド設定[マス目A1;1] の設定の方法は[フィールド]グループの[フィールド設定]を選択して「移動(M)」ボタンを押した後、「指定(S)」でフィールド[マス目A1]を選択し、「指定(F)」で[1]を入力するという意味です
お礼
ありがとうございます。 後は、自力でがんばってみようと思います。
- 7marine
- ベストアンサー率36% (59/160)
結構難問の質問なのでスルーしようかと思ったのですが 自分の腕試しをかねて回答します。 ちなみに全くの頭中作成(実物無)の回答なので動作は保障しません 質問者の習得レベルを知らないのでどこまで技術的なことを言っていいものか迷いますが。 以下の用語が理解できている前提で説明します ポータル、リレーション、日付関数、オープンスクリプト まずはテーブルを二つ用意します 一つ目はカレンダーテーブル 用意するフィールドは、表示年(数字)、表示月(数字)、マス目A1~G6(計算・数字){マス目A1=※別記}、マス目日付A1~G6(計算・日付){マス目日付A1=Date(表示月;マス目A1;表示年)}、本日印A1~G6(計算){本日印1=if(Get(日付) = Date(表示月;マス目A1;表示年);"○";"")...} 二つ目はスケジュールテーブル 用意するフィールドは、予定日(日付)、予定(テキスト)、予定有(テキスト){=[カレンダー画面のその日の下に予定が入っていることを示すマーク]} リレーションをたくさん作成、(カレンダーテーブル:マス目日付1=スケジュールテーブル:予定日)×(A1~G6) カレンダーテーブルのレコード数は常にひとつです。 オープンスクリプトで カレンダーテーブルの表示年、表示月に本日の日付から年・月をばらして格納、 レイアウトも二つ カレンダーレイアウトには上位に本日日付(//で十分?)、 レイアウト上位部分にボタンを配置し表示年月を書き換えるスクリプトを関連つけます ポータルをカレンダーのマス目のように並べます。 マス目には同時に本日印A1~G6も配置します リレーション越しにスケジュールレコードを表示、クリック時にスクリプトを発動させます(関連レコードへ移動) これで該当スケジュールに飛びます ※マス目A1~G6について カレンダーのマス目は通常7列6行あるのでエクセルのような表記をすると A1~G1が第一週目となる Aが日曜日、Gが土曜日の場合に 2005年12月1日は1週目の木曜日になるので A1~D1までは{=[空白]}、E1=1、F1=2...となる DayNameとDayOfWeekでどのマス目にどの日にちが入るかは簡単に計算できます 感想 ここまで書きながら、ファイルメーカーよりもっとほかの手段のほうが良いような気がします。(爆 エラー回避の為には書かなくてはいけないこともありますが省略しました 作成は結構大変ですが、がんばって下さい
お礼
ありがとうございます。とても助かります。 私は最近filemakerを買ったばかりで、ほとんど素人です。とにかくこの通りにやってみます。
補足
ほんとに勉強不足ですみません。 「DayNameとDayOfWeekでどのマス目にどの日にちが入るかは簡単に計算できる」 の部分で、すでにつまずいてしまいました。 申し訳ないのですが、教えていただけませんか?
お礼
回答ありがとうございました。 回答の通りスプリクトを作成しているのですが、たとえば If[DayNameJ (Date(表示月;1;表示年)) = "日曜日"] フィールド設定[マス目A1;1] の場合、フィールド設定[マス目A1;1]でマス目A1と1の間に「;」を入れOKを押すと、 「演算子(+,-,*など)を入れてください」 と表示されてしまうのですが、何が問題なのか分からなくて困っています。 あと、マス目A、マス目Bなどはデータベースで定義しておけばいいんですよね?