AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DateTimePicker ReadOnly?

Ein Thema von TUX_der_Pinguin · begonnen am 27. Okt 2011 · letzter Beitrag vom 27. Okt 2011
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 09:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 09:39
Mir fallen dazu zwei Möglichkeiten ein :

1.) Die Komponente ableiten und wie ich es versucht habe in diesem Beitrag die Read Only Option selber zu implementieren.

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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 10:03
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 (http://www.swissdelphicenter.ch/de/showcode.php?id=1227)

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:
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;
Die Frage ist ob ich in dem OnClick Ereignis irgendwie selbiges unterdrücken kann um somit den Aufruf zu verhindern.
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 11:49
Setze doch die Komponente auf ein Panel. Wenn das Panel disabled wird, ist die Komponente read-only. Die Farbe bleibt erhalten.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 12:14
Setze doch die Komponente auf ein Panel. Wenn das Panel disabled wird, ist die Komponente read-only. Die Farbe bleibt erhalten.
Das wäre eine Möglichkeit, zwar ziemlicher Pfusch aber wenn es scheinbar nicht anders geht.

Auf jedenfalls vielen Dank für die Tipps und Ideen.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: DateTimePicker ReadOnly?

  Alt 27. Okt 2011, 12:40
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;
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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