![]() |
DateTimePicker: Problem mit MinDate und MaxDate
Hallo,
ich programmiere mit Delphi 2005 Pro und habe ein Problem mit dem DateTimePicker und dem Setzen des Datums und der Min-/Max-Werte zur Laufzeit. Das Auswahldatum darf nur zwischen einem Erfassungsdatum und dem aktuellen Tagesdatum liegen. Der Code sah bisher so aus:
Delphi-Quellcode:
Unter Windows XP funktioniert das auch. Unter Windows Vista erhalte ich aber ab dem zweiten Aufruf die Meldung "Kalenderzeit und -datum konnte nicht gesetzt werden". Das Problem sind offensichtlich die Zuweisungen der Min-/Max-Werte. Ich habe den Code auch schon so abgeändert:
// aktuelles Datum setzen
DateTimePicker1.Date := Date(); // Min/Max-Datum setzen DateTimePicker1.MinDate := Trunc (adsTblAuftrag.FieldByName('ErfassDatum').AsDateTime); DateTimePicker1.MaxDate := Date();
Delphi-Quellcode:
Die Fehlermeldung unter Windows Vista kommt aber weiterhin, während es mit Windwos XP weiter funktioniert.
// Min/Max-Datum rücksetzen
DateTimePicker1.MinDate := 0; DateTimePicker1.MaxDate := 0; // aktuelles Datum setzen DateTimePicker1.Date := Date(); // Min/Max-Datum neu setzen DateTimePicker1.MinDate := Trunc (adsTblAuftrag.FieldByName('ErfassDatum').AsDateTime); DateTimePicker1.MaxDate := Date(); Wie läßt sich das Problem lösen ? Mike |
Re: DateTimePicker: Problem mit MinDate und MaxDate
Delphi-Quellcode:
obenstehender Code funktioniert bei mir in Vista problemlos
DateTimePicker1.Date:= Date;
DateTimePicker1.MinDate:=Trunc(date)-10; DateTimePicker1.MaxDate:= Trunc(date); also vermutlich bei dir:
Delphi-Quellcode:
sorry, hab überlesen, dass es erst beim zweiten mal auftritt.
// aktuelles Datum setzen
DateTimePicker1.Date := Date(); // Min/Max-Datum setzen DateTimePicker1.MinDate := Trunc (adsTblAuftrag.FieldByName('ErfassDatum').AsDateTime); DateTimePicker1.MaxDate := trunc(Date);
Delphi-Quellcode:
DateTimepicker1.minDate:= 0;
DateTimepicker1.maxdate:= Date +100; //sicherstellen das Datum grösser ist als einzufügendes Datum und bestehendes Datum //jetzt neues Datum setzen DateTimePicker1.Date:= Date +10; DateTimePicker1.MinDate:=Trunc(date); DateTimePicker1.MaxDate:= Trunc(date)+10; |
Re: DateTimePicker: Problem mit MinDate und MaxDate
OK, ich muß etwas mehr erklären.
Ich habe ein Form1, in dem ein einzelner Datensatz von vielen ausgewählt wird. Mit einem Doppelklick auf diesen Datensatz wird ein Form2 aufgerufen, um die einzelnen Datenfelder des Datensatzes anzuzeigen:
Delphi-Quellcode:
Im Form2 befinden sich im Ereignis 'FormShow' u.a. folgende Codezeilen:
procedure TForm1.StrGridDblClick(Sender: TObject);
begin Form2.ShowModal; end;
Delphi-Quellcode:
bzw. die Änderungen aus meinem 1. Post. Der erste Aufruf von Form2 funktioniert auch unter Vista fehlerfrei. Ab dem zweiten Aufruf kommt jedoch die von mir beschriebene Fehlermeldung, aber nur unter Vista. Was kann ich tun ?
// aktuelles Datum setzen
DateTimePicker1.Date := Date(); // Min/Max-Datum setzen DateTimePicker1.MinDate := Trunc (adsTblAuftrag.FieldByName('ErfassDatum').AsDateTime); DateTimePicker1.MaxDate := Date(); @fatalerror: Meine Antwort hat sich zeitlich etwas überschnitten. Ich habe schon folgends probiert:
Delphi-Quellcode:
Das hat aber auch nichts geholfen.
DateTimePicker1.MaxDate := Date() + 1;
|
Re: DateTimePicker: Problem mit MinDate und MaxDate
Es gibt eine neue Erkenntnis: Wenn man im ersten Aufruf von Form2 ein Datum aus dem DateTimePicker auswählt, funktionieren auch alle weiteren Aufrufe von Form2. Wird im ersten Aufruf von Form2 das Datum nicht geändert, kommt ab dem zweiten Aufruf die Fehlermeldung.
|
Re: DateTimePicker: Problem mit MinDate und MaxDate
Ich kann dein Problem nicht nachvollziehen.
Stelle sicher, dass vor der Zuweisung des neuen Datums 1. Mindate zurückgesetzt wird auf 0 2. Maxdate sowohl grösser als das (zuvor) gesetzte Datum im Datetimepicker ist, als auch grösser als das neu zu setzende Datum. Folgender rudimentärer Code funktioniert bei mir:
Delphi-Quellcode:
siehe auch:
form2.dtp1.mindate:=0;
form2.dtp1.maxdate:= Trunc(date+360); form2.dtp1.Date:= date; form2.dtp1.mindate:= Trunc(date-10); form2.dtp1.maxdate:= Trunc(date); form2.ShowModal; ![]() |
Re: DateTimePicker: Problem mit MinDate und MaxDate
Erst mal Danke für Deine Mithilfe. Ich habe das schon so eingetragen, aber es kommt trotzdem die Fehlermeldung. Etwas komisch finde ich, daß ich nach einer Änderung des Datums im ersten Aufruf auch alle anderen Aufrufe machen kann, aber ohne Änderung ab dem zweiten Aufruf eine Meldung bekomme.
Sinn und Zweck ist ja die Einschränkung der Datumsauswahl auf einen Bereich vom Tag der Erfassung bis zum aktuellen Tag. Wenn ich das so nicht zum Laufen bekomme, muß ich daß Datum eben beim Speichern in der Datenbank oder bei einem anderen Ereignis prüfen. Wie gesagt, unter Windows XP funktioniert es (Programmierer-PC), Windows Vista macht Probleme. Ich werde mal noch ein paar Tests machen, vielleicht ergibt sich doch noch was. |
Re: DateTimePicker: Problem mit MinDate und MaxDate
Der DateTimePicker hatte schon immer irgendwelche Macken (ist ja ein Control von Windows). Ich weis nicht mehr genau welche, aber es hing mit Min und Max zusammen. Ich mache es so, dass ich generel auf Min und Max verzichte und den User im Nachhinein über eine falsche Zeitangabe informiere. I.A. ist dem User seine unmögliche Zeitangabe ja auch bewusst, soll heißen nur ein DAU gibt falsche Zeiten an, und dem reicht eine nachträgliche Meldung auch aus.
|
Re: DateTimePicker: Problem mit MinDate und MaxDate
Ein Workaround könnte allenfalls sein, die Form nicht automatisch zu erstellen, sondern erst beim entsprechenden Aufruf
Delphi-Quellcode:
var
form2:TForm2 begin form2:= TForm2.create(self); Try form2.DateTimePicker1.Date := Date(); form2.DateTimePicker1.MinDate := Trunc(adsTblAuftrag.FieldByName('ErfassDatum').AsDateTime); form2.DateTimePicker1.MaxDate := trunc(Date); form2.showmodal; // tu irgendwas finally form2.free; end; end; |
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