![]() |
Re: Timerabruf (Timer2) bei Timerablauf (Timer1)
Hallo Svenkan,
mir sind jetzt noch ein paar Gedanken gekommen; die möchte ich mit meinen früheren Vorschlägen zusammenfassen. 1. Einmalige Maßnahmen gehören in den Aufbau des Formulars. Also interval bestimmen, today, tomorrow 2. Anzeige aktualisieren gehört in eigene Prozeduren:
Delphi-Quellcode:
3. Daten einlesen gehört in eine eigene Prozedur.
procedure MyForm.StringGrid1Zeigen(dieseSeite: integer);
begin ... end; procedure MyForm.StringGrid2Zeigen(dieseSeite: integer); begin ... end; Hier werden auch die Einstellungen vorgenommen, die nur dafür geändert werden müssen:
Delphi-Quellcode:
4. Die Timer-Aktion reduziert sich auf einen Verteiler.
procedure MyForm.NeueDatenEinlesen;
begin // Einstellungen auf "Einlesen" umschalten PageControl1.TabIndex := 2; Label5.Caption:='Meldungen'; Label6.Caption:=''; TimerNextTab.Enabled := false; // Daten einlesen ... // erste Seite zur Anzeige vorbereiten AktuSeite := 0; StringGrid1Zeigen((0); // Einstellungen auf "Anzeigen" umschalten Label5.Caption:='Vertretungsplan für den'; Label6.Caption:=DatetoStr(tomorrow); PageControl1.TabIndex := 0; // und natürlich das Umschalten aktivieren TimerNextTab.Enabled := true; end; Das ist unbedingt die wichtigste Änderung, die Du vornehmen musst!
Delphi-Quellcode:
Ich habe die Unterscheidungen bei AktuSeite(a) und GesSeiten(a) nach wie vor nicht verstanden. Weil das interval der beiden Timer gleich ist, verstehe ich auch nicht, warum Du zwei Timer haben willst.
procedure TForm2.TimerNextTabTimer(Sender: TObject);
begin case PageControl1.TabIndex of 0: begin PageControl1.TabIndex := 1; StringGrid2Zeigen(AktuSeite); 1: if (AktuSeite < GesSeiten) then begin Inc(AktuSeite); StringGrid1Zeigen(AktuSeite); PageControl1.TabIndex := 0; end else begin NeueDatenEinlesen; end; 2: // kommt eigentlich wegen NeueDatenEinlesen gar nicht mehr vor, // aber vielleicht ergibt sich noch etwas, deshalb dummy-Code: begin end; end; Versuch doch einmal eine solche Struktur und berücksichtige meine Bemerkungen im letzten Post. Jürgen |
Re: Timerabruf (Timer2) bei Timerablauf (Timer1)
Hallo Svenkan,
noch ein Gedanke, wenn Du wirklich zwei Timer nutzen willst. Das kann sinnvoll sein, wenn ihr Intervall ziemlich unterschiedlich festgelegt wird (z.B. 15 Minuten für Reload und 10 Sekunden für NextTab). TimerReload wird aktiviert (Enabled := true), nachdem die Daten eingelesen wurden, d.h. am Ende der Prozedur NeueDatenEinlesen. TimerReloadOnTimer macht nichts anderes als sich zu deaktivieren: TimerReload.Enabled := false; Die Prüfung innerhalb NextTab wird einfach erweitert, ob TimerReload abgelaufen ist oder nicht, d.h. ob er noch aktiviert ist:
Delphi-Quellcode:
Jürgen
procedure TForm2.TimerNextTabTimer(Sender: TObject);
begin case PageControl1.TabIndex of 0: begin PageControl1.TabIndex := 1; StringGrid2Zeigen(AktuSeite); 1: if ((AktuSeite < GesSeiten) or TimerReload.Enabled) // die vorstehende Abfrage wird erweitert then begin // wenn TimerReload noch läuft, dann zurück zu Seite 0 if (AktuSeite < GesSeiten) then Inc(AktuSeite) else AktuSeite := 0; StringGrid1Zeigen(AktuSeite); // alles andere bleibt wie gehabt PS. Ich weiß nicht, ob Du meine vorigen Beiträge bereits gelesen hast; deshalb trage ich es als neuen Beitrag ein. |
Re: Timerabruf (Timer2) bei Timerablauf (Timer1)
Also grundsätzlich gibt es kaum Gründe mehr als einen Timer pro Anwendung zu verbauen.
Es sei denn man braucht ab und zu einen hochauflösenden Timer und ansonsten einen nicht so hoch auflösenden Timer. Warum lehrt man in der Schulde schon GUI Programmierung bevor die Programmierprache beherrscht wird? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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