AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung FMX - DX10 - Falsche Wochennummer im TCalendar
Thema durchsuchen
Ansicht
Themen-Optionen

FMX - DX10 - Falsche Wochennummer im TCalendar

Ein Thema von Harry Stahl · begonnen am 5. Jan 2016 · letzter Beitrag vom 6. Jan 2016
 
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#7

AW: FMX - DX10 - Falsche Wochennummer im TCalendar

  Alt 6. Jan 2016, 18:31
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.

Geändert von Harry Stahl ( 6. Jan 2016 um 21:37 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz