![]() |
DateTimePicker ReadOnly?
Hallo DPler,
ich habe ein DateTimePicker auf meinem Formular, welcher von einer Datenbank aus befüllt werden kann ist in der Datenbank noch kein Eintrag dann kann der Anwender in dem DateTimePicker ein Datum wählen. Wurde ein Datum aus der Datenbank in das Feld geladen so soll das Eingabefeld gesperrt sein, der Anwender kann das Datum nicht mehr ändern. Ich könnte das mit "TDateTimePicker.Enabled := False" lösen, jedoch ist ist das Eingabefeld dann Grau. Gibt es nicht eine Möglichkeit wie bei einem TEdit "ReadOnly:=True" zu setzen? |
AW: DateTimePicker ReadOnly?
Mir fallen dazu zwei Möglichkeiten ein :
1.) Die Komponente ableiten und wie ich es versucht habe in diesem ![]() 2.) Ich habe gerade kein Delphi zur Hand, aber ich bin der Meinung, dass ich die DropDown-Auswahl deaktivieren kann und damit dann nur noch bewusst ein Datum eingeben kann. Zusätzlichzum Abschalten der DropDown-Auswahl würde ich dann noch jegliche Tastatureingabe über OnKeyPress oder OnKeyDown abfangen. |
AW: DateTimePicker ReadOnly?
Man kann die Einstellung DateMode von dmComboBox auf dmUpDown ändern dann hat man nur zwei kleine
Spinbuttons. Ob man dann aber wirklich alle Möglichkeiten händisch sperren kann die zu Eingaben im dem Feld führen können bin ich mir nicht so sicher. Wäre relativ aufwändig. Ich hatte einen Tipp gefunden wie man ein "leeres" DateTimePicker erzeugen kann ( ![]() Dort wird im OnClick Ereignis direkt die Kalenderauswahl aufgerufen ohne das man mit der Tastatur in das Eingabefeld gelangen kann (z.b. Tab). Meine Idee war es dort anzusetzen, ich habe nur keine Ahnnung ob das Möglich ist und wie.
Delphi-Quellcode:
Die Frage ist ob ich in dem OnClick Ereignis irgendwie selbiges unterdrücken kann um somit den Aufruf zu verhindern. :gruebel:
procedure TForm1.DateTimePicker1Click(Sender: TObject);
begin if FDTMDateEmpty then begin DateTimePicker1.Perform(WM_KEYDOWN, VK_F4, 0); DateTimePicker1.Perform(WM_KEYUP, VK_F4, 0); end; end; |
AW: DateTimePicker ReadOnly?
Setze doch die Komponente auf ein Panel. Wenn das Panel disabled wird, ist die Komponente read-only. Die Farbe bleibt erhalten.
|
AW: DateTimePicker ReadOnly?
Zitat:
Auf jedenfalls vielen Dank für die Tipps und Ideen. |
AW: DateTimePicker ReadOnly?
Zwei witzige Lösungen von experts-exchange:
-) change DragMode property of DateTimePicker to dmAutomatic; -)
Delphi-Quellcode:
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
begin PostMessage(GetFocus(), WM_SYSKEYDOWN, VK_MENU, 0); PostMessage(GetFocus(), WM_SYSKEYDOWN, VK_UP, 0); PostMessage(GetFocus(), WM_SYSKEYUP, VK_UP, 0); PostMessage(GetFocus(), WM_KEYUP, VK_MENU, 0); end; procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Key := 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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