Hallo,
habe mal rumprobiert, der Fehler entsteht (höchstwahrscheinlich) nicht in der von Dir angegebenen Zeile, sondern eine Zeile darüber.
Folgende Annahme: Wir haben eine globale Variabel i vom Typ Integer und gehen davon aus, dass i = 0 ist.
Meine Testprozedur ohne Datei:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
ad : TDateTime;
ed : TDateTime;
begin
ad := Now;
ed := Now + i;
dtp_ad.Date:=ad; //dtp_ad = DateTimePicker; ad= AnfangsDatum, typ TDatetime
dtp_ad.MinDate:=trunc(ad); //hier kommt fehler, beim 2. öffnen
dtp_ad.MaxDate:=trunc(ed); //ed=EndDatum, typ TDatetime
dtp_ad2.Time:=frac(ad);
dtp_ed.Date:=ed;
dtp_ed.MinDate:=trunc(ad);
dtp_ed.MaxDate:=trunc(ed);
dtp_ed2.Time:=frac(ed);
Inc(i);
end;
Was passiert hier?
ad = heute, ed = morgen, damit sind die Zeilen 6 und 7 abgefackelt.
Zeile 8: dtp_ad.Date = heute
Zeile 10: dtp_ad.MinDate = heute
Zeile 11: dtp_ad.MaxDate = morgen
Zeile 15: dtp_ed.Date = morgen
Zeile 16: dtp_ed.MinDate = heute
Zeile 17: dtp_ed.MaxDate = morgen
Das funktioniert und i wird um 1 erhöht.
Nächster Klick:
Was passiert jetzt?
ad = heute, ed = übermorgen, damit sind die Zeilen 6 und 7 abgefackelt.
Zeile 8: dtp_ad.Date = heute
Zeile 10: dtp_ad.MinDate = heute
Zeile 11: dtp_ad.MaxDate = übermorgen
Zeile 15: dtp_ed.Date = übermorgen
Das geht nicht, da dtp_ed.MaxDate noch auf morgen steht, deshalb passiert in diesem Beispiel in Zeile 15 bei der Zuweisung ein Fehler. Warum beim Debuggen die Zeile 16 als fehlerhaft angezeigt wird, kann ich nicht sagen. Die Fehlermeldung besagt jedenfalls, dass das Datum das Maximum heute übersteigt.
Abhängig von den Werten aus Deinen Dateien, kann der Fehler in Zeile 8 oder 15 auftreten, vor dem Setzen von .Date musst Du sicherstellen, dass .MinDate und .MaxDate entsprechend gesetzt sind. Es dürfte sich hier also um ein Reihenfolgeproblem der Programmzeilen handeln.
Stephan