![]() |
TDateTimePicker: selektierten Bereich ermitteln/setzen
Hallo Forum!
Im TDateTimePicker können Bereiche des Datums bzw. der Zeit einzeln selektiert werden. Beispiel:
Delphi-Quellcode:
Es kann nun der Tag, der Monat oder das Jahr einzeln selektiert werden.
dateTimePicker1.format := 'dd.mm.yyyy';
Für eine geplante erweiterte Nutzung des TDateTimePickers stellen sich mir folgende Fragen:
Daniel |
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Zitat:
|
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Zitat:
|
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Zitat:
Das ganze soll ein DateTimePicker werden, wo man sowohl ein Datum als auch eine Zeit eingeben können soll.(in einem Editfeld) Als Format kann man das jetzt schon machen:
Delphi-Quellcode:
Man kann jetzt zwar Tag, Monat, Jahr, Stunde und Minute als User je einzeln selektieren
dateTimePicker1.format := 'dd.MM.yyyy HH:mm';
und auch ändern, aber es wird immer abhängig von kind (dtkDate oder dtkTime) nur das Datum nach date, bzw. nur die Zeit nach time übernommen.:( Ich will das jetzt automatisieren, in dem je nach dem selektiertem Bereich entweder auf dtkDate oder auf dtkTime geschaltet wird. Daniel |
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Zitat:
|
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Das Ändern von kind hab ich mal mit einem Timer getestet (um den Fokus auf den Picker nicht zu verlieren):
Die Date - und Time Werte bleiben erhalten, aber nach der Änderung wird immer der erste Bereich im Edit selektiert, man müsste dann eben den vorherigen Bereich per Code wieder erneut selektieren. Also mit entsprechenden OnChange/Click/Keydown...Reaktionen sollte das zu machen sein - wenn ich an die Selektierungen rankäme... Ich gebe zu, daß TDateTimePicker dafür nicht wirklich konzipiert ist und es ein ziemliches Gefrickel wäre - aber mich nervt es immer wieder, dass man für die Aufnahme eines vollständigen TDateTime Wertes immer 2 Picker brauch, deren Werte man dann addiern muss. Und eine brauchbare Fremdkomponente (am besten dann auch als datensenitive Variante) hab ich noch nicht gefunden. Daniel |
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Du könntest es vielleicht mit einer Interceptor Class erreichen, die das CN_NOTIFY abfängt:
Delphi-Quellcode:
type
TDateTimePicker = class(Vcl.ComCtrls.TDateTimePicker) private procedure CNNotify(var Message: TWMNotifyDT); message CN_NOTIFY; end; procedure TDateTimePicker.CNNotify(var Message: TWMNotifyDT); var DT: TDateTime; begin DT := DateTime; if (Message.NMHdr^.code = DTN_DATETIMECHANGE) and (Message.NMDateTimeChange^.dwFlags = GDT_VALID) then begin DT := SystemTimeToDateTime(Message.NMDateTimeChange^.st); end; inherited; DateTime := DT; end; |
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Ok, da ist einiges Neues für mich dabei, in das ich mich erst einarbeiten muß.
Wenn ich nicht weiterkomme, werd ich hier nochmal weiterposten. Erstmal vielen Dank! Daniel |
AW: TDateTimePicker: selektierten Bereich ermitteln/setzen
Zum Thema Interceptor Class hier ein guter Artikel von Žarko Gajić:
![]() Sicher hilft auch ein Blick in die originale TDateTimePicker.CNNotify in Vcl.ComCtrls um zu verstehen, wie der Code funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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