Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TDateTimePicker bei Aufpoppen inizialisieren


Timbo - Mo 21.08.06 13:10
Titel: TDateTimePicker bei Aufpoppen inizialisieren
Hallo,

der DateTimePicker steht z.B. auf 1.1.2000. Wenn nun er nun zum auswählen aufpoppt, soll er mit dem aktuellen Datum inizialisiert werden.

onClick wird bei aufpoppen leider nicht ausgelöst.

Finde kein Ereignis, das ausgelöst wird, um den Wert zu setzen...

Vielen Dank.


galagher - Mo 21.08.06 18:08
Titel: Re: TDateTimePicker bei Aufpoppen inizialisieren
user profile iconTimbo hat folgendes geschrieben:
der DateTimePicker steht z.B. auf 1.1.2000. Wenn nun er nun zum auswählen aufpoppt, soll er mit dem aktuellen Datum inizialisiert werden.

Hallo! Meinst du das:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
begin
 DateTimePicker1.Date := Now;
end;


Timbo - Mo 21.08.06 21:48

Vielen Dank schon mal.
Aber damit wird nur das Feld aktualisiert in dem Pop-Up Fenster steht dann noch das alte Datum.


Lannes - Di 22.08.06 07:41

Hallo,

eventuell ist OnEnter besser geeignet.


Timbo - Di 22.08.06 13:29

on Enter bringt auch nichts, möchte ja das nur das popUp Datum ändern...


galagher - Di 22.08.06 21:32

user profile iconTimbo hat folgendes geschrieben:
der DateTimePicker steht z.B. auf 1.1.2000.

Irgendetwas verstehe ich da jetzt nicht: Wie setzt du das Datum denn auf z.B. 1.1.2000? Genauso setzt du es dann im Dropdown-Ereignis wieder auf das aktuelle Datum!

user profile iconTimbo hat folgendes geschrieben:
Aber damit wird nur das Feld aktualisiert in dem Pop-Up Fenster steht dann noch das alte Datum.

Das meinte ich, verstehe ich nicht - wie ändert man das Datum im Popup-Fenster denn? Jedenfalls genauso änderst du es eben wieder zurück!


Timbo - Mi 23.08.06 03:57

also:

im feld steht 1.1.2000
wenn man nur in das feld klickt soll nicht passieren, altes datum bleibt, auch bei verlassen keine änderungen.
wenn man aber auf den pfeil klickt soll in dem popupfenster nicht 1.1.2000 stehen, sonder 22.8.2006...

sonst müßte man sich da komplett durch den kalender wühlen, um zum aktuellen datum zu kommen.
man könnte zwar auf "heute" klicken, aber dann geht der dialog zu.
wenn ich nun aber 31.8.2006 haben wollte muss ich dann wieder auf den pfeil klicken.
einfach mal ausprobieren, voll nervig.


galagher - Mi 23.08.06 18:26

user profile iconTimbo hat folgendes geschrieben:
im feld steht 1.1.2000
wenn man nur in das feld klickt soll nicht passieren, altes datum bleibt, auch bei verlassen keine änderungen.
wenn man aber auf den pfeil klickt soll in dem popupfenster nicht 1.1.2000 stehen, sonder 22.8.2006...

sonst müßte man sich da komplett durch den kalender wühlen, um zum aktuellen datum zu kommen.
man könnte zwar auf "heute" klicken, aber dann geht der dialog zu.
wenn ich nun aber 31.8.2006 haben wollte muss ich dann wieder auf den pfeil klicken.
einfach mal ausprobieren, voll nervig.


Also möchtest du, dass der Kalender das Datum nur setzt, wenn du auf den Pfeil (welchen von den beiden denn?) klickst? Sonst soll er nichts machen, egal, wohin du klickst?

Naja, DateTimePicker kann das aber nicht, dazu musst du entweder eine andere Komponente verwenden oder eine neue Komponente von TDateTimePicker ableiten. Aber warum verwendest du nicht einfach TMonthCalendar? Das bleibt offen, wenn du auf "Heute" klickst!

//Edit: Ich glaube, Ableiten würde gar nicht funktionieren, weil man ja nichts "wegnehmen" kann, nur hinzufügen, d.h., was eine Komponente kann, kann immer auch ihr Nachfolger. Ist doch so, oder?


Lannes - So 27.08.06 18:58

Hallo,

so wird nur der PopUp-Kalender auf das aktuelle Datum gestellt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var h : THandle;
    aTime : TSystemTime;
begin
  h := DateTime_GetMonthCal(DateTimePicker1.Handle);//Handle besorgen
  DateTimeToSystemTime(now,aTime);
  MonthCal_SetCurSel(h,aTime);
end;


//Edit: Die Unit CommCtrl muss in uses eingebunden werden!