Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeitanzeige countdown
chickenfigt1989 - Do 10.03.11 16:45
Titel: Zeitanzeige countdown
Hallo
Habe im Forum folgenden Code gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Label4.visible:=true; if Zeit < StrtoTime('00:00:01') then Label4.Caption:='Zeit abgelaufen' else begin Zeit:=Zeit - 1 / SecsPerDay; Label4.Caption:=TimeToStr(Zeit); end; end; |
Die zeitanzeige klappt wie ich will allerdings wenn die Zeit 00:00:01 beträgt wird bei Label4.caption Zeit abgelaufen angezeigt. Aber ich will das mehr passiert
Jetzt hab ich folgendes Probiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Label4.visible:=true; if Zeit < StrtoTime('00:00:01') then Label4.Caption:='Zeit abgelaufen' Label2.Caption:='Fertig' else begin Zeit:=Zeit - 1 / SecsPerDay; Label4.Caption:=TimeToStr(Zeit); end; end; |
Wieso funktioniert das nicht?
lg
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Do 10.03.2011 um 16:19
guinnes - Do 10.03.11 16:53
Begin ... End ?
chickenfigt1989 - Do 10.03.11 16:55
Geht auch nicht da kommt immer
[Error] Unit1.pas(118): Missing operator or semicolon
mein Code sieht nun so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Label4.visible:=true; if Zeit < StrtoTime('00:00:01') then begin Label4.Caption:='Zeit abgelaufen' Showmessage('ddd') end else begin Zeit:=Zeit - 1 / SecsPerDay; Label4.Caption:=TimeToStr(Zeit); end; end; |
Lg
ALF - Do 10.03.11 16:59
kommt von C&P und nicht verstehen
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if Zeit < StrtoTime('00:00:01') then begin Label4.Caption:='Zeit abgelaufen'; Showmessage('ddd'); end else |
guinnes - Do 10.03.11 17:00
chickenfigt1989 hat folgendes geschrieben : |
Geht auch nicht da kommt immer
[Error] Unit1.pas(118): Missing operator or semicolon |
Und warum machst du dann nicht die Semicolons dahin, wo sie hingehören ?
Tankard - Do 10.03.11 17:01
chickenfigt1989 hat folgendes geschrieben : |
Geht auch nicht da kommt immer
[Error] Unit1.pas(118): Missing operator or semicolon
mein Code sieht nun so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Label4.visible:=true; if Zeit < StrtoTime('00:00:01') then begin Label4.Caption:='Zeit abgelaufen'; Showmessage('ddd'); end else begin Zeit:=Zeit - 1 / SecsPerDay; Label4.Caption:=TimeToStr(Zeit); end; end; |
Lg |
MAN. Fang mal endlich an Pascal zu lernen. Tutorials lesen. Sourcecode hab ich mal ausnahmsweise verbessert.
ALF - Do 10.03.11 17:03
oder wenigstens Fehlermeldungen zu verstehen :P
jaenicke - Do 10.03.11 17:34
Tankard hat folgendes geschrieben : |
MAN. Fang mal endlich an Pascal zu lernen. Tutorials lesen. |
Das hat nichts mit lernen zu tun. Wenn da steht, dass ein Operator oder Semikolon fehlt und dann deswegen hier gefragt werden muss, was das heißt, dann nenne ich das nicht unwissend, sondern dämlich. Sorry, ich schreib sowas ja sonst eigentlich nicht, ist hier aber so.
Schließlich steht es in der Fehlermeldung direkt da, dass das Semikolon fehlt. Was gibt es da noch zu fragen? :roll:
Gerd Kayser - Do 10.03.11 17:51
jaenicke hat folgendes geschrieben : |
Was gibt es da noch zu fragen? :roll: |
Wenigstens steht da "TForm1" und nicht "TForm537". Auch ein kleiner Fortschritt. ;-)
jaenicke - Do 10.03.11 17:53
Wahrscheinlich weil es gerade ein neues Projekt ist. :lol:
chickenfigt1989 - So 13.03.11 01:18
Folgender Fall.
Ich hab eine Combobox wo man 16pflanzen auswählen kann.
Jede Pflanze hat eine eigene Zeit, funktioniert auch Prima.
Allerdings will ich mehrere Comboboxen haben dann brauch ich ja mehrere Timer,
doch dann läuft die zeitanzeige viel zu schnell runter.
Wie mach ich das?
lg
HenryHux - So 13.03.11 01:22
Leider kann ich da nur reinraten, was dein Problem ist.
Setzt du denn jedes mal wenn man einen Eintrag auswählt das Interval auf die Zeit der Pflanze?
Lg
chickenfigt1989 - So 13.03.11 01:27
So sieht es aus wenn man einen Eintrag aus der Combobox wählt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ComboBox1.ItemIndex=1 then begin Button6.visible:=true; Label2.visible:=true; Button2.Visible:=false; Zeit:= StrtoTime('00:00:10'); Timer2.enabled:=true; end; |
Anzumerken ist, das ich drei Tabsheets hab auf jedem tabsheet sollen mindestens 6comboboxen mit einen eigenen timer.
Edit: Habs selber hinbekommen und zwar hab ich bei der Zweiten combobox folgendes geändert:
Aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ComboBox2.ItemIndex=2 then begin Label8.visible:=true; Button4.Visible:=false; Zeit:= StrtoTime('00:00:10'); Timer1.enabled:=true;
end; |
wurde
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ComboBox1.ItemIndex=1 then begin Button6.visible:=true; Label2.visible:=true; Button2.Visible:=false; time:= StrtoTime('00:00:10'); Timer2.enabled:=true; end; |
und oben sieht es so aus:
Delphi-Quelltext
1: 2: 3: 4:
| var Form1: TForm1; Zeit:TDateTime; time:TDateTime; |
Lg
ALF - So 13.03.11 12:10
Ich hoffe doch nur, das Du nun nicht auch 16 Timer für 16 Pflanzen gesetzt hast :rofl:
Gruss Alf
chickenfigt1989 - So 13.03.11 14:33
Nein hab einen Timer für die sämtlichen pflanzen die in der Combobox stehen.
Brauch halt trotzdem 4timer weils bäume und so auch noch gibt.
lg
ALF - So 13.03.11 14:36
Auch dazu brauch man eigentlich nur einen Timer :wink:
Der rest ist Code 8)
Gruss Alf
beastofchaos - So 13.03.11 15:06
Ich weiß ja nicht, wie du dir das vorstellst mit den Bäumen und Pflanzen - ich vermute, du wilst iwie die Zeit zum wachsen "messen" oder so was. Ich würde da vll schon 2 timer für die beidne fälle nehmen, sofern du nicht das verhältnis zwischen dem einen und anderen Timer weißt
also so wär es leicht zu einem timer zu lösen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 1000; Timer2.Interval := 500; end;
TForm1.Timer1Timer(Sender: TObject); begin a := a + 20; end;
TForm1.Timer2Timer(Sender: TObject); begin b := b + 20; end; |
Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 1000; end;
TForm1.Timer1Timer(Sender: TObject); begin a := a + 20; b := b + 40; end; |
So, kann man alles in einem Timer unterbringen ;)
Grüße, beast
chickenfigt1989 - Mi 27.04.11 23:03
hallo
habe den timer wie oben gepostet
kann man es irgendwi so machen das wenn die zeiit nur noch 60min beträgt nen warnsound oder so ausgibt?
lg
jaenicke - Mi 27.04.11 23:18
chickenfigt1989 hat folgendes geschrieben : |
kann man es irgendwi so machen das wenn die zeiit nur noch 60min beträgt nen warnsound oder so ausgibt? |
Ja.
chickenfigt1989 - Mi 27.04.11 23:21
und wie?
chickenfigt1989 - Mi 27.04.11 23:42
ja wie ich nen sound abspiele ist mir klar
hab ja nen sound wenn der countdown auf null steht
und der sound ist mittels .res datei in die exe eingebunden.
wollte nur wissen wissen ob ich zwischendrin auh nen soundabspielen kann wenn es nur noch 60min sind wie das geht
lg
beastofchaos - Do 28.04.11 00:11
Also Sound ausgeben... DA gibt es viiele Möglichkeiten. die leichteste, aber schlechteste: mach nen Mediaplayer auf dein Forumlar(Visible := False). Dak annste dann das Lied im Objektinspektor hochladen. Im FormCreate gibtse noch Mediaplayer1.Open oder so an und an der Stelle, wo du das ausgibst steht dann Mediaplayer1.Play ;)
Ob noch 60 Minuten sind, wirst du doch sicher lösen können, da ich keien ahnung habe, in welchen Zusammenhang die Zeit ist und etc.
Gruß, beast
chickenfigt1989 - Do 28.04.11 00:40
dankeschön an vp aber wie ich sounds abpsiele hab cih bereits
lg
Dude566 - Do 28.04.11 00:46
Mal im Ernst, wo ist denn jetzt dein Problem im Timer abzufragen ob noch 60 Minuten verbleiben und dann deinen Sound wiederzugeben?
chickenfigt1989 - Do 28.04.11 01:01
wenn ich ne if abfrage einbaue
Delphi-Quelltext
1: 2: 3: 4: 5:
| if sid <StrtoTime('00:60:00') then begin
Hier mein sound end; |
der sound erscheint 2sek nachdem die zeit bei 60war allerdings wird er dauernd wiederholt
also er fängt immer von neu an
lg
jaenicke - Do 28.04.11 06:57
Du widersprichst dir:
chickenfigt1989 hat folgendes geschrieben : |
kann man es irgendwi so machen das wenn die zeiit nur noch 60min beträgt |
chickenfigt1989 hat folgendes geschrieben : |
wenn ich ne if abfrage einbaue Delphi-Quelltext 1: 2:
| if sid <StrtoTime('00:60:00') then begin | |
Eigentlich willst du bei 60 Minuten bereits, dass etwas passiert, andererseits schreibst du im Quelltext hin, dass erst bei weniger als 60 Minuten etwas passieren soll...
Ja, und gegen die Wiederholungen hilft nur, dass du dir in einem privaten Feld speicherst, ob du die Warnung bereits ausgegeben hast. Wie auch sonst?
ALF - Do 28.04.11 09:50
Wenn Du pfiffig bist und Dein
Zeitintervall in sec abläuft? dann weist Du auch das 1sec später der Wert nicht mehr stimmt.
Delphi-Quelltext
1:
| if sid = strtotime(01:00:00) then sound |
1Sec später ist sid dann 00:59:59 und der sound kommt nicht mehr.
Schon sparst du Dir
evtl noch ne Variable ein.
Gruss Alf
jaenicke - Do 28.04.11 09:57
Und was, wenn der PC gerade ausgelastet ist und die Message erst eine Sekunde später verarbeitet wird? Ein Timer ist nicht und schon gar nicht immer präzise, darauf darf man sich nicht verlassen...
ALF - Do 28.04.11 10:07
In diesem Fall dürfte es doch keine rolle spielen :gruebel:
Da 'sid' eh im Timer dec wird(davon geh ich aus) kann auch nur in diesem Timer die Abfrage starten. Selbst wenn der Timer mal nicht kann, kann 'sid' auch nicht Dec werden.
Oder ist da mein Gedanke falsch ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Procedure Timer begin dec(sid) if sid = strtotime(01:00:00) then sound ... ...
end; |
Gruss Alf
jaenicke - Do 28.04.11 10:26
Von allem anderen abgesehen: Fließkommazahlen mit = zu vergleichen ist ohnehin keine gute Idee durch die Ungenauigkeiten bei Berechnungen...
ALF - Do 28.04.11 10:40
jaenicke hat folgendes geschrieben : |
...Fließkommazahlen mit = zu vergleichen ist ohnehin keine gute Idee durch die Ungenauigkeiten bei Berechnungen... |
Ich geb mich geschlagen, <= ist da schon richtig und der zusätzlichen Variable .
'Duck und Weg' :mrgreen:
@chickenfigt1989 vergiss meinen Vorschlag ganz schnell, hab da im Moment nicht weiter gedacht :oops:
Dafür geb ich dir ne fertige Lösung :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private canplay: Boolean; .... .... if canplay and (sid <= strtotime(01:00:00)) then begin playsound; canplay:= False; end .... ... |
Gruss ALf
beastofchaos - Do 28.04.11 12:03
Richtig so, du prüfst einfach mti einer Boolean, ob du es bereits abgespielt hast ;)
Da komtm mir ne Frage von wegen Fließkomma zahlen... Kann man eine Zeit runden? Also von Minuten auf Stunden oder Sekudnen auf Minuten? :) Dann könntest du die Boolean wieder vergessen xD
HenryHux - Do 28.04.11 12:06
beastofchaos hat folgendes geschrieben : |
Da komtm mir ne Frage von wegen Fließkomma zahlen... Kann man eine Zeit runden? Also von Minuten auf Stunden oder Sekudnen auf Minuten? :) Dann könntest du die Boolean wieder vergessen xD |
Dann hättest du immernoch das Problem, dass der Ton mehr als einmal abgespielt wird.
beastofchaos - Do 28.04.11 13:37
Ne, die eine Variante war ja von euch: imemr mit "<=" / "<" ausprobieren und nach dem ersten mal Boolean auf True/False setzen.
Die andere Variante mit nur einem "=", aber weil die Variable zu genau sein könnte, war meine Frage, ob man die runden könnte :P
HenryHux - Do 28.04.11 13:40
Ja aber wenn du nach 6h den CountDown aktivieren willst ohne eine boolean zu setzen, dann wird 5:30 - 6:29 auf 6 Stunden gerundet =)
Wenn du nur Sekunden rundest, ist es das gleiche in Grün.
lg
beastofchaos - Do 28.04.11 13:50
jaenicke hat folgendes geschrieben : |
Von allem anderen abgesehen: Fließkommazahlen mit = zu vergleichen ist ohnehin keine gute Idee durch die Ungenauigkeiten bei Berechnungen... |
Mir fällt grad auf, dass er recht hat. Hier gibts es in der Zeitanzeige sicher keine Millisekunden mit drinnen, deswegen muss das doch auf gehen, und TDate ist doch keine Fließkommzahl. Also braucht man auch nicht runden. Einfach ein "=" und das wars :)
Bergmann89 - Do 28.04.11 14:04
Hey,
[ignore]
guckst du
hier [
http://tinyurl.com/6xq84ty]
und normalerweiße gilt folgendes:
1. Google fragen
2. Forensuche fragen
3. neue Frage neues Topic
;)
[/irgnore]
€: Mist, es gibt ja noch ne 2. Seite xD
MfG Bergmann
jaenicke - Do 28.04.11 14:26
beastofchaos hat folgendes geschrieben : |
und TDate ist doch keine Fließkommzahl |
Irrtum... :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!