![]() |
Countdown-Brauche Hilfe
Hallo, ich bins wiedereinmal ;)
Also ich habe vor, für ein Programm einen Countdown zu schreib. Aber da ich mich erstmal an dem Countdown selbst versuchen wollte, hab ich nen neues Projekt gemacht. Ich versuche es mit einer Art "Abgleich". Ich gebe die aktuelle Zeit auf nem Label aus, dies wird bzw soll mit den Eingaben aus 2 Edits verglichen werden. 1 Edit für das Datum und 1 Edit für die Uhrzeit. Und wenn die Eingaben in den Edits mit den auf den Labels übereinstimmen, soll eine selbst gewählt Nachricht (Aus Edit 3) erscheinen. Wenn ich das nur mit dem Datum oder nur der Uhrzeit mache geht es aber nicht wenn ich beides zusammen habe. Die Zeit etc lese ich hiermit aus:
Delphi-Quellcode:
Die Progressbars dienen nur zum test sind aber vollkommen unerheblich.
procedure TForm1.Timer1Timer(Sender: TObject);
VAR Hour, Min, Sec, mSec: Word; begin Label1.Caption := TimeToStr(Time); Label2.Caption := FormatDateTime ('"Heute ist" dddd, "der" d mmmm yyyy" ', Date); Label3.Caption := DateToStr(date); DecodeTime(time, Hour, Min, Sec, mSec); ProgressBar2.Position := hour; ProgressBar3.Position := min; ProgressBar4.Position := sec; ProgressBar5.Position := msec; end; Dann hab ich dies und auch schon viel Ähnliches probiert, haut aber nicht hin.
Delphi-Quellcode:
Ich hab mir schon einige dinge für nen Countdown angeschaut aber dann geht einmal der Code nicht, das andere mal kann ich nicht selbst eine Eingabe tätigen. u.ä.
procedure TForm1.Button2Click(Sender: TObject);
begin IF Edit1.Text = Label3.Caption THEN BEGIN END AND IF Edit2.Text = Label1.Caption THEN BEGIN ShowMessage(Edit3.Text); END; end; Sicherlich gibt es auch noch bessere Möglichkeiten für nen Countdown aber besser gings gerade nicht^^ :wiejetzt: :wiejetzt: :wiejetzt: Ich hoffe ihr könnt mir da helfen |
Re: Countdown-Brauche Hilfe
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin IF (Edit1.Text = Label3.Caption) AND (Edit2.Text = Label1.Caption) THEN BEGIN ShowMessage(Edit3.Text); END; end; |
Re: Countdown-Brauche Hilfe
Ok, so gehts. Hab die Klammern nur vergessen :wall: :wall: :wall:
Allerdings hab ich gemerkt, das er mir die Message nur ausgibt, wenn ich auf den Button klicke deshalb hab ich es nun auf einen Timer gesetzt
Delphi-Quellcode:
Damit er mir nicht dauerhaft die Message anzeigt wenn ich z.b. mit nem alten Datum starte hab ich den Timer disabled und auf Button Click wird er Enabled. Aber Ich will die Message NUR 1x angezeigt haben, wie bekomm ich sowas hin?
procedure TForm1.Timer2Timer(Sender: TObject);
begin IF (Edit1.Text <= Label3.Caption) AND (Edit2.Text <= Label1.Caption) THEN BEGIN ShowMessage(Edit3.Text); END; end; procedure TForm1.Button2Click(Sender: TObject); begin IF Timer2.Enabled = False THEN Timer2.Enabled := true; so???
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin IF Timer2.Enabled = False THEN Timer2.Enabled := true ELSE Timer2.Enabled := false; end; |
Re: Countdown-Brauche Hilfe
Hai BulsEye,
ich habe einige Anmerkungen (Tips) zu deinem Code.
Delphi-Quellcode:
Es ist schlecht in einer Abfrage auf "=True/False" zu prüfen. Da eine IF-Abfrage ja nur wissen möchte ob das Ergebniss Wahr oder Falsch ist kann man das = True/False also weg lassen.
procedure TForm1.Button2Click(Sender: TObject);
begin IF Timer2.Enabled = False THEN Timer2.Enabled := true ELSE Timer2.Enabled := false; end;
Delphi-Quellcode:
In diesem Fall geht es aber noch einfacher und damit besser zu lesen. Du möchtest den Wert von .Enabled ja negieren. Also einfach:
begin
if (Timer2.Enabled) then Timer2.Enabled := False else Timer2.Enabled := True; end;
Delphi-Quellcode:
begin
Timer2.Enabled := not (Timer2.Enabled); end;
Delphi-Quellcode:
Du versuchst Strings welche ein Datum/Zeit Wert enthalten zu vergleichen. Das finde ich gaaanz schlecht. Wandele die Strings in ein TDate(Time) um
procedure TForm1.Timer2Timer(Sender: TObject);
begin IF (Edit1.Text <= Label3.Caption) AND (Edit2.Text <= Label1.Caption) THEN BEGIN ShowMessage(Edit3.Text); END; end; ![]() |
Re: Countdown-Brauche Hilfe
Ich hab mal ein wenig was anderes ausprobiert, mit Hilfe der SuFu habe ich folgenden Code gefunden.
Delphi-Quellcode:
Soweit geht das ja auch nur will ich jetzt anstatt einen Coutdown für Sylvester meine Zeit selbst festlegen.
procedure TForm1.Timer1Timer(Sender: TObject);
VAR EndDatum : TDateTime; Aktuell : TDateTime; Dazwischen : Integer; Tage, Stunden, Minuten, Sekunden : Integer; BEGIN // Enddatum eingeben EndDatum := EncodeDateTime(2008, 1, 1, 0, 0, 0, 0); // = 1.1.2008 0:00 Uhr // Aktuellen Zeitstempel Aktuell := Now; // Sekunden dazwischen ausrechnen Dazwischen := SecondsBetween(Aktuell, EndDatum); // Hier kann man nun Sekunden in Tage, Stunden etc. umrechnen, dürfte mathematisch trivial sein // KEIN Pseudocode mehr! Tage := Dazwischen div (60*60*24); Dazwischen := Dazwischen - (Tage * 60 * 60 * 24); Stunden := Dazwischen div (60*60); Dazwischen := Dazwischen - (Stunden * 60 * 60); Minuten := Dazwischen div 60; Dazwischen := Dazwischen - ( Minuten * 60); Sekunden := Dazwischen; // Auf Label anzeigen Label1.Caption := Format('Noch %d Tage, %d Stunden, %d Minuten und %d Sekunden bis Silvester!', [Tage, Stunden, Minuten, Sekunden]); end; Ich habe es mir in drei Edits vorgestellt. 1 für das Datum, 1für die Uhrzeit und 1 für den auszugebenden Text. Mit dem anderen bin ich bis nu soweit aber die Ausgabe funktioniert nicht so wie sie soll
Delphi-Quellcode:
Welchen der beiden Codes ich später nehme ist völlig belanglos, wobei ich glaube, das der Obere der besser gewählte ist?!
procedure TForm2.CheckBox9Click(Sender: TObject);
VAR Zeit1, Zeit2, Zeit3, Zeit4, Tage, Stunden, Minuten : Integer; begin Zeit1 := StrToInt(Edit3.Text);// HIER Zeit2 := StrToInt(Edit4.Text);// HIER Zeit3 := StrToInt(Form1.Panel1.Caption);// HIER Zeit4 := StrToInt(Form1.Label5.Caption); // HIER Tage := Zeit4-Zeit1; Stunden := Zeit3-Zeit2; IF (CheckBox9.Checked) THEN Form1.Label4.Show ELSE Form1.Label4.Hide; IF (Edit3.Text <= Form1.Panel1.Caption) AND (Edit4.Text <= Form1.Panel1.Caption) THEN BEGIN ShowMessage(Edit5.Text); Form1.Label4.Caption := FormatDateTime('"Heute ist" dddd, "der" d mmmm yyyy" ', Date); Form1.Label4.Caption := FormatDateTime('"Noch" %d "Tage", %d "Stunden und" "Minuten bis zum" +Edit5.Text', [Tage,Stunden]);// UND HIER MUSS DER FEHLER SEIN??? END; end; |
Re: Countdown-Brauche Hilfe
Schmeiss' die Edits für das Datum und die Uhrzeit wieder runter und nimm stattdessen 2 "TDateTimePicker". Den einen stellst du im Objektinspektor auf dtDate, den anderen auf dtTime (oder wie die hießen).
Dann änderst du den ordentlichen Code von oben wie folgt ab:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
VAR EndDatum : TDateTime; Aktuell : TDateTime; Dazwischen : Integer; Tage, Stunden, Minuten, Sekunden : Integer; BEGIN // Zeit von DTP2 dem DTP1 zuweisen, da er nur auf Date gestellt war DateTimePicker1.Time := DateTimePicker2.Time; EndDatum := DateTimePicker1.DateTime; // Aktuellen Zeitstempel Aktuell := Now; // Sekunden dazwischen ausrechnen Dazwischen := SecondsBetween(Aktuell, EndDatum); // Hier kann man nun Sekunden in Tage, Stunden etc. umrechnen, dürfte mathematisch trivial sein // KEIN Pseudocode mehr! Tage := Dazwischen div (60*60*24); Dazwischen := Dazwischen - (Tage * 60 * 60 * 24); Stunden := Dazwischen div (60*60); Dazwischen := Dazwischen - (Stunden * 60 * 60); Minuten := Dazwischen div 60; Dazwischen := Dazwischen - ( Minuten * 60); Sekunden := Dazwischen; // Auf Label anzeigen Label1.Caption := Format('Noch %d Tage, %d Stunden, %d Minuten und %d Sekunden bis ' + Edit5.Text + '!', [Tage, Stunden, Minuten, Sekunden]); END; |
Re: Countdown-Brauche Hilfe
Zitat:
Aber wie bekomm ich nun hin das ich eine Nachricht o.ä. erhalte wenn der Countdown zu Ende ist? Also ich habe es mir nun so gedacht: Ich vergleiche die Zeit auf dem Panel mit der Zeit die ich in den DateTimePickers habe und wenn die übereinstimmen bzw die auf dem Panel größer ist soll eine Message erscheinen. Kann ich das so machen bzw gibt es ggf eine bessere Lösung? |
Re: Countdown-Brauche Hilfe
Zitat:
|
Re: Countdown-Brauche Hilfe
Stimmt, so wie Deddy es sagt gehts auch. Glaube aber man muss da auf <= 0 prüfen, da der Wert glaube ich negativ wird, wenn die Zeit dazwischen größer ist.
|
Re: Countdown-Brauche Hilfe
Also könnte ich es, nun mal rein theoretisch so machen?
IF Dazwischen <=0 THEN BEGIN ShowMessage('Ihr Countdown ist beendet!'); END; Nuclear -Ping, das ist falsch! Er wird nicht negativ sonder zähl weiter aber wieder hoch also anstatt 3,2,1 dann 1,2,3.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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