AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Countdown-Brauche Hilfe

Ein Thema von BullsEye · begonnen am 30. Dez 2007 · letzter Beitrag vom 31. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#1

Countdown-Brauche Hilfe

  Alt 30. Dez 2007, 00:06
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:
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;
Die Progressbars dienen nur zum test sind aber vollkommen unerheblich.

Dann hab ich dies und auch schon viel Ähnliches probiert, haut aber nicht hin.
Delphi-Quellcode:
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;
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.ä.
Sicherlich gibt es auch noch bessere Möglichkeiten für nen Countdown aber besser gings gerade nicht^^



Ich hoffe ihr könnt mir da helfen
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Countdown-Brauche Hilfe

  Alt 30. Dez 2007, 00:21
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;
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#3

Re: Countdown-Brauche Hilfe

  Alt 30. Dez 2007, 00:47
Ok, so gehts. Hab die Klammern nur vergessen
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:
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;
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?

so???

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
IF Timer2.Enabled = False THEN
Timer2.Enabled := true
ELSE
Timer2.Enabled := false;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Countdown-Brauche Hilfe

  Alt 30. Dez 2007, 07:05
Hai BulsEye,

ich habe einige Anmerkungen (Tips) zu deinem Code.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  IF Timer2.Enabled = False THEN
    Timer2.Enabled := true
  ELSE
    Timer2.Enabled := false;
end;
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.
Delphi-Quellcode:
begin
  if (Timer2.Enabled) then
    Timer2.Enabled := False
  else
    Timer2.Enabled := True;
end;
In diesem Fall geht es aber noch einfacher und damit besser zu lesen. Du möchtest den Wert von .Enabled ja negieren. Also einfach:
Delphi-Quellcode:
begin
  Timer2.Enabled := not (Timer2.Enabled);
end;

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  IF (Edit1.Text <= Label3.Caption) AND (Edit2.Text <= Label1.Caption) THEN BEGIN
  ShowMessage(Edit3.Text); END;
end;
Du versuchst Strings welche ein Datum/Zeit Wert enthalten zu vergleichen. Das finde ich gaaanz schlecht. Wandele die Strings in ein TDate(Time) um Delphi-Referenz durchsuchenStrToDate und vergleiche diese dann.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#5

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 09:44
Ich hab mal ein wenig was anderes ausprobiert, mit Hilfe der SuFu habe ich folgenden Code gefunden.

Delphi-Quellcode:
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;
Soweit geht das ja auch nur will ich jetzt anstatt einen Coutdown für Sylvester meine Zeit selbst festlegen.
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:
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;
Welchen der beiden Codes ich später nehme ist völlig belanglos, wobei ich glaube, das der Obere der besser gewählte ist?!
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 14:18
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;
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#7

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 14:37
Zitat von Nuclear-Ping:
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).
Hey, cool danke. An die Möglichkeit es so zu machen hab ich gar nicht gedacht, funzt auch alles soweit ganz gut.
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 14:40
Zitat von Nuclear-Ping:
Dazwischen := SecondsBetween(Aktuell, EndDatum);
Was ist denn, wenn Dazwischen auf 0 steht? Richtig, dann ist der CountDown zu Ende
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#9

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 14:42
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.
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#10

Re: Countdown-Brauche Hilfe

  Alt 31. Dez 2007, 14:43
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz