![]() |
Datum-Countdown
Hallo Leute,
ich habe vor mir einen Countdown zu programmieren. Leider komme ich damit nicht ganz zurecht. Ich möchte ein Datum (dd.mm.yy) aus einem Edit einlesen und dann in einem Label anzeigen wieviele Tage es bis dahin noch sind anzeigen. Kann mir bitte jemand helfen? Das untenstehende klappt leider nicht.
Delphi-Quellcode:
...
var
Test : TDate; begin Test := strtodate(Edit10.Text) - date(); Form13.Label5.Caption := DatetoStr(Test); end; |
AW: Datum-Countdown
Die Variable Test nicht als TDate sondern als Integer deklarieren, müsste schon reichen.
|
AW: Datum-Countdown
|
AW: Datum-Countdown
Zitat:
|
AW: Datum-Countdown
Vielen Dank, in welchem Format müssen die Parameter an die Funktion "DaysBeteen" übergeben werden? Also wie muss ich hierbei das datum in Edit10 schreiben?
Der Versuch mit der Änderung des Datentypes zu Int klappt leider nicht. |
AW: Datum-Countdown
Hast das auch abgeändert?
Delphi-Quellcode:
Form13.Label5.Caption := IntToStr(Test);
|
AW: Datum-Countdown
Delphi-Quellcode:
geht leider nicht.
procedure TForm1.Termincountdown1Click(Sender: TObject);
var Test : Integer; begin Form13.Show; Form13.Caption := 'Termincountdown'; Test := (Edit10.Text) - date(); Form13.Label5.Caption := InttoStr(Test); end; |
AW: Datum-Countdown
Versuch es mit trunc().
Delphi-Quellcode:
Test := trunc(StrToDate(Edit10.Text) - date);
|
AW: Datum-Countdown
Das wird akzeptiert.
was macht trunc()? Wenn ich nun aber "09.04.1982" in Edit10 eingebe, kommt die Meldung "09.04.1982 is not a valid date". Und Label5 blieibt unverändert. |
AW: Datum-Countdown
Trunc() schneidet die Nachkommastellen einfach ab. Und den Fehler kann ich nicht nachvollziehen, bei mir wird das Datum akzeptiert. Vielleicht solltest Du auf ein MaskEdit oder einen DateTimePicker ausweichen, um Schreibfehler bestmöglich auszuschließen?
|
AW: Datum-Countdown
Delphi-Quellcode:
So habe ich es jetzt. Fehler werden keine angezeigt. Wenn Ich aber das Programm ausführe, Kommt immernoch die Fehlermeldung, dass es kein gültiges Datum sei. Habe schon verschiedene Eingabeformate versucht. Leider immer das gleiche :(
procedure TForm1.Termincountdown1Click(Sender: TObject);
var Test : Integer; begin Form13.Show; Form13.Caption := 'Termincountdown'; Test := trunc(StrToDate(Edit10.Text) - date); Form13.Label5.Caption := InttoStr(Test); end; |
AW: Datum-Countdown
Bist du dir sicher das du dein Datum in Edit10 schreibst?
Die Procedure funktioniert so wie sie da steht. |
AW: Datum-Countdown
Kommt drauf an, was du eingibst. Kommt der Fehler auch, wenn du z.B. '31.05.2013' eingibst?
Wieso nimmst du nicht einfach einen TDateTimePicker? In dessen OnChance-Ereignis schreibst du dann deinen Code für die Änderung des Label-Captions. Noch etwas: Mit der Zeit, wenn deine Programme komplexer werden, blickst du nicht mehr durch, wenn du nicht aussagekräftige Variablenbezeichner verwendest: Nicht Edit10, sondern z.B. Edit_DatumEingabe ... |
AW: Datum-Countdown
Auch dann kommt die Fehlermeldung...hmm....
Danke für die Tipps. Ich arbeite noch nicht lange mit Delphi und bin gerade dabei mir alles selbst beizubringen. Habe mit einem "TDateTimePicker" noch nie gearbeitet. Gibt es hierbei was besonderes zu beachten? |
AW: Datum-Countdown
Hat es evtl. damit zu tun, dass Edit10 auf einer anderen Form ist als Label5?
|
AW: Datum-Countdown
Ich habe immer noch die Befürchtung das du in das falsche Feld schreibst ;)
Schreib doch hinter dein begin mal
Delphi-Quellcode:
Oder setz dir einen Breakpoint.
showmessage(Edit10.Text);
|
AW: Datum-Countdown
Zitat:
![]() |
AW: Datum-Countdown
Also Edit10 passt :).
Die Fehlermeldung bezieht sich ja auch immer auf das Datum welches ich in Edit10 eingegeben hab. |
AW: Datum-Countdown
Also wenn ein Showmessage(Edit10.Text) z.B 26.05.2013 ausgibt, dann funktioniert auch die Procedure. Bei mir kommt dann -1 in einem Label.
|
AW: Datum-Countdown
Zitat:
Delphi-Quellcode:
damit du sehen kannst was für ein Datumsformat auf deinem Rechner erwartet wird.
showmessage(datoToStr(date));
|
AW: Datum-Countdown
Delphi-Quellcode:
Werden richtig angezeigt
showmessage(dateToStr(date));
showmessage(Form1.edit10.Text); |
AW: Datum-Countdown
Irgendwie hängen wir nun fest. Kannst du mal den vollständigen Code von beiden Formularen posten? Du schreibst beim showmessage Form1.Edit10.Text, bei der Typumwandlung aber nur Edit10.Text ... hast du Edit10 auf verschiedenen Formularen?
|
AW: Datum-Countdown
Aktuell habe ich das hier in Form1:
Delphi-Quellcode:
Auf Form1 habe ich ein Edit (Edit10) hier möchte ich ein Datum eintragen.
procedure TForm1.Termincountdown1Click(Sender: TObject);
var Test : Integer; begin Form13.Show; Form13.Caption := 'Termincountdown'; showmessage(dateToStr(date)); showmessage(edit10.Text); Test := trunc(StrToDate(Edit10.Text) - date); Form13.Label5.Caption := InttoStr(Test); end; Auf Form13 habe ich ein Label (Label5) mit diesem möchte ich anzeigen wie viele Tage es noch bis zu dem Datum sind welches in Form1 in Edit10 eingegeben wurde.
Delphi-Quellcode:
...zeigen beide das richtige an. Die Erste Message: 27/May/13 und die zweite 28/May/13 (wenn eingeben.
showmessage(dateToStr(date));
showmessage(edit10.Text); Form13:
Delphi-Quellcode:
unit Unit13; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm13 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; private { Private declarations } public { Public declarations } end; var Form13: TForm13; implementation {$R *.dfm} end. |
AW: Datum-Countdown
Kann man evtl. das Datumformat anpassen? Vllt. gibt es Probleme wegen den "/" bei 27/May/13?
|
AW: Datum-Countdown
Ja also dieses Datumsformat hatte ich jetzt auch noch nicht in den Fingern :?
Dein Windows ist wohl auf dieses Format gestellt. Mit FormatSettings.ShortDateFormat kannst Du es ändern. |
AW: Datum-Countdown
Zitat:
|
AW: Datum-Countdown
Die Benennungen werde ich noch ändern :), möchte erstmal, dass es überhaupt läuft.
Mein aktueller Stand ist der, dass das Daten in showMessage(...) richtig angezeigt werden (Bsp. 30.05.13). Eine Ausgabe findet statt, nach Drücken des "OK"-Button der zweiten Message erscheint dann die Fehlermeldung "30.05.13 is not a valid date". Daher muss es doch iwie an der Zeile liegen in der ich die Differenz berechne (Bildung von "Test"), oder?
Delphi-Quellcode:
procedure TForm1.Termincountdown1Click(Sender: TObject);
var Test : Integer; FormatSettings: TFormatSettings; begin Form13.Show; Form13.Caption := 'Termincountdown'; //FormatSettings.ShortDateFormat := 'dd.mm.yy'; showmessage(FormatDateTime('dd.mm.yy', date)); showmessage(edit10.Text); Test := trunc(StrToDate(Edit10.Text) - strtodate(FormatDateTime('dd.mm.yy', date))); showmessage(inttostr(Test)); Form13.Label5.Caption := InttoStr(Test); end; |
AW: Datum-Countdown
Wenn Du Edit10.Text in ein Datum umwandeln willst, das im Format 'dd.mm.yy' eingegeben ist, aber dein Windows -aus welchen Gründen auch immer- das Format 'dd/MMM/yy' verwendet, dann würde ich 'Edit10.Text' auch mit dem entsprechenden Formatbezeichner umwandeln und nicht ohne, wie Du das gemacht hast.
Weiterhin würde ich dir empfehlen, bei Problemen wie diesem, keine Mehrfachoperationen in einer Zeile auszuführen. Dann verstehst Du den Code besser und siehst sofort, wo der Fehler ist.
Delphi-Quellcode:
Aber bisher: :thumb: Gut gemacht. Programmieren lernen tut weh und man rennt am Anfang ständig gegen die Wand, aber es lohnt sich.
procedure TForm1.Termincountdown1Click(Sender: TObject);
var Eingabedatum : TDateTime; AnzahlDerTage : Integer; begin Form13.Show; Form13.Caption := 'Termincountdown'; // Das könntest Du im Designer einstellen. Eingabedatum := StrToDate(Edit10.Text); // Welches Datumsformat wird hier für die Umwandlung verwendet? AnzahlDerTage := trunc(Eingabedatum - Date); Form13.Label5.Caption := InttoStr(AnzahlDerTage); end; |
AW: Datum-Countdown
Zitat:
Da du FormatSettings.ShortDateFormat auskommentiert hast, ist das Datumsformat immer noch das o.g. Ein FormatDateTime gibt dir das Datum ein einem gewünschten Format als String aus, ändert aber kein ShortDateFormat. Ein StrToDate erwartet immer einen String mit dem Format FormatSettings.ShortDateTimeFormat. Deswegen müsste es eher so gehen:
Delphi-Quellcode:
uses SysUtils;
procedure TForm1.Termincountdown1Click(Sender: TObject); var Test : Integer; begin Form13.Show; Form13.Caption := 'Termincountdown'; FormatSettings.ShortDateFormat := 'dd.mm.yy'; showmessage(DateToStr(date)); showmessage(edit10.Text); Test := trunc(StrToDate(Edit10.Text) - date); Form13.Label5.Caption := InttoStr(Test); end; |
AW: Datum-Countdown
Es funktioniert:) Vielen Dank an Alle
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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