Super, erst mal Danke für die Ausweisung der Stelle.
Allerdings reicht es leider nicht, die 3 Zeilen zu löschen, wie von Dir auf
QC vorgeschlagen, denn dann zählt die Woche mit 54,55 Woche in Januar 2016 weiter (entscheidend ist die Zeichenroutine, die da unten weiter geht).
Das ist mein aktueller Stand eines Workarounds (muss jetzt runter, haben Besuch), scheint zu funktionieren:
Delphi-Quellcode:
procedure TStyledCalendar.FillWeeksNumbers;
var
I: Integer;
CaptionControl: ICaption;
FirstWeekOfMonth: Byte;
WeekCorrection, MNr: Integer;
begin
if FWeeks =
nil then
Exit;
FWeeks.Visible := Model.WeekNumbers;
// WeekOfTheYear doesn't consider a current Locale. So for 01.01.2017 returns 52.
if ((MonthOf(FDateTime) = MonthJanuary))
then begin
if (Weekoftheyear (FDateTime) <> 53)
then begin
FirstWeekOfMonth := WeekOfTheYear(RecodeDay (FDateTime, 1));
end else begin
FirstWeekOfMonth := 1;
end;
end else begin
FirstWeekOfMonth := WeekOfTheYear(RecodeDay (FDateTime,1));
end;
// First week in FDay may be a last week of previous month. So we need to keep offset for correct counting of weeks.
WeekCorrection := (DefineItemIndexOfFirstDayInCurrentMonth - 1)
div 7;
for I := 0
to FWeeks.ControlsCount - 1
do
if Supports(FWeeks.Controls[I], ICaption, CaptionControl)
then begin
MNr := FirstWeekOfMonth + I - WeekCorrection;
// Year 2015 has 53 Weeks; If Drawing parts of January in DEC-Calendar, start again with "1" in drawing
if MNr > 53
then begin
FirstWeekOfMonth := 0;
MNr := 1;
end;
// eg. Dez. 2016 has 52 Weeks, so start after that again with "1" in drawing
if ((MonthOf(FDateTime) = MonthDecember))
then begin
if (MNr = 53)
and (WeeksInAYear (YearOf (FDateTime)) =52)
then begin
FirstWeekOfMonth := 0;
MNr := 1;
end;
end;
// No 53.week in second week-Row in January possible
if ((MonthOf(FDateTime) = MonthJanuary))
then begin
if (MNr = 53)
and (I = 1)
then begin
FirstWeekOfMonth := 0;
MNr := 1;
end;
end;
CaptionControl.Text := MNr.ToString;
end;
end;
Wird erforderlich, um Umbrüche der Wochennummern im Dez/Januar richtig auszugeben.
Edit: Den letzten IF-Block habe ich gerade (22:10) noch ergänzt.