Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TDateTimePicker parseInput und onUserInput (https://www.delphipraxis.net/217141-tdatetimepicker-parseinput-und-onuserinput.html)

stalkingwolf 6. Mai 2025 16:18

TDateTimePicker parseInput und onUserInput
 
(Delphi 11.3)
jemand schon einmal mit der Kombination etwas gemacht?
Irgendwie haben die Devs zwar an das richtige Gedacht aber nicht sauber umgesetzt.
Oder ich verstehe es nicht.

mit der Kombination hat man eine freie Eingabe und kann die Eingabe parsen.
Aber ... Man kann den Editmodus nicht manuell setzen. Der User muss mit der Maus auf eine freie Fläche im Feld klicken.
Das Feld kann nicht mit TAB verlassen werden. OnKeydown/Press kann die Taste auch nicht abgefangen werden. Vermutlich weil ein anderes Control drüber gebügelt wird.

Oder hat jemand die beiden Sachen schon einmal hinbekommen?

Uwe Raabe 6. Mai 2025 17:13

AW: TDateTimePicker parseInput und onUserInput
 
Kannst du mal konkreter werden? Was willst du machen und was funktioniert nicht?

stalkingwolf 7. Mai 2025 15:27

AW: TDateTimePicker parseInput und onUserInput
 
Hallo Uwe,

eigentlich genau wie beschrieben.

Nimm ein TDateTimePicker und setze es auf die Form.
Schalte die Eigenschaft parseInput auf TRUE.
Nun kannst in der UI den gesamten Text überschreiben anstatt nur Tag, Monat oder Jahr.
Die Auswahl funktioniert aber nur wenn mit der Maus auf eine freie Fläche geklickt wird. Kein STRG+A oder im Code .selectAll ( gibt es nicht ).

Wenn parseInput auf TRUE sitzt und die Eingabe überschrieben wird, dann wird bei ENTER/RETURN onUserInput aufgerufen.
Allerdings nicht wenn Tabulator gedrückt wird, was eigentlich unter Windows Standard wäre zum verlassen auf das nächst Feld, sondern nur bei ENTER/RETURN
Leider wird onKeyDown/press nicht aufgerufen wenn TDateTimePicker im Überschreibmodus ist. D.h man kann es nicht selber abfangen und per Code zum nächsten Feld springen.

Wenn ich das so implementiere bekomme ich keinem Kunden das erklärt.

Hintergrund. Eigentlich sind unsere Datumfelder reine TEdit und wir kümmern uns um die Datumseingabe manuell. z.b 07 = 07.05.2025 - 3005 = 30.05.2025.
Das empfinden viele unserer Kunden als praktisch. Allerdings würden andere gerne eine Auswahl zusätzlich per Kalender haben.

Sicherlich kann ich daneben einen Button setzen und dann TMonthCalender einblenden, aber TDateTimePicker wäre alles kombiniert.
Wegen der Problematik oben empfinde ich das allerdings als unbenutzbar. Das peilt kein normaler User.

Meine Fragen wären
a) übersehe ich etwas bei TDateTimePicker
b) hat einer das anders hinbekommen

Gruß
Sven

Uwe Raabe 7. Mai 2025 16:29

AW: TDateTimePicker parseInput und onUserInput
 
Zitat:

Zitat von stalkingwolf (Beitrag 1548509)
aber TDateTimePicker wäre alles kombiniert.

Das Control ist ja ein Windows internes und somit liegt die Funktionalität in Microsoft's Hand und ist damit sogar möglicherweise von der Windows-Version abhängig. Es ist nicht einfach einen so simplen Anwendungsfall zu finden, dass man das Control direkt einsetzen kann. Schon bei ein wenig vom Standard abweichenden Requirements wird man das damit nur schwer realisieren können. Die Windows-Kapselung macht eine flexible Nutzung leider unmöglich. In der Regel fährt man mit dem TButtonedEdit-Ansatz auf Dauer besser.


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