![]() |
Delphi-Version: 10.4 Sydney
Tagesanzahl Februar eines Jahres
Hallo Leute,
ich hab jetzt sehr lange herumgesucht und auch einige Foreneinträge gefunden, die mich etwas weitergebracht haben. Jedoch führte keines meiner Experimente zu dem Ergebnis, welches ich im Sinn hatte. Dabei sieht die Problemstellung für mich doch recht banal aus... Ich möchte eine Altersberechnung durchführen. Dazu benutze ich 3 Comboboxen. cbbDay cbbMonth cbbYear Die eigentliche Altersberechnung führe ich hiermit durch: ![]() Ich möchte mit einbauen, dass je nachdem welcher Monat in cbbMonth ausgewählt wird, die monatsspezifische Anzahl an Tagen in cbbDay geladen wird. Das klappt auch für alle Monate. Bloß nicht für den Februar. Mein Versuch:
Delphi-Quellcode:
Vorausgesetzt ich wähle 2020 in cbbYear, bringt er mir den Fehler
var
days: Cardinal; begin ... days := DaysInMonth(StrToDate(cbbYear.Text + '.02')); ... end;
Code:
Das seh ich auch ein.
2020.02 ist kein gültiges Datum
Aber ich weiß einfach nicht wie ich das nun lösen soll. Kompletter Code der Prozedur:
Delphi-Quellcode:
Wie gesagt, ich denke die Lösung ist einfach, da mir auch die OH sagt, dass ich doch nur den Monat in TDateTime eingeben soll. :|
procedure TForm1.cbbMonthClick(Sender: TObject);
var i: Integer; days: Cardinal; begin if cbbMonth.ItemIndex >= 0 then begin cbbDay.Enabled := True; if cbbMonth.ItemIndex in [0, 2, 4, 6, 7, 9, 11] then // Monate mit 31 Tagen begin for i := 1 to 31 do // Füge 31 Items(Tage) der cbbDay hinzu begin cbbDay.Items.Add(IntToStr(i)); end; end else begin // alle anderen Monate if cbbMonth.ItemIndex = 1 then // Für Monat Februar begin days := DaysInMonth(StrToDate(cbbYear.Text + '.02')); for i := 1 to days do // Füge die jahrespezifische Tagesanzahl für Februar hinzu begin cbbDay.Items.Add(IntToStr(i)); end end else begin for i := 1 to 30 do // Monate mit 30 Tagen begin cbbDay.Items.Add(IntToStr(i)); end; end; end; end else begin cbbDay.Enabled := False; end; end; Ich weiß aber nicht, wie das aussehen soll. Ich hoffe ihr könnt mir weiterhelfen. VG Kratos |
AW: Tagesanzahl Februar eines Jahres
.. versuche mal
Delphi-Quellcode:
Grüße
DaysInAMonth(year, month);
Klaus |
AW: Tagesanzahl Februar eines Jahres
Versuch es mal damit:
Delphi-Quellcode:
days := DaysInAMonth(StrToInt(cbbYear.Text, 2));
![]() Zitat:
|
AW: Tagesanzahl Februar eines Jahres
Wenn schon
Delphi-Quellcode:
verwenden, dann doch einfach in allen Fällen:
DaysInMonth
Delphi-Quellcode:
var
i: Integer; days: Cardinal; month: Integer; year: Integer; begin cbbDay.Enabled := False; if cbbMonth.ItemIndex >= 0 then begin month := cbbMonth.ItemIndex + 1; if TryStrToInt(cbbYear.Text, year) then begin days := DaysInMonth(EncodeDate(year, month, 1)); for i := 1 to days do // Füge die jahrespezifische Tagesanzahl für den Monat hinzu begin cbbDay.Items.Add(IntToStr(i)); end; cbbDay.Enabled := True; end else begin ShowMessage('ungültiges Datum!'); end; end; end; |
AW: Tagesanzahl Februar eines Jahres
Ist das fehlende begin ein Kopierschutz? :stupid::zwinker:
...ändern ist gemein.:zwinker: |
AW: Tagesanzahl Februar eines Jahres
Zitat:
Normalerweise schreibe ich sowas in der Delphi-IDE, aber das setzt in der Regel ein compilierbares Projekt oder zumindest compilierbaren Code voraus. |
AW: Tagesanzahl Februar eines Jahres
Oder wenn man bei der ursprünglichen Lösung bleiben möchte:
Delphi-Quellcode:
if IsLeapYear(Year) then
Days := 29 else Days := 28; |
AW: Tagesanzahl Februar eines Jahres
Guten Morgen,
vielen Dank für die vielen Antworten! Ich hab mich schlussendlich für die Lösung von DeddyH entschieden. Es funktioniert. :) VG Kratos |
AW: Tagesanzahl Februar eines Jahres
Geht aber kürzer ;-)
Delphi-Quellcode:
Days := IfThen(IsLeapYear(Year),29,28);
|
AW: Tagesanzahl Februar eines Jahres
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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