AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Timerabruf (Timer2) bei Timerablauf (Timer1)
Thema durchsuchen
Ansicht
Themen-Optionen

Timerabruf (Timer2) bei Timerablauf (Timer1)

Offene Frage von "Svenkan"
Ein Thema von Svenkan · begonnen am 19. Mai 2007 · letzter Beitrag vom 21. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#11

Re: Timerabruf (Timer2) bei Timerablauf (Timer1)

  Alt 20. Mai 2007, 10:35
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:
procedure MyForm.StringGrid1Zeigen(dieseSeite: integer);
begin
  ...
end;
procedure MyForm.StringGrid2Zeigen(dieseSeite: integer);
begin
  ...
end;
3. Daten einlesen gehört in eine eigene Prozedur.
Hier werden auch die Einstellungen vorgenommen, die nur dafür geändert werden müssen:
Delphi-Quellcode:
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;
4. Die Timer-Aktion reduziert sich auf einen Verteiler.
Das ist unbedingt die wichtigste Änderung, die Du vornehmen musst!
Delphi-Quellcode:
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;
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.

Versuch doch einmal eine solche Struktur und berücksichtige meine Bemerkungen im letzten Post. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#12

Re: Timerabruf (Timer2) bei Timerablauf (Timer1)

  Alt 21. Mai 2007, 09:14
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:
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
Jürgen

PS. Ich weiß nicht, ob Du meine vorigen Beiträge bereits gelesen hast; deshalb trage ich es als neuen Beitrag ein.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#13

Re: Timerabruf (Timer2) bei Timerablauf (Timer1)

  Alt 21. Mai 2007, 10:40
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?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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