![]() |
Zu einer bestimmten Uhrzeit Aktion ausführen!
Hiho Leute
ich möchte ein Programm programmieren, mit dem ich, nach einer vorher eingegebenen Uhrzeit eine Aktion (in meinem Fall die DFÜ-Verbindun getrennt) ausgeführt wird! Jetzt würde ich gern wissen, wie ich das verwirklichen soll !?! also danke im Vorraus bis dann Trouble_Maker :D |
Hi,
ich würde vorschlagen, dass du einen Timer nimmst und diesen auf 1sek. einstellst und im OnTimer-Ereignis abfragst, ob die Uhrzeit die derzeit ist. Chris |
Und wie mach ich das mit dem On-Timer-Ereignis ?!?
Sorry aber ich bin Noob! Danke Trouble_Maker |
Hi. Beispiel:
Delphi-Quellcode:
Chris
// Im Create-Event des Forms:
Timer1.Enabled := true; // Doppelklick auf den Timer und ins Event schreiben: if Now >= eineZeitMarke then begin // tu' was! end; |
Zitat:
Mal angenommen, ich will das ganze um genau 9.01 starten lassen.... wie schreib ich das da hin? bei:
Code:
führt er den Befehl sofort aus
if Now >= 09.01 then begin
.... bei:
Code:
kommt ein Fehler
if Now >= 09:01 then begin
.... |
Welcher Fehler? Ungültige Uhrzeit? Zu einer Uhrzeit gehören auch noch die Sekunden.
So geht's:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if now > StrToTime('08:52:00') then Showmessage(''); end; |
WIE muss ich das dann schreiben?
09:01:00 oder 09.01.00 (dann beginnt er sofort mit dem, was er machen soll) :coder: |
*push*
|
Wenn ich das ganze SO mache:
Code:
zeigt er mir sofort die message
procedure TForm1.Timer1Timer(Sender: TObject);
begin if now > StrToTime('09:15:00') then begin Showmessage('es ist jetzt 9:11 Uhr'); end; timer1.enabled:=false; end; und es war erst 8:58 Die Uhr in der Taskleiste zeigt diese Zeit an! |
Mist, war ich zu schnell?
|
wie? was meinst du mit "zu schnell"`??
is bei mir ein fehler drin? |
Ich habe es nur kurz ausprobiert und es ging zufälligerweise.
|
was heisst "zufälligerweise"? wars genau die uhrzeit, oder warum??
irgendwie muss man doch die zeit angeben können!! :freak: |
So rum geht es. Frag mich aber bitte nicht warum. :wiejetzt:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin caption := TimeToStr(now); if TimeToStr(now) >= '09:08:40' then begin timer1.enabled:=false; Showmessage(TimeToStr(now)); end; end; |
HÄ???
warum läuft oben denn die zeit mit und stoppt soblat der wert erreicht is... (melde mich gegen 16:00 Uhr wieder...vielleicht hab ich dann ne lösung) |
Zitat:
|
also, in der titalleiste läuft die zeit mit und wenn die gewünschte zeit erreicht ist... stoppt die zeit oben, die message erscheint und das wars! das verstehe ich schon, aber funktionierts so und nicht so, wie wir es vorher vorhatten?!
wie bekomme ich es denn hin, dass ich die zeit in einen edit eingeben kann und der diese zeit dann nimmt, oder aus einem memo? |
Ersetzt den hardgecodeten String mit der Uhrzeit doch einfach durch eine Variable oder gleich durch Edit1.Text.
Wie gesagt, wenn ich die aktuelle Zeit in einen String konvertiere und das mit einem String vergleiche geht es. Konvertiere ich den String in eine Uhrzeit geht es nicht. Ich weiß auch nicht warum. |
hmm, ja komisch komisch'!
DANKE... jetzt kann ich weiterarbeiten :coder: :coder: |
Hallo
Es gibt drei Funktionen, die mir auf Anhieb einfallen und für das Problem interessant sind: date: liefert den aktuellen Tag (gerechnet ab 30.12.1899) time: liefert die Zeit als Bruchteil eines Tages seit Mitternacht now: liefert Tag und Zeit beispiel date: gibt auf meinem PC für heute 37693.0 zzurück time: gibt für beispielsweise 9:00 den Wert 0.375 zurück now: heutige Tag 9:00 liefert 37693.375 Die drei Funktionen liefern als Ergebnis TDateTime, was in Wirklichkeit Double ist, und zwar Tage vor dem Komma (bzw. Punkt) und Uhrzeit danach. Wenn Du also if now > StrToTime('09:15:00') kodierst, vergleichst Du heutiges Datum/Uhrzeit mit 9:15 30.12.1899, und das ist ziemlich lange vorbei. timetostr und strtotime finde ich in dem Zusammenhang auch nicht so gut, da daß davon abhängt, wie Delphi Deinen String interpretiert, und daß ist vom System abhängig. Lösungvorschlag: Zeit in double umrechen 9:15 entspricht ((9 * 60) + 15) / 1440 und mit time vergleichen Viele Grüße |
Hi Leute!
cool... ihr habt mir auf jeden Fall schonmal weitergeholfen!!! Danke! Jetzt würde ich nur noch gern wissen, wie ich eine bestimmte Uhrzeit eingeben kann, und zu dieser Uhrzeit soll er z.B. eine Message ausführen! Wär echt nett, wenn ihr mir das noch sagen könntet! Danke Trouble_Maker |
Hoi, das hat Luckie doch schon gesagt:
Ersetzte die Uhrzeit durch Edit1.text.
Delphi-Quellcode:
Jetzt musst du im EDIT1 die Uhrzeit im Format HH:MM:SS (z.B. 16:31:55) reinschreiben und fertig.
procedure TForm1.Timer1Timer(Sender: TObject);
begin if TimeToStr(now) >= Edit1.text then begin timer1.enabled:=false; Showmessage(TimeToStr(now)); // Hier die Message, hier die genau Uhrzeit end; end; |
Zitat:
|
Wie mach ich das, dass wenn ein programm im Hintergrund läuft zu einer bestimmten zeit etwas ausgeführt wird??? Gibt es bessere Möglichen keiten als eine Schleife die immer durchläuft??
|
Zitat:
|
Hi Leute
Ich weiß jetzt nicht ob es euch hilft ,aber ich habe das mal bei mir rausgekramt...
Delphi-Quellcode:
{
Zeit rückwärts laufen lassen um 1 Stunde und Aktion ausführen } var Zeit : integer = 3600; //60 x 60 Sekunden procedure DoSomething; begin Windows.Messagebox(0, 'Der Computer wird in 15 Minuten heruntergefahren!','ACHTUNG', MB_OK or MB_ICONINFORMATION); end; procedure TForm1.Timer1Timer(Sender: TObject); begin dec(Zeit); case Zeit of 900 : DoSomething; //15 Minuten 0 : ExitWindowsEx(EWX_SHUTDOWN,0); end; Label1.Caption := Format('%0.2d:%0.2d:%0.2d',[Zeit div 3600,Zeit div 60,Zeit mod 60]); end; |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Die Idee mit dem Timer ist schon richtig. Jetzt ist die große Frage, wo die Software verwendet werden soll. In Deutschland arbeitet man (normalerweise) im 24h Zeitmodus. Die Zeit sieht also so aus: HH:mm:ss In anderen Ländern kann das wieder anders aussehen, weil z.T. auch der 12h-Modus mit AM / PM verwendet wird. Für die reine lokale Verwendung kannst du folgenden Code nehmen:
Delphi-Quellcode:
In diesem Code stellt die Variable "Zeit" die gewünschte Zeit dar und "aktZeit" ist die aktuelle Zeit.
procedure TForm1.Timer1Timer(Sender: TObject);
var zeit, aktzeit : string; begin Zeit := '09:45'; //Timer um 9:45 Uhr auslösen delete(zeit,3,1); //Doppelpunkt löschen aktZeit := TimeToStr(Time); //aktuelle Zeit in String konvertieren (In D.: HH:mm:ss) delete(aktZeit,3,1); //ersten Doppelpunkt löschen delete(aktZeit,5,length(zeit)-4); //alles nach den Minuten löschen if StrToInt(aktZeit) >= StrToInt(Zeit) //Uhrzeiten werden als Integerwerte behandelt then begin //Anweisungen end; end; Und wie schon gesagt: Diese Methode läuft nur dann, wenn der PC im 24h-Modus arbeitet! |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Zitat:
|
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Zitat:
Mit den richtigen Befehlen kannst du Stunden, Minuten und Sekunden einzeln abfragen und dann nach deinen eigenen Bedürfnissen zusammensetzen oder gleich weiterverwenden. :spin: |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
um die verwirrung noch ein bischen größer zu machen, hab ich auch ne (für meines erachtens) lösung für die eigentliche frage dieses thema:
Delphi-Quellcode:
feine sache. funktioniert sehr gut und ist leicht verständlich. :dance:
if FormatDateTime ('hh:nn:ss', Now) = '10:45:00' then beep;
|
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Zitat:
in diesem Fall musst Du aber garantieren das deine Abfrage genau zu dieser Zeit ausgeführt wird. Sollte es 10:45:01 sein war´s das mit dem beep. |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
oh, sorry, hab vergessen den umfang zu posten.
der code steht im timer drin. das schaut dann so aus:
Delphi-Quellcode:
procedure Tfrm_Main.Timer4TimeTimer(Sender: TObject);
begin sb_dynamic.Panels[6].Text:= FormatDateTime ('hh:nn', Now) + ' Uhr'; if FormatDateTime ('hh:nn:ss', Now) = '10:45:00' then beep; end; |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Zitat:
|
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Nix ist dann. Dann passiert nämlich nichts. Reine Glückssache und daher nicht zu empfehlen :lol:
Aber mal im Ernst: Ist die einzige Möglichkeit zu einer Uhrzeit ein Event auszulösen die, einen Timer mitlaufen zu lassen? Dann ackert das Programm jede Sekunde die Abfrage durch, 24h lang, bis das Ereignis Eintritt? Das muss doch einfacher gehen... :gruebel: |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Also, wenn schon Timer, dann würde ich so ansetzen:
Beim Start des Programms Prüfen, wie lange es noch bis zum nächsten Ereignis ist. Die Zeit des Timers auf einen Wert <Ereigniszeit> - now - 10% ( TTimer ist nicht sehr genau, daher 10 % ) setzen und Timerstart. Im Timerereignis prüfen, ob der Zeitpunkt überschritten ist. Wenn ja: Äktschn; wenn Nein: wieder Timerzeite:= <Ereigniszeit> - now - 10%. Und so weiter... Vielleicht könnte man noch bei einer "Entfernung" von der Ereigniszeit < 1 Minute die 10 % weglassen. Jedenfalls wird auf diese Weise das Timereignis in einem 10 Std. Zeitraum vielleicht 3 bis 5 mal durchlaufen. Bei einer festen Timerzeit von 1 sek wären es 36.000 mal. Achja, der Vergleich sollte auf jeden Fall mit den Datetime-Werten passieren, nicht mit Strings. Und dann mit ">" nicht mit "=". Allerdings kann das mit den Timern nicht das Optimum sein. Bestimmt geht das auch irgendwie mit den Ticks, nur hab ich damit noch nie was gemacht. |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
wenn du . satt : nimmst, denkt Delphidu meinst ein Datum !
|
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Zitat:
Worauf willst du hinaus? Verstehe den Zusammenhang nicht... :gruebel: |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Liste der Anhänge anzeigen (Anzahl: 1)
Mal ein anderer Ansatz - Zeit bis zur Aktion ausrechnen und dann einen Timer mit dieser starten.
Mein Beispiel schafft von 1 Sekunde bis 49,7 Tage. Hab' mal die Timer-Komponente dafür missbraucht. |
Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
Moin Zusammen,
solange man sich auf der NT Schiene bewegt, könnte man das Problem ja auch Windows übertragen, indem man dem Scheduler einen entsprechende Job zukommen lässt (NetScheduleJobAdd). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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