Man skal bruge det event der GetMonthInfo, der er et eksempel i hjælpen. Der kan man bestemme hvilke dage i måneden der skal vises med fed. GetMonthInfo eventen kaldes hver gang brugeren bladrer til en anden måned. Der er bare et "lille" problem: I Eventen kan man kun se hvilken måned der skal vises, ikke hvilket år den måned ligger i!!! Det virker som om det er beregnet til at vise de samme dage i en måned med fed uanset hvilket år der er tale om, og det er vist ikke lige det du har brug for. Så kigger man på TMonthCalendar Date property, men denne windows control er lettere hjernedød for Date er altid forkert: Den opdateres først til den nye måned EFTER at GetMonthInfo eventen slutter. Derfor må man prøve at gætte sig til hvilken år/måned som kalenderen vil vise. Nedenfor er mit forsøg på at gøre det: unit Unit1;
type TForm1 = class(TForm) MonthCalendar1: TMonthCalendar; procedure MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); procedure FormCreate(Sender: TObject); private { Private declarations } FedeDage: array of TDate; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
uses DateUtils;
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); var Fede: array of Cardinal; i: Integer; Start, Stop: TDate; begin // Problem: Denne event kaldes FØR MonthCalendar1.Date ændres, // så vi ser en gammel dato i.s.f. en dato i den nye måned der skal vises.
Start := StartOfTheMonth(MonthCalendar1.Date); // Problem: MonthCalendar1.Date opdateres først EFTER denne event // Vi må derfor gætte os til den korrekte dato if MonthOf(Start) = Month then begin // valgt samme måned i enten samme år eller et andet år (vi gætter på samme år) // Start er uændret Stop := EndOfTheMonth(Start); end else if MonthOf(IncMonth(Start, 1)) = Month then begin // bruger har valgt næste måned (eller en måned i et andet år) Start := IncMonth(Start, 1); Stop := EndOfTheMonth(Start); end else if MonthOf(IncMonth(Start, -1)) = Month then begin // bruger har valgt forrige måned (eller en måned i et andet år) Start := IncMonth(Start, -1); Stop := EndOfTheMonth(Start); end else begin // Der er valgt en måned i et ukendt år (vi gætter på samme år) Start := RecodeMonth(Start, Month); Stop := EndOfTheMonth(Start); end;
SetLength(Fede, 0); for i := 0 to High(FedeDage) do if (FedeDage[i] >= Start) and (FedeDage[i] <= Stop) then begin SetLength(Fede, Length(Fede)+1); Fede[High(Fede)] := DayOf(FedeDage[i]); end; if Length(Fede) > 0 then MonthCalendar1.BoldDays(Fede, MonthBoldInfo); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.