Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Über Timer Stringlist 'weiterschalten' (https://www.delphipraxis.net/92299-ueber-timer-stringlist-weiterschalten.html)

Svenkan 28. Mai 2007 18:38

Re: Über Timer Stringlist 'weiterschalten'
 
Ich hab das jetzt ja in den normalen Timer mit reingesetzt, wo auch dann nach im Moment 10s gewechselt wird.
Die erste Seite wird ganz normal aufgerufen.
Vorher wurde die Funktion GetData nur im FormCreate ausgeführt, da hats funktioniert (es wurden nur leider dann die Sachen geladen, die zu dem Zeitpunkt in der .dbf waren).
Oder kann es sein, dass irgendwie etwas wieder freigegeben werden muss?

DeddyH 28. Mai 2007 18:41

Re: Über Timer Stringlist 'weiterschalten'
 
Ohne den Source zu kennen, kann ich da nichts zu sagen. :zwinker:

Svenkan 28. Mai 2007 18:44

Re: Über Timer Stringlist 'weiterschalten'
 
(bitte nicht wieder wg. Einrückung schlagen :oops:)

GetData-Procedure:

Delphi-Quellcode:
procedure TForm2.GetData;
var  y,ya: Integer;
begin
Label7.Caption:=TimeToStr(Time);
Label8.Caption:=DateToStr(Now);
if not (Query1.RecordCount=0) then begin
 SetLength(Daten,Query1.RecordCount);

  for y:=1 to Query1.RecordCount do begin
    daten[y-1].klasse:=Query1.FieldByName('KLASSEN').AsString;
    daten[y-1].stunde:=Query1.FieldByName('S').AsString+'.';
    daten[y-1].fuer:=Query1.FieldByName('FUER').AsString;
    daten[y-1].wer:=Query1.FieldByName('WER').AsString;
    daten[y-1].fach:=Query1.FieldByName('FACH').AsString;
    daten[y-1].bemerkung:=Query1.FieldByName('BEMER_SCH').AsString;
    daten[y-1].raum:=Query1.FieldByName('RAUM').AsString;

    Query1.Next;
  end;

  gesseiten:=length(Daten) div 19;
  aktuseite:=0;
 end;

if NOT (Query2.RecordCount=0) then begin
 SetLength(Daten2,Query2.RecordCount);
  for ya:=1 to Query2.RecordCount do begin
    daten2[ya-1].klasse:=Query2.FieldByName('KLASSEN').AsString;
    daten2[ya-1].stunde:=Query2.FieldByName('S').AsString+'.';
    daten2[ya-1].wer:=Query2.FieldByName('WER').AsString;
    daten2[ya-1].fuer:=Query2.FieldByName('FUER').AsString;
    daten2[ya-1].fach:=Query2.FieldByName('FACH').AsString;
    daten2[ya-1].bemerkung:=Query2.FieldByName('BEMER_SCH').AsString;
    daten2[ya-1].raum:=Query2.FieldByName('RAUM').AsString;

    Query2.Next;
  end;

  gesseitena:=length(Daten2) div 19;
  aktuseitea:=0;
end;
end;
Timer-Aufruf:

Delphi-Quellcode:
procedure TForm2.TimerReloadTimer(Sender: TObject);
var
   Ini: TIniFile;
   y,ya,i,ia,count,counta,ReloadTime,dnr:integer;
   morgen_m,heute_d,morgen_d: String;
   tomorrow,today: TDateTime;
begin
GetData;

  dnr:=DayOfWeek(Date);
  if dnr=7 then begin
   today:=Date+2;
   tomorrow:=Date+3;
  end
  else if dnr=6 then begin
   today:=Date+3;
   tomorrow:=Date+4;
  end
  else if dnr=1 then begin
   today:=Date+1;
   tomorrow:=Date+2;
  end
  else begin
   today:=Date;
   tomorrow:=Date+1;
  end;

 try
    Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'conf.ini');
    ReloadTime:=(Ini.ReadInteger('Zeiteinstellungen','Tagwechsel',10)*1000);
    morgen_m:=Ini.ReadString('Zeiteinstellungen','Datum morgen',DatetoStr(tomorrow));
    if StrToDate(morgen_m)<tomorrow then morgen_m:=DateToStr(tomorrow)
    else tomorrow:=StrToDate(morgen_m);
  finally
    Ini.Free;
  end;

 if PageControl1.TabIndex=0 then begin
  if aktuseite = Gesseiten then
    count := length(Daten) mod 19
  else
    count := 19;
  y:= 19*AktuSeite;
  stringgrid1.RowCount:=count+1;
  for i:=0 to count-1 do begin
    stringgrid1.Cells[0,i+1]:= Daten[i+y].klasse;
    stringgrid1.Cells[1,i+1]:= Daten[i+y].stunde;
    stringgrid1.Cells[2,i+1]:= Daten[i+y].fuer;
    stringgrid1.Cells[3,i+1]:= Daten[i+y].wer;
    stringgrid1.Cells[4,i+1]:= Daten[i+y].fach;
    stringgrid1.Cells[5,i+1]:= Daten[i+y].bemerkung;
    stringgrid1.Cells[6,i+1]:= Daten[i+y].raum;
  end;

  if AktuSeite = GesSeiten then
    AktuSeite := 0
  else
    AktuSeite:=AktuSeite+1;

 heute_d := LongDayNames[DayOfWeek(today)];

 Label5.Caption:='Vertretungsplan für den';
 Label6.Caption:=DateToStr(today)+' ('+heute_d+')';

 end
 else if PageControl1.TabIndex=1 then begin
  if aktuseitea = Gesseitena then
    counta := length(Daten2) mod 19
  else
    counta := 19;
  ya:= 19*AktuSeitea;

  stringgrid2.RowCount:=counta+1;
  for ia:=0 to counta-1 do begin
    stringgrid2.Cells[0,ia+1]:= Daten2[ia+ya].klasse;
    stringgrid2.Cells[1,ia+1]:= Daten2[ia+ya].stunde;
    stringgrid2.Cells[2,ia+1]:= Daten2[ia+ya].fuer;
    stringgrid2.Cells[3,ia+1]:= Daten2[ia+ya].wer;
    stringgrid2.Cells[4,ia+1]:= Daten2[ia+ya].fach;
    stringgrid2.Cells[5,ia+1]:= Daten2[ia+ya].bemerkung;
    stringgrid2.Cells[6,ia+1]:= Daten2[ia+ya].raum;
  end;

  if AktuSeitea = GesSeitena then
    AktuSeitea := 0
  else
    AktuSeitea:=AktuSeitea+1;

  morgen_d := LongDayNames[DayOfWeek(tomorrow)];

  Label5.Caption:='Vertretungsplan für den';
  Label6.Caption:=DateToStr(tomorrow)+' ('+morgen_d+')';

 end
 else if PageControl1.TabIndex=2 then begin
  Label5.Caption:='Meldungen';
  Label6.Caption:='';
 end;

 TimerReload.Interval:=ReloadTime;
 if PageControl1.TabIndex=0 then TimerNextTab.Interval:=ReloadTime*(GesSeiten+1)
 else if PageControl1.TabIndex=1 then TimerNextTab.Interval:=Reloadtime*(GesSeitena+1)
 else if Pagecontrol1.TabIndex=2 then TimerNextTab.Interval:=ReloadTime;
 TimerNextTab.Enabled:=True;
end;

DeddyH 28. Mai 2007 18:48

Re: Über Timer Stringlist 'weiterschalten'
 
Hallo, das sieht so aus, als ob Deine Queries die ganze Zeit über offen sind. Dadurch behalten sie natürlich ihre ursprüngliche Datenmenge. Mach mal am Anfang von GetData ein
Delphi-Quellcode:
Query1.Close;
Query2.Close;
Query1.Open;
Query2.Open;

Svenkan 28. Mai 2007 18:51

Re: Über Timer Stringlist 'weiterschalten'
 
Jetzt wird immer nur die erste Seite des jeweiligen Tages angezeigt (und zwar x Mal, je nachdem, wie viele Seiten es insg. gibt).
Aber immerhin werden die gezeigten Werte schonmal korrekt dargestellt (was ja daran liegt, dass der Timer zum Tabwechsel danach ausgelegt ist).

/edit: Es funktioniert! :) Hatte noch vergessen rauszunehmen, dassa dann autom. jedes Mal auf die Seite 0 schaltet. Dankeschön! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Seite 4 von 4   « Erste     234   

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