![]() |
Nächsten Tag berechnen!
Hallo.
Ich hab grad ein problem und zwar kriege ich das nicht mit dem Schaltjahr hin. Wenn mir da jemand helfen könnte wäre super. Alles andere Funktioniert, aber das mit dem Schaltjahr hakt...(is rot markiert) Hier der Quellcode:
Code:
[edit=sakura] Brauche schnelle Hilfe bei Delphi -> aus dem Titel entfernt, [b]->[pre]-Tags. Mfg, sakura[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var Tag,Monat,Jahr,TagM,MonatM,JahrM:real; begin Tag:=strtofloat(Edit1.text); Monat:=strtofloat(Edit2.text); Jahr:=strtofloat(Edit3.text); if (Monat=4) or (Monat=6) or (Monat=9) or (Monat=11) then if Tag=30 then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end else if (Tag>=1) and (Tag<30) then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end else if (Tag>30) or (Tag<1) then showmessage ('Unsinn'); if (Monat=1) or (Monat=3) or (Monat=5) or (Monat=7) or (Monat=8) or (Monat=10) then if Tag=31 then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end else if (Tag>=1) and (Tag<31) then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end else if (Tag>31) or (Tag<1) then begin TagM:=0; MonatM:=0; JahrM:=0; end; if (Monat=12) then if Tag=31 then begin TagM:=1; MonatM:=1; JahrM:=Jahr+1; end else if (Tag>=1) and (Tag<=31) then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end else if (Tag>31) or (Tag<1) then showmessage ('Unsinn!'); [color=#df0000] if (Monat=2) and (IsLeapYear) then if Tag=29 then begin TagM:=1; MonatM:=Monat+1; jahrM:=Jahr; end else if (Tag<29) and (Tag>=1) then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end else if (Tag>29) or (Tag<1) then showmessage ('Unsinn!'); if Monat=2 then if Tag=28 then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end else if (tag>=1) and (Tag<28) then begin TagM:=Tag+1; MonatM:=Monat; jahrM:=Jahr; end else if (Tag>29) or (Tag<1) then showmessage ('Unsinn!');[/color][color=#ff001f][/color] Edit4.text:=floattostr(TagM); Edit5.text:=floattostr(MonatM); Edit6.text:=floattostr(JahrM); end; end. |
Re: Brauche schnelle Hilfe bei Delphi -> Nächsten Tag ber
Willkommen im Forum
was für ein Fehlercode wird angezeigt? |
Re: Brauche schnelle Hilfe bei Delphi -> Nächsten Tag ber
benutze bitte die codetags.
Benutze doch die Delphi Funktionen für die Datumprüfung. Das ist kürzer und du brauchst dein Grips nicht für sowas banales verschwenden.
Delphi-Quellcode:
edit: inc(d) vergessen
procedure TForm1.Button1Click(Sender: TObject);
var d: TDate; t,m,y: word; begin try d:=EncodeDate( strtoint(edt_jahr.text), strtoint(edt_monat.text), strtoint(edt_tag.text) ); inc(d); DecodeDate(d, y,m,t); caption:=Format('%d %d %d',[t,m,y]); except MessageDlg('Unsinn', mtError, [mbOK], 0); end; end; Willkommen in der DP |
Re: Nächsten Tag berechnen!
Hallo,
die Funktion IsLeapYear(Year: Word) erwartet als Parameter das Jahr, für das das Schaltjahr berechnet werden soll. Siehe Delphi-Hilfe!! |
Re: Nächsten Tag berechnen!
Delphi-Quellcode:
Gruß Hagen
var
Tag,Monat,Jahe: Word; Datum: TDateTime; begin Tag := StrToInt(Edit1.Text); Monat := StrToInt(Edit2.Text); Jahr := StrToInt(Edit3.Text); Datum := EncodeDate(Jahr, Monat, Tag); // umwandeln in TDateTime Datum := Datum +1; // +1 Tag drauf addieren DecodeDate(Datum, Jahr, Monat, Tag); // wieder zerlegen in Jahr, Monat, Tag Edit1.Text := IntToStr(Tag); Edit2.Text := IntToStr(Monat); Edit3.Text := IntToStr(Jahr); end; |
Re: Nächsten Tag berechnen!
Hi,
die Ideen von den Vorpostern sind definitiv zu bevorzugen, da diese übersichtlicher sind, aber damit du weisst was bei deinem Code noch gefehlt hat:
Delphi-Quellcode:
// Februar im Schaltjahr
if (Monat = 2) and (IsLeapYear) then begin // hier gehört noch ein begin hin if Tag = 29 then begin TagM := 1; MonatM := Monat + 1; jahrM := Jahr; end else if (Tag < 29) and (Tag >= 1) then begin TagM := Tag + 1; MonatM := Monat; JahrM := Jahr; end else // Das kannste dir sparen ;) -> if (Tag > 29) or (Tag < 1) then showmessage('Unsinn!'); end // hier gehört noch ein end hin // Februar ohne Schaltjahr else if Monat = 2 then begin // auch hier ein begin if Tag = 28 then begin TagM := 1; MonatM := Monat + 1; JahrM := Jahr; end else if (tag >= 1) and (Tag < 28) then begin TagM := Tag + 1; MonatM := Monat; jahrM := Jahr; end else showmessage('Unsinn!'); end; // und das end nicht vergessen end; Gruß Ansgar |
Re: Nächsten Tag berechnen!
Danke, danke ihr wart ne große Hilfe, und dann auch noch so schnell o.O
wow! :cyclops: das einzige was er mir sagt was falsch ist ist jetz noch das hier (mit pfeilen markiert):
Delphi-Quellcode:
Dazu sagt er, dass es nicht genügend wirkliche Parameter habe.
if (Monat=2) and >>>(IsLeapYear)<<<
then begin if Tag=29 then begin TagM:=1; MonatM:=Monat+1; jahrM:=Jahr; end else if (Tag<29) and (Tag>=1) then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end end Ich kann damit nicht wirklich was anfangen... habe ich einen falschen Variablenwert genommen? also sollte ich integer anstatt real nehmen...? oder sollte ich das mit Jahr mod 4=0 ersetzen? obwohl wenn ich das mache, geht das bei mir auch nicht... dann steht da nämlich: operator ist auf diesen operandentyp nicht anwendbar. |
Re: Nächsten Tag berechnen!
Delphi-Quellcode:
Du musst das Jahr schon angeben, wurde aber auch bereits erwähnt.
IsLeapYear(Jahr)
|
Re: Nächsten Tag berechnen!
IsLeapYear ist eine function und benötigt als Parameter das Jahr (if IsLeapYear(1999) then...)
|
Re: Nächsten Tag berechnen!
achso, hab ich wohl überlesen.. danke nochmal! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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