![]() |
Delphi-Version: 10.4 Sydney
TDate(Time) und mein Kalender
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen
Ich habe hier ein Uraltprogramm, von dem ich eine einzelne Prozedur zum Erstellen eines Kalenders nutzen will. Das funktioniert soweit; unter Verwendung eines TDatetimepickers kann ich ein beliebiges Datum bestimmen, ab dem der Kalender Daten für einen Monat anzeigen soll. Nun soll mir mein Kalender aber nicht nur die Daten eines Monats, sondern diejenigen eines ganzen Jahres anzeigen. Das will ich erreichen, indem ich die Prozedur aus einem Array heraus aufrufe:
Delphi-Quellcode:
Und weiter:
procedure TCalenderTestFrame_A.StartMonth;
var i: integer; LYear, LMonth, LDay : Word; begin { Übergeben des Anfangdatums an FirstMonthDay. Das Anfangsdatum } { stammt dabei vom DateTimePicker2. Anscliessend erhält } { FFirstMonthDay sein Datum jeweils vom Vorgängermonat. } FFirstMonthDay := a.DateTimePicker2.Date; System.SysUtils.DecodeDate(FFirstMonthDay, LYear, LMonth, LDay); for i := Low(Monate) to High (Monate) do begin case i of 1: begin FIndex := 1; FStartYear := FFirstMonthDay; FEndYear := EndOfTheYear(FStartYear); FMonthsStart := StartOfTheMonth(FStartYear); FMonthsEnd := EndOfTheMonth(FStartYear); HorizontalMonths; end;
Delphi-Quellcode:
Das Problem dabei ist die Wochennummer(WoNr):
procedure TCalenderTestFrame_A.HorizontalMonths;
var LWoStart, LWoStartPlus, LWoEnd, LDatum: TDateTime; LToday : String; WoNr, TagNr : Word; i, y, j :integer; begin i := 1; j := 1; y := 1; LWoStart := StartOfTheWeek(FMonthsStart); LDatum := LWoStart; // => Start der ersten Woche des Jahres 2020 LWoEnd := EndOfTheWeek(FMonthsStart); // WeekofTheYear gibt einen Integer für die Wochennummer(?) zurück, der in 'WoNr' gespeichert wird. => Start der ersten Woche des Jahres 2020 WoNr := WeekOfTheYear(FMonthsStart); TagNr := DayofTheWeek(LDatum); LToday := Wochentage[TagNr]; while LDatum <= FMonthsEnd do begin while i <= 7 do begin if i = 1 then begin WoNr := WeekOfTheYear(LDatum); StrGCalenderTestFrame.Cells[0,j] := 'Woche '+IntToStr(WoNr); end; StrGCalenderTestFrame.Cells[y,0]:= LToday; StrGCalenderTestFrame.Cells[y,j]:= DateToStr(LDatum); Inc(y); inc(i); LDatum := LDatum +1; TagNr := DayofTheWeek(LDatum); //Tagesnummer ermitteln : 1. Wochentag Montag LToday := Wochentage[TagNr]; end; i := 1; y := 1; inc(j); StrGCalenderTestFrame.Cells[1,j]:= 'j := ' + inttostr(j); end; end; Anhang 53386 Die müsste hier entweder 53 oder 1 sein - soweit ich mich richtig erinnere, lag der 1.1.2020 noch in der Woche53 des letzten Jahres. Wieso die weder das eine noch das andere ist, ist mir ein Rätsel. Zumal sämtliche die meisten TDateTime-Funktionen einen TDateTime zurückliefern. Ansonsten verliert sich die Prozedur zur Zeit im Nirwana (Was wohl nicht weiter erstaunt)... Gruss Delbor |
AW: TDate(Time) und mein Kalender
FMonthsStart scheint mir da einen ungültigen Wert zu haben. In deinen Debug Screenshot hat LWoEnd einen seltsamen Wert (30.12.1899) nach der Anweisung. Was hat FMonthsStart wirklich für einen Wert, dass EndOfTheWeek da so einen falschen Wert liefert? Ist das womöglich ein Bug in der besagten Delphi Routine? Welche Delphi Version betrifft das?
|
AW: TDate(Time) und mein Kalender
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Rolf Frei
Ich hab da noch einen Screenshot - danach hat WoNr nun tatsächlich den Wert 1: Anhang 53387 Und weils so mysteriös schön war, gleich nochmal: Anhang 53388 Ich hab mal eine Variable geändert, aber das ist nicht das Mysteriöse: das ist viel mehr die Tatsache, dass vor Eintritt in die While-Schleife die Zuweisung an WoNr falsche 82 (Beitrag 1) ergibt, innerhalb der Schleife aber korrekt ist. Gruss Delbor |
AW: TDate(Time) und mein Kalender
Kannst du da ein kleinse Demo machen, damit ich mir das bei Gelegenheit mal anschauen kann? Wieso EndOfTheWeek(FMonthsStart) bei dir 13.12.1899 retour gibt ist anhand des Codes nicht nachvollziebar.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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