![]() |
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? |
Re: Über Timer Stringlist 'weiterschalten'
Ohne den Source zu kennen, kann ich da nichts zu sagen. :zwinker:
|
Re: Über Timer Stringlist 'weiterschalten'
(bitte nicht wieder wg. Einrückung schlagen :oops:)
GetData-Procedure:
Delphi-Quellcode:
Timer-Aufruf:
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;
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; |
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; |
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. |
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