Mit Delphi XE6 erstelle ich ein TdateTimePicker-ähnliches Steuerelement, aber aus verschiedenen Gründen verwende ich ein TButtonedEdit, in das ein TMonthCalendar "eingebettet" ist. Diese sind so definiert:Ändern des Status/Formats eines TMonthCalendar in Delphi
TMyMonthCalendar = class(TMonthCalendar)
procedure DoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure DoCloseUp(Sender: TObject);
private
FDroppedDown: boolean;
procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
protected
end;
TMyDateEdit = class(TButtonedEdit)
private
FMonthCalendar: TMyMonthCalendar;
procedure DoRightButtonClick(Sender: TObject);
protected
procedure CreateWnd; override;
public
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
end;
Ich habe ziemlich viel bekam es gehen wie mit dem Monatskalender gewünschten gezeigt wird, wenn die rechte Schaltfläche geklickt wird und ich verstecke es, wenn eine Auswahl getroffen wird, navigiert der Benutzer entfernt, entkommt usw. .
Was mich verwirren ist, ist dies: Wenn der Benutzer mit dem Kalender "heruntergefallen" klickt oder Doppelklicks auf den Titel, ändert sich der Kalender in ein Raster von Monaten oder Jahren entsprechend. Wenn der Benutzer zum Beispiel an diesem Punkt ESCapes, wenn ich den Kalender zum nächsten Mal ablege, kehrt er zu diesem Monat/Jahr-Zustand zurück, während ich möchte, dass er den aktuellen Monat seiner Date-Eigenschaft anzeigt (wie es ein TDateTimePicker tut).
Wie kann ich die Anzeige des Monatskalenders auf den Einzelmonatszustand zurücksetzen, bevor er angezeigt wird?
Bearbeiten: Ich glaube, ich habe die Antwort gefunden: Nach dem Ausblenden des MonthCalendar, ich einfach RecreateWnd aufrufen und das zugrunde liegende Bildschirmobjekt wird zerstört und neu erstellt, wenn als nächstes aufgerufen. Und da es im Format eines Monats erscheint, was ich möchte, muss nichts weiter getan werden.
Das ist normales Verhalten. Setzen Sie einen Bestandsmonatskalender auf ein Formular, klicken Sie auf den Titel (der Monat auf dem Titel wird sogar seine Farbe ändern, was darauf hindeutet, dass etwas passiert, wenn Sie klicken), und es wird Monate angezeigt usw. –
Ja, aber wenn Wenn Sie den TdateTimePicker wieder ablegen, wird er nicht mehr in den vorherigen Zustand "Gitter von Monaten/Jahren" fallen, sondern zurück in seinen "Standard" -Monatszustand. Ich möchte wissen, wie ich es in diesen "Standard" -Zustand zurückdrängen kann. – TomB
Ok, schreibe eine Prozedur zum Einstellen der Ansicht, z. 'Prozedur SetCalendarView (Kalender: TMonthCalendar; ViewType: TViewType);' und nennen Sie es entsprechend. Z.B. 'SetCalendarView (MyMonthCalendar1, vtMonth);'. –