Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Mehrere Zeitabfragen im Timer, wie? (https://www.delphipraxis.net/181634-mehrere-zeitabfragen-im-timer-wie.html)

Codix32 30. Aug 2014 18:03

Delphi-Version: 2005

Mehrere Zeitabfragen im Timer, wie?
 
Hallo,

kann man in einem Timer mehrere Zeitabgleiche machen?

Nehmen wir an ich habe eine Listbox mit mehreren Items:

13:50 Blabla
13:50 Herd ausschalten
13:52 Text
14:00 Text
15:33 Text
16:10 usw

Ist zum Beispiel 13:50 erreicht, soll eine Meldung erscheinen.
Wenn ich Items in ein dynamisches Array einlese, kann ich im Timer die Zeiten in einer Schleife abfragen?
Oder gibt es eine Alternative zur Timer Komponenten?

zeras 30. Aug 2014 18:24

AW: Mehrere Zeitabfragen im Timer, wie?
 
Du kannst durch die Listbox durchsteppen mit Listbox.items[x]. Anzahl mit items.count.
Vielleicht hilft das.

Medium 30. Aug 2014 18:42

AW: Mehrere Zeitabfragen im Timer, wie?
 
Ich verstehe hier das Problem nicht so wirklich muss ich gestehen. Um die konkrete Frage zu beantworten: Ja, man kann natürlich im Timer-Event auch eine Schleife nutzen. Das hätte man aber auch ausprobieren können. Ich vermute hier aber eigentlich eine andere Fragestellung, nur leider fehlt diese und wir müssten raten.

Codix32 30. Aug 2014 19:10

AW: Mehrere Zeitabfragen im Timer, wie?
 
Zitat:

Zitat von Medium (Beitrag 1270340)
Ich verstehe hier das Problem nicht so wirklich muss ich gestehen. Um die konkrete Frage zu beantworten: Ja, man kann natürlich im Timer-Event auch eine Schleife nutzen. Das hätte man aber auch ausprobieren können. Ich vermute hier aber eigentlich eine andere Fragestellung, nur leider fehlt diese und wir müssten raten.

In etwa so:
Delphi-Quellcode:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  aTime,bTime: TDateTime;
  str:string;
begin
 aTime := Time;

 {Timerintervall ist 1000 Kann ich hier die gesamten Intems in einer Sekunde durchgehen?}
 for i := 0 to (Listbox1.count-1) do
   begin
     bTime:= TrimLeft(copy(Listbox1.Items[i],1,8)); //<- (13:50:00  Blabla)
     If aTime >= bTime then
       begin
         inc(iFlag); //<- global
           if iFlag = 1 then
           begin
            Label4.Caption:= Listbox1.items[i];
            iFlag:=0;
           end;
       end;
   end;
end;
Gibt es da keinen besseren Ansatz?

Sir Rufo 30. Aug 2014 19:30

AW: Mehrere Zeitabfragen im Timer, wie?
 
Ja es gibt einen besseren Ansatz.
  • Benutze die Listbox ausschliesslich zur Anzeige
  • Merke die einzelnen Zeitpunkte in einer Liste
  • Mit dieser Liste kannst du die Anzeige für die Listbox füttern
  • Gehe durch die Liste und prüfe ob ein Zeitpunkt <= der aktuellen Uhrzeit ist und die letzte Signalisierung < der aktuellen Zeit (Datum+Zeit)
Wegen der Zeitdauer (geht das innerhalb einer Sekunde) brauchst du dir eigentlich keine Sorgen machen (wenn du zwischendurch nicht noch die Quadratur des Kreises berechnen willst).

Namenloser 30. Aug 2014 19:31

AW: Mehrere Zeitabfragen im Timer, wie?
 
Delphi-Referenz durchsuchenStrToTime? :glaskugel:

Codix32 30. Aug 2014 19:46

AW: Mehrere Zeitabfragen im Timer, wie?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1270352)
Ja es gibt einen besseren Ansatz.
  • Benutze die Listbox ausschliesslich zur Anzeige
  • Merke die einzelnen Zeitpunkte in einer Liste
  • Mit dieser Liste kannst du die Anzeige für die Listbox füttern
  • Gehe durch die Liste und prüfe ob ein Zeitpunkt <= der aktuellen Uhrzeit ist und die letzte Signalisierung < der aktuellen Zeit (Datum+Zeit)
Wegen der Zeitdauer (geht das innerhalb einer Sekunde) brauchst du dir eigentlich keine Sorgen machen (wenn du zwischendurch nicht noch die Quadratur des Kreises berechnen willst).

Ich grüße Dich Sir Rufo,

Also das Formular soll nach dem Start in der Taskleiste liegen.
Wenn in der Liste zum Beispiel '13:00 Putin wegen zu hohem Gaspreis anrufen' steht, soll ein Fenster oder eine MessageBox um 13:00 Uhr auf dem Desktop erscheinen und diese Meldung oder wenn es mehrere 13:00 Ereignisse gibt, diese anzeigen.

Codix32 30. Aug 2014 19:56

AW: Mehrere Zeitabfragen im Timer, wie?
 
Zitat:

Zitat von Namenloser (Beitrag 1270353)
Delphi-Referenz durchsuchenStrToTime? :glaskugel:

Ok:
Delphi-Quellcode:
   bTime:= StrtoTime(TrimLeft(copy(Listbox1.Items[i],1,8))); //<- (13:50:00 Blabla)

Olli73 30. Aug 2014 20:10

AW: Mehrere Zeitabfragen im Timer, wie?
 
Wenn du alle aktuellen Ereignisse abgearbeitet hast, dann könntest du auch einfach prüfen, wann das nächste Ereignis eintritt und das Timerintervall entsprechend setzen.

Gruß
Olli

Sir Rufo 30. Aug 2014 20:11

AW: Mehrere Zeitabfragen im Timer, wie?
 
Zitat:

Zitat von Codix32 (Beitrag 1270358)
Ich grüße Dich Sir Rufo,

Also das Formular soll nach dem Start in der Taskleiste liegen.
Wenn in der Liste zum Beispiel '13:00 Putin wegen zu hohem Gaspreis anrufen' steht, soll ein Fenster oder eine MessageBox um 13:00 Uhr auf dem Desktop erscheinen und diese Meldung oder wenn es mehrere 13:00 Ereignisse gibt, diese anzeigen.

Öhm ja, mach doch einfach, es sollte nur den Timer nicht blockieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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