Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wecker klingelt nicht (https://www.delphipraxis.net/3106-wecker-klingelt-nicht.html)

CalganX 23. Feb 2003 17:08


Wecker klingelt nicht
 
Hi,
ich habe nun mal wieder ein etwas größeres Problem: ich bin derzeit dabei eine Art Wecker zu schreiben. Leider funktioniert das ganze nicht so, wie ich will.
Der Timer(tmTimer) steht auf 1000. Im Ontimer-Ereignis:
Delphi-Quellcode:
procedure TMainFrm.tmTimerTimer(Sender: TObject);
begin
  if Now = FDateTime then begin
    CoolTrayIcon1.ShowBalloonHint('CSD » Alarm', 'Sie wollten um diese Uhrzeit informiert werden!'+#13#10+'Es ist nun '+TimeToStr(FTime)+' Uhr!', bitInfo, 60);
(* CoolTrayIcon1 ist eine Komponente für ein TrayIcon in der TNA *)
    tmTimer.Enabled := false;
    btnStart.Enabled := true;
  end;
end;
Im OnClick des Start-Buttons (btnStart):
Delphi-Quellcode:
procedure TMainFrm.btnStartClick(Sender: TObject);
begin
  FDate := dtpDate.Date;
  FTime := dtpTime.Time;
  FDateTime := StrToDateTime(DateToStr(FDate) + ' ' + TimeToStr(FTime));
  Caption := DateTimeToStr(FDateTime); // zu Testzwecken
  tmTimer.Enabled := true;

  btnStart.Enabled := false;
end;
Nun ist das Problem, dass zwar die Caption richtig gesetzt wird, allerdings zur ausgewählten Uhrzeit nichts passiert. Der Button bleibt einfach disabled.
Hat dazu jemand eine Idee, warum?
Wenn Bedarf besteht hänge ich gerne auchmal der kompletten Source dran...

Chris

Frodo 23. Feb 2003 17:16

hi,
villeicht musst du prüfen ob die weckzeit bereits erreicht bzw. überschritten ist.
if now >= Weckzeit
du prüfst ob die weckzeit identisch ist mit der aktuellenzeit.
gruß,..

CalganX 23. Feb 2003 17:19

Hi,
eigentlich wollte ich diese Möglichkeit unterbinden, aber da es wohl doch die einzige Möglichkeit ist... Na gut. Aber es würde mich interressieren, warum das so ist...

Chris

Frodo 23. Feb 2003 17:24

hi nochmal,
weil es nunmal so ist :-)
nein im ernst ich glaub es liegt daran das win ein multitask betriebssystem ist. deshalb kann es gut möglich sein das wenn das ereignis ausgelöst wird und du dann überprüfst wie spät es jetzt ist, die zwei werte sich schon wider unterscheiden.

czapie 23. Feb 2003 20:30

HI
 
Hi,

ich hatte mal ein Programm geschrieben, welches den Pc zu einer bestimmten Zeit herunterfährt, und da habe ich die aktuelle Zeit und die "Herunterfahr-Zeit" jeweils in ein Edit oder Status Feld geladen und diese dann mit "=" verglichen (also Feld.caption), und das ging ohne Probleme. allerdings hats nicht geklappt diese Zeiten beide miteinander direkt zu vergleichen!

Czapie.

Sharky 24. Feb 2003 08:18

Zitat:

Zitat von Chakotay1308
... Na gut. Aber es würde mich interressieren, warum das so ist...

Hai Chris,

überlege doch einmal genau was Du machst:

1. Du sagst Deinem Programm das Du z.B. um genau 12:00:00 Uhr geweckt werden möchtest.

2. Jetzt prüfst du jede Sekunde die aktuelle Uhrzeit.

3. Dein Timerevent wird eventuell aber erst um 12:00:01 ausgelöst (selbst eine Milisekunde zu spät würde reichen! Schließlich prüfst Du ja auf exakte übereinstimmung von zwei Zeiten.

und eine msec nach 12 ist halt nicht genau 12 :lol:

Achja:

Delphi-Quellcode:
FDateTime := StrToDateTime(DateToStr(FDate) + ' ' + TimeToStr(FTime));
müsste auch so gehen:

Delphi-Quellcode:
FDateTime := FDate + FTime;

lodda 24. Feb 2003 08:50

Hallo Chakotay 1308

ich glaube dass die Teimerbotschaft schon pünktlich ausgelöst wird. Das Problem ist nur, das Timerbotschaften eine sehr geringe Priotrität haben. Das heißt, dass die Botschaft eine Weile in der Warteschlange steht, bevor sie abgearbeitet wird. Bis dahin ist aber schon eine gewisse Zeit vergangen.

Motzi 24. Feb 2003 09:08

Zitat:

Zitat von lodda
Das Problem ist nur, das Timerbotschaften eine sehr geringe Priotrität haben.

Korrekt... genau genommen sind die Timer-Messages sogar die Messages mit der niedrigsten Priorität. Dh falls noch andre Messages in der Message-Queue vorhanden sind werden diese auf jeden Fall den Timer-Messages vorgezogen.

CalganX 24. Feb 2003 12:59

Wie kann man einem Ti´mer eine höhere Priorität zuweisen??

Chris

nailor 24. Feb 2003 13:04

falls du nix wirklich sehr wichtiges vor hast, ist es doch *** egal, ob der Wecker jetzt um 12:00:00,001 oder um 12:00:00,000 "hochgeht". Das dein Betriebssystem deine Anfrage innerhalb von 1ms bearbeitet kannst du wohl vergessen. Da brauchst du schon ein Realtime OS. Und auch die garantieren glaub ich nur ne Zeit von 40ms.

Also ">=" :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.
Seite 1 von 2  1 2      

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