Moin
Folgende Idee aufgrund der o.a. Angaben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm1.FormCreate(Sender: TObject); Var i,j:byte; Ini: TIniFile; Diff: Integer; DatumGueltig: TDate; begin ... StringGrid1.RowCount:=21; StringGrid1.Cols[0].Add('Datum'); StringGrid1.Cols[1].Add('Apotheken Notdienst 1'); StringGrid1.Cols[2].Add('Apotheken Notdienst 2'); Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ablauf.ini');
for i:=0 to StringGrid1.RowCount do StringGrid1.Rows[i+1].Add(DateToStr(Date()+ i)); DatumGueltig := Ini.ReadDate('Gueltig','DatumGueltig',Date());
Diff := ( Trunc(Date()) - Trunc(DatumGueltig) ) mod 20;
for i:= 1 to 20-Diff do begin Stringgrid1.Cells[1,i]:=ini.readString('Notdienst1',IntToStr(i+Diff),''); Stringgrid1.Cells[2,i]:=ini.readString('Notdienst2',IntToStr(i+Diff),''); end; for j:= 0 to Diff do begin Stringgrid1.Cells[1,i+j]:=ini.readString('Notdienst1',IntToStr(j+1),''); Stringgrid1.Cells[2,i+j]:=ini.readString('Notdienst2',IntToStr(j+1),''); end; Ini.Free; end; |
So, einige Erklörungen zum dem obigen Gedankenspiel:
ablauf.ini ist wie folgt aufgebaut:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| [gueltig] DatumGueltig=01.05.2006 [Notdienst1] 1=Apo11 2=Apo12 3=Apo13 ... 20=Apo120 [Notdienst2] 1=Apo21 2=Apo22 3=Apo23 ... 20=Apo220 |
Naturlich sind anstelle der Apo11...Apo220 die richtigen Apotheken einzutragen; die Schlüsselwerte dienen hier nur zum besseren Verständnis des obigen Qoellcodes.
Zeile 17..18 ab dem aktuellenTagesdatum, welches in die erste freie Zeile geschrieben wird, werden die nachfolgenden Zellen des StringGRids in Spalte 0 mit forlaufenden Datum beschrieben.
ZEile 21: Auslesen des Datums, ab wann die Ablaufliste (Tagesrythmus) gültig ist; hier exemplarisch 01.05.2006
ZEile 24: Die Differenz zwischen dem Tagesdatum (Beispiel 17.05.2006) und dem Gültigkeitsdatum wird solange durch 20 geteilt, bis ein Rest von 0..20 Tagen erreicht ist. Wert von
Diff = 16 (17.05.2006 - 01.05.2006)
Zeile 27...30 Anzahl der ersten ZEilen im StringGrid errechnet sich aus
20-Diff, in diesem Beispiel wären das also die ersten 4 Zeilen (17.05.2006...20.05.2006); in den Spalte für Notdienst1 wird dann Apo117...Apo120 eingetragen, sinngemäß für den Notdienst2 Apo217..Apo220.
Nun ist die Tagesrythmus-Liste zu ende und muss von vorne beginnen:
Zeile 34...37 die ersten 4 Zeilen sind abgearbeitet (Schleifenvariable i steht auf 5(!)), übrig bleiben also noch Diff=16 Zeilen, somit die Zeilen 5..20.
So, nun dürft ihr euch weitere Gedanken um die anderen Probleme machen
