Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DateTimePicker Min und MAx Probleme (https://www.delphipraxis.net/121556-datetimepicker-min-und-max-probleme.html)

Zioone 30. Sep 2008 09:46


DateTimePicker Min und MAx Probleme
 
Hi,
hab da mal wieder ein Problem und zwar mit den DateTimePicker Komponente.
Schon gesucht, aber irgendwie nichts gefunden :?

was ich mache:
- Anfangs datum wird aus datei rausgesucht und in den 1. DTP geschrieben
- Enddatum wird aus datei rausgesucht und in den 2. DTP geschrieben
- dann wird noch MINDATE und MAXDATE anhand dieser beiden Angaben reingeschrieben
----
bis hier funktioniert das ganze auch

Problem trifft erst auf, wenn ich eine 2.Datei zur Laufzeit öffne. Dort wird mir dann gesagt das datum überschreitet Minimum bzw Maximum.

warum kann er nicht einfach das alte Datum löschen und ein neues Definieren?
Delphi-Quellcode:
     //...
     //in ad und ed werden informationen geholt

     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);
hoffe es kann wer helfen

PS: dazu muss ich noch sagen das ich für's anfangsdatum und enddatum jeweils 2DTP habe, jeweils eins fürs datum und das andere für die Zeit(dtp_ad2/dtp_ed2)

hoika 30. Sep 2008 10:12

Re: DateTimePicker Min und MAx Probleme
 
Hallo,

ohne Daten (2. Datei) ist das ein Fall für die Kugel.

Also:
F5 - Breakpoint
Ctrl+F5 - Watch hinzufügen

und debuggen.


Heiko

nahpets 30. Sep 2008 10:49

Re: DateTimePicker Min und MAx Probleme
 
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

Zioone 30. Sep 2008 10:56

Re: DateTimePicker Min und MAx Probleme
 
DANKE!!! Es geht :dp: :love:

hab mal durchdebuggt, der Fehler trifft wirklich Zeile voher auf.
und lag auch an der Reihenfolge.
Das deswegen der Fehler auftrifft dacht ich mir schon nur das es an der Reihenfolge liegt, da kam ich nicht drauf ^^'

Also noch mal danke :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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