MonthCalendarで特定の曜日の色を変える方法

解決


表裏 未里  URL  2008-08-22 01:31:16  No: 31590

MonthCalenderで、定休日を表示するために、たとえば月曜日の全ての日の文字を赤く(もしくは薄く)表示したいのです。
方法をご教授頂けると幸いです。


太字なら  2008-08-22 21:21:37  No: 31591

色は変えられないけど、BoldDaysを使えば各月の複数の特定の日を太字にすることは出来るよ。


TS  2008-08-23 02:34:22  No: 31592

解決していませんし、検証してませんけど。
https://www.petitmonte.com/bbs/answers?question_id=4771


表裏 未里  URL  2008-08-24 10:22:58  No: 31593

太字なら様、TS様、ご返信ありがとうございます。色々四苦八苦やってます。

https://www.petitmonte.com/bbs/answers?question_id=3533

の過去ログを読んで、月曜日の獲得に成功したのですが、MonthCalenderのMonthCalendar1GetMonthInfoで前の月に移動したか、次の月に移動したか、判断する方法はないでしょうか?  前の月に戻りながらカレンダーを進めていくと1月と12月が月曜日を休日としてくれないバグが出てまして。

それと、MonthCalendar1.BoldDaysはMonthCalendar1GetMonthInfoメソッド以外では利用できないのでしょうか?
MonthCalendar1Clickの中で全て処理できると一気に解決できるのですが。

どうぞ、よろしくお願いします。ソース提示が必要な場合、ソースを出しますので。


表裏 未里  URL  2008-08-24 14:16:00  No: 31594

なぜか上手くいかないので、ソースを貼りつけさせて頂きます。

TMonthCalendarを一個貼りつけて、Tmemoを二つ貼りつけて
TmonthCalenderのOnGetMonthinfoイベントに下記のソースを貼りつけたら使えます。
mae_Monthが正しく動いてない感じなんですよね。意見頂けると嬉しいです!!

  private
    { Private 宣言 }
    mae_month,Month_i:integer;

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
  Month: Cardinal; var MonthBoldInfo: Cardinal);
const
  week: array[1..7] of string = ('日曜日','月曜日','火曜日','水曜日','木曜日',
                                                            '金曜日','土曜日');
var
  d, today: TDateTime;
  iw: integer;
  Day_I,Seireki_I:integer;
begin

  //====================================================
  //定休日を太字にする
  //====================================================

  memo1.Clear;

  Seireki_I:=strtoint(copy(DateToStr(MonthCalendar1.date),0,4));
  Mae_month:=Month_I;
  Month_i:=Month;
  //Month_i:=strtoint(copy(DateToStr(MonthCalendar1.date),6,2));

  if (Mae_month=12) and (Month_I=1) then
  begin
  inc(seireki_I);
  end;

  if (Mae_Month=1) and (Month_i=12) then
  begin
  dec(seireki_I);
  end;

  d := VarToDateTime(inttostr(Seireki_I)+'年'+inttostr(Month_i)+'月'+'1日');

  iw := 0;
  repeat
    inc(iw);
  until week[iw] ='月曜日';

  while DayOfWeek(d) <> iw do d := d+1;

  case Month_I of

  1,3,5,7,8,10,12:
    begin
      Day_I:=31;
    end;
  2:begin
      Day_I:=28;
    end;
  4,6,9,11:
    begin
      Day_I:=30;
    end;

  end;

  today := VarToDateTime(inttostr(Seireki_I)+'年'+inttostr(Month_I)+'月'+inttostr(Day_I)+'日');
  while d<=today do
  begin
    Memo1.Lines.Add(DateTimeToStr(d));
    d := d+7;
  end;

  memo2.clear;

  //太字にする
  for iw:=0 to Memo1.Lines.Count-1 do
  begin
    memo2.Lines.add(copy(memo1.lines.strings[iw],9,2));
  end;

  //===========================================

  //太字にする
  if Memo1.Lines.Count=4 then
  begin
  MonthCalendar1.BoldDays([strtoint(memo2.lines.strings[0]),strtoint(memo2.lines.strings[1]),strtoint(memo2.lines.strings[2]),strtoint(memo2.lines.strings[3])], MonthBoldInfo);
  end;

  if Memo1.Lines.Count=5 then
  begin
  MonthCalendar1.BoldDays([strtoint(memo2.lines.strings[0]),strtoint(memo2.lines.strings[1]),strtoint(memo2.lines.strings[2]),strtoint(memo2.lines.strings[3]),strtoint(memo2.lines.strings[4])], MonthBoldInfo);
  end;

end;


ダイジョウV  2008-08-25 02:58:57  No: 31595

真琴:「ずいぶん悪戦苦闘してるみたいだね、ミサトさんは」
春子:「もしかして、ドツボにハマったかな?」
真琴:「ねぇ、ハルコさん、ナンで上手くいかないンだろう…」
春子:「それはネ、月移動した時にGetMonthInfoハンドラが呼ばれるのは1回だけじゃないからヨ」
真琴:「えっ、そうなの? じゃ、何回呼ばれるの?」
春子:「最低でも3回、その度に Month引数の値が変るのよ」
真琴:「それなら、↓このリンクの年対応のGetMonthInfoExイベントはどうなの?」
  https://www.petitmonte.com/bbs/answers?question_id=4771
春子:「その場合も同じ、でも Year引数があるから、それ使えばOK」
真琴:「そっか、じゃぁ、それで問題解決?」
春子:「ところが、そうもいかないンだな、そのサンプルにも一つバグがあって…」
真琴:「やっぱり、出来そうで出来ないってコト?」
春子:「そんなコトないよ、マコト、そのバグを直せばイイんだから」
真琴:「一難去っても、また一難来るってコトワザ通りなのねぇ」
春子:「ま、ドツボから抜け出せればダイジョウV」
真琴:「そのオヤジギャグ、どっかで聴いたよな〜…」


表裏 未里  URL  2008-08-25 22:22:18  No: 31596

ダイジョウVさんありがとうございます。

https://www.petitmonte.com/bbs/answers?question_id=4771

のyear関数でなんとか形になりました。しかし、カレンダーの置き場所がタブシートの上なのですよね。
ですので、TMonthCalendarExをコンポーネントとしてしまいたいのですが、私にはコンポーネントを作る知識がありません。分かり易い方法など、ありましたらご教授頂けると幸いです。
それと、ダイジョウVさんが仰ってるバグがあるというのも気になる所なのですが……。


イイ感じ  2008-08-26 02:20:24  No: 31597

真琴:「ハルコさん、アタシうっかりしてた、今思い出した…」
春子:「ン? 思い出した? ナニを?」
真琴:「カイトさんが、前に…じゃなかった、"未来"に教えてくれたコト」
春子:「ややこしい言い方だよね、一体ナンなの?」
真琴:「曜日を指定してその色を自由に変えられる"MonthCalendarEx"コンポがあるの」
春子:「そのコンポを作ったのがカイトさん? でも今はまだ出来てナイんじゃない?」
真琴:「そぅ、カイトさんが作って…今もあると思う、確か…↓ココからDL出来るハズよ」
        http://kaito.es.land.to/lime/lime.cgi?MonthCalendarEx01

春子:「だけど、勝手にDLして使うのはマズいよね? 一応、了解とらなきゃ」
真琴:「大丈夫、それはOKって"未来"に言ってたから、…こんなカンジで使うの」

procedure TForm1.FormCreate(Sender: TObject);
begin
  with MonthCalendarEx1 do begin
   Colors.HolidayColor := clFuchsia; // 日曜、休日の色(デフォルト=clRed)
   Colors.ReserveColor := clLime;    // 定休日の色(デフォルト=clAqua)
   RegularHolidays.Add(2);           // 定休日の曜日指定(2〜7) 月曜=2
   GradientTitle := True;            // タイトル部分をグラデーション表示
  end;
end;

春子:「DLしてインストールしたら [Samples]ページに入ったよ、で、貼り付けて…」
真琴:「ね? 月曜日が緑色になるでしょ? タイトルもグラデーションでイイ感じ」
春子:「そうネ、これを更に自分好みに改造すれば、コンポ作成の勉強とかにもなるし、…ところで、マコト」
真琴:「ナニ? ハルコさん」
春子:「もうすぐ夏休みも終わるけど、また夏の始めに戻りたいナンて思ってない?」
真琴:「アタシ、もうそんなコト思わないよ」
春子:「ン? マコトもこの暑さにはマイッタのかな?」
真琴:「そうじゃないよ、だって、今の夏が終わらないと、次の夏も来ないじゃん」
春子:「次の夏? あぁ〜、来るのはBeachBoyの二人だっけ? それがカイトさん達?」
真琴:「うん、待ち遠しいな〜来年が…」
春子:「ねぇ、マコト、その二人はどんな? イイ感じ?」
真琴:「そぅ…、俳優で言えば、竹之内豊と反町隆史に似てるかなぁ〜」
春子:「え? そんなにイイ男なの? それはアタシも楽しみ^^」
真琴:「でもネ、結局、二人ともハルコさんにはホレなかったの」
春子:「そんなの、アタシの魅力で変えてみせるよ、マコト」
真琴:「ハルコさん、勝手にストーリー変えないでよ^^;; でも、"大奥"の"滝山"って色っぽいよネ」
春子:「マコトの"元ヤンキー"はチョット無理があるかな?」


表裏 未里  URL  2008-08-26 04:07:47  No: 31598

イイ感じ様、それと"MonthCalendarEx"コンポーネントの作者カイト様に心から感謝します!!!
ソースコード読んで勉強させてもらいます!  
今回のことで自分の力不足をしみじみ感じたので、コンポーネント作成ぐらい出来るように勉強しておきます。

ご意見くださった皆様ありがとうございました!
またよろしくお願いします。


ピンポ〜ン、明けおめ…  2009-01-01 18:25:31  No: 31599

≪カイトのマンション≫
桜  :「明けましておめでとう、カイト、ピザ買ってきたけど食べる?」
海都:「あ、サクラ、おめでとう、…ピザ? サンキュ、鍵は開いてるから入って」
桜  :「外はイイお天気よ、ちょっと寒いけど…、お正月なのにパソコンで何してるの?」
海都:「年末までズット仕事忙しくてヒマがなくて…、で、久しぶりに自分のコト」
桜  :「あ…、このグラデーションのカレンダー、アタシの友達も使ってたよ」
海都:「えっ? 前に作ったのをオレのWEBページにUPしておいたんだけど、サクラにも教えてなかったよね? 検索で見つけたのかな?」
桜  :「そうみたい、やっぱりカイトだったのね、サイトのURL見て、もしかしたらって思ったけど」
海都:「でも、それはメモリーリークのバグもあったし、まだ祝日の設定も無くて未完成だったから、手直しをしてたんだ」
桜  :「だけど、祝日って、年ごとに日がズレたりして、ちょっと面倒じゃない?」
海都:「そうなんだ、祝日法が何度も改正されてるから、過去の祝日を正しくするのはかなり大変だったよ」
桜  :「春分の日、秋分の日もズレることあるよね? それは大丈夫?」
海都:「2000年からの百年間はキチンと計算してるけど、それ以外は今のところ3月21日、9月23日に固定、天文には詳しくないんで^^;」
桜  :「それでも、1998年と1999年は大丈夫ね」
海都:「あと、日付けにチェックマークを重ねることも出来るよ、こんなカンジで」

procedure TForm1.FormCreate(Sender: TObject);
begin
  with MonthCalendarEx1 do begin
   Colors.MarkDayColor := clFuchsia; // マーク日(太字)のデフォルト色
   MarkDays.Add(2009,4,29);          // 年を指定すると、その年だけ
   MarkDays.Add(2009,4,30);          // (2009年のゴールデンウィーク連休をマーク)
   MarkDays.Add(2009,5,01);
   MarkDays.Add(2009,5,02);
   MarkDays.Add(2009,5,03);
   MarkDays.Add(2009,5,04);
   MarkDays.Add(2009,5,05);
   MarkDays.Add(2009,5,06);
   MarkDays.Add(3,3);                // 年を指定しないと、毎年恒例
   MarkDays.Add(5,22);

   RegularHolidays.Add(wnSAT);       // 定休曜日 wnSUN(日)〜wnSAT(土)か, 1(日)〜7(土)
  end;
end;

  http://kaito.es.land.to/img/_Demo1.png

桜  :「カワイイ、カラフルなカレンダーね、このチェックマークの色は緑だけ?」
海都:「マークの色は MarkBmpColorプロパティで、青か赤にも変えられる」
桜  :「カレンダーの月を変えると、並んでる別のカレンダーの月も連動して変るのね」
海都:「そう、この3個のカレンダーは GroupIndexを0以外の同じ値にしてあるから」
桜  :「あれ? 2004年の海の日が7月20日になってないよ? 間違いじゃない?」
海都:「2003年からハッピーマンデー法の第2弾が適用されるからソレでいいんだ」
桜  :「2003年に? ずいぶん先の話ね、でも何でそんな先のコトまで知ってるの?」
海都:「あっ、その説明をすると話がややこしくなるから、サラッと聞き流して^^;」
桜  :「そう? ねぇ、日付の右クリックで PoupMenuを出して、その日にマークを付けたり消したり出来たら便利じゃない?」
海都:「うん、オレもそうするつもりだけど、今日はそこまでやる時間ないな」

  http://kaito.es.land.to/img/_Demo2.png

桜  :「そうそう、先にこのピザ食べない? 今日は初詣に行く約束だったでしょ?」
海都:「忘れてないよ、一応仕上がったんで、これをUPLOADしてから食べるよ、その後で初詣に行こう」

   http://kaito.es.land.to/lime/lime.cgi?MonthCalendarEx01

桜  :「ねぇ、カイトは何を神様にお願いするの?」
海都:「う〜ん、"今年は大きなプロジェクトを任されますように"ってお願いしようかな?」
桜  :「アタシのお願いは仕事のことじゃなくて、"今年も健康でありますように"」

≪民宿ダイヤモンド・ヘッド≫
春子:「マコト、明けましてオメデトウさん、すがすがしい元旦だね」
真琴:「明けましておめでとうございます、ハルコさん、今なぜか懐かしい気分なの、アタシ」
春子:「それは当然じゃない? 二年前に戻ったマコトが今年の新年を迎えるのは二回目だもん」
真琴:「え?言ってる意味が分からないけど…"二年前に戻った"ってナンのコト? ハルコさん」
春子:「マコト、マジ? 二年前に戻ったコト忘れちゃったの?」


表裏 未里  URL  2009-01-01 18:54:46  No: 31600

明けましておめでとうございます!

>ピンポ〜ン、明けおめ…さん

カレンダーの更新お疲れ様です!  
祝日が色づけされるのは便利ですね!  
使わせて頂きますね(^^)  
ありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加