Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zu einer bestimmten Uhrzeit Aktion ausführen! (https://www.delphipraxis.net/3416-zu-einer-bestimmten-uhrzeit-aktion-ausfuehren.html)

Trouble_Maker 11. Mär 2003 18:30


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

CalganX 11. Mär 2003 18:32

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

Trouble_Maker 11. Mär 2003 18:42

Und wie mach ich das mit dem On-Timer-Ereignis ?!?
Sorry aber ich bin Noob!

Danke


Trouble_Maker

CalganX 11. Mär 2003 18:52

Hi. Beispiel:
Delphi-Quellcode:
// Im Create-Event des Forms:
  Timer1.Enabled := true;

// Doppelklick auf den Timer und ins Event schreiben:
  if Now >= eineZeitMarke then begin
    // tu' was!
  end;
Chris

Chriss 13. Mär 2003 08:40

Zitat:

Zitat von Chakotay1308
Hi. Beispiel:
Delphi-Quellcode:
// Im Create-Event des Forms:
  Timer1.Enabled := true;

// Doppelklick auf den Timer und ins Event schreiben:
  if Now >= eineZeitMarke then begin
    // tu' was!
  end;
Chris

Hi!

Mal angenommen, ich will das ganze um genau 9.01 starten lassen....
wie schreib ich das da hin?
bei:
Code:
if Now >= 09.01 then begin
....
führt er den Befehl sofort aus
bei:
Code:
if Now >= 09:01 then begin
....
kommt ein Fehler

Luckie 13. Mär 2003 08:47

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;

Chriss 13. Mär 2003 08:52

WIE muss ich das dann schreiben?

09:01:00
oder
09.01.00 (dann beginnt er sofort mit dem, was er machen soll) :coder:

Luckie 13. Mär 2003 08:52

*push*

Chriss 13. Mär 2003 09:00

Wenn ich das ganze SO mache:

Code:
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;
zeigt er mir sofort die message

und es war erst 8:58

Die Uhr in der Taskleiste zeigt diese Zeit an!

Luckie 13. Mär 2003 09:01

Mist, war ich zu schnell?

Chriss 13. Mär 2003 09:02

wie? was meinst du mit "zu schnell"`??

is bei mir ein fehler drin?

Luckie 13. Mär 2003 09:06

Ich habe es nur kurz ausprobiert und es ging zufälligerweise.

Chriss 13. Mär 2003 09:08

was heisst "zufälligerweise"? wars genau die uhrzeit, oder warum??

irgendwie muss man doch die zeit angeben können!! :freak:

Luckie 13. Mär 2003 09:09

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;

Chriss 13. Mär 2003 09:14

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)

Luckie 13. Mär 2003 09:17

Zitat:

Zitat von Chriss
HÄ???
warum läuft oben denn die zeit mit und stoppt soblat der wert erreicht is...

Was ist denn jetzt kaputt? Ich lasse nur die Zeit in der Titelleiste anzeigen, zur Kontrolle. Und warum das anhält? Also jetzt stellst du aber echt dämliche Frage. Kuck dir den Code noch mal genau an - bitte!

Chriss 13. Mär 2003 09:53

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?

Luckie 13. Mär 2003 09:56

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.

Chriss 13. Mär 2003 10:09

hmm, ja komisch komisch'!
DANKE... jetzt kann ich weiterarbeiten :coder: :coder:

Delphianer 13. Mär 2003 10:29

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

Trouble_Maker 13. Mär 2003 15:38

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

RomanK 13. Mär 2003 16:32

Hoi, das hat Luckie doch schon gesagt:
Ersetzte die Uhrzeit durch Edit1.text.
Delphi-Quellcode:
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;
Jetzt musst du im EDIT1 die Uhrzeit im Format HH:MM:SS (z.B. 16:31:55) reinschreiben und fertig.

Luckie 13. Mär 2003 18:49

Zitat:

Zitat von Delphianer
Wenn Du also
if now > StrToTime('09:15:00')
kodierst, vergleichst Du heutiges Datum/Uhrzeit mit 9:15 30.12.1899,

*P A T S C H*

Jazz 26. Mai 2003 11:02

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??

Luckie 26. Mai 2003 12:43

Zitat:

Zitat von Jazz
Gibt es bessere Möglichen keiten als eine Schleife die immer durchläuft??

Einen Timer? :roll:

City Light 26. Mai 2003 13:27

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;

daniel-volk 16. Jul 2003 17:05

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:
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;
In diesem Code stellt die Variable "Zeit" die gewünschte Zeit dar und "aktZeit" ist die aktuelle Zeit.
Und wie schon gesagt: Diese Methode läuft nur dann, wenn der PC im 24h-Modus arbeitet!

Uncle Cracker 16. Jul 2003 17:10

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
Zitat:

Zitat von daniel-volk
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:

Man kann ja unter Optionen den Uhrzeittyp bestimmen lassen, oder man kann die Systemsprache erkennen und dann anders mit der Zeit arbeiten.

daniel-volk 16. Jul 2003 17:19

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
Zitat:

Zitat von Uncle Cracker
Man kann ja unter Optionen den Uhrzeittyp bestimmen lassen, oder man kann die Systemsprache erkennen und dann anders mit der Zeit arbeiten.

Logisch kannst du das, wäre aber viel zu aufwendig. Wenn du dir den Aufwand machen willst um mit unterschiedlichen Uhrzeiten unterschiedlich zu arbeiten, dann durchsuchst du ieber das Internet nach Befehlen für Zeit und Daten.
Mit den richtigen Befehlen kannst du Stunden, Minuten und Sekunden einzeln abfragen und dann nach deinen eigenen Bedürfnissen zusammensetzen oder gleich weiterverwenden.

:spin:

markon 31. Okt 2003 10:50

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:
 if FormatDateTime ('hh:nn:ss', Now) = '10:45:00' then beep;
feine sache. funktioniert sehr gut und ist leicht verständlich. :dance:

Sharky 31. Okt 2003 10:53

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
Zitat:

Zitat von markon
....
Delphi-Quellcode:
 if FormatDateTime ('hh:nn:ss', Now) = '10:45:00' then beep;
....

Hai markon,

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.

markon 31. Okt 2003 10:56

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;

Sharky 31. Okt 2003 11:08

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
Zitat:

Zitat von markon
...
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;

Und was wenn denn der Timer jetzt erst um 10:45:01 auslöst?

Treffnix 31. Okt 2003 11:21

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:

Treffnix 31. Okt 2003 11:34

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.

MrKnogge 31. Okt 2003 11:55

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
wenn du . satt : nimmst, denkt Delphidu meinst ein Datum !

Treffnix 31. Okt 2003 12:06

Re: Zu einer bestimmten Uhrzeit Aktion ausführen!
 
Zitat:

Zitat von MrKnogge
wenn du . satt : nimmst, denkt Delphidu meinst ein Datum !

:wiejetzt:
Worauf willst du hinaus? Verstehe den Zusammenhang nicht... :gruebel:

himitsu 31. Okt 2003 12:39

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.

Christian Seehase 31. Okt 2003 13:10

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