Использование Delphi XE6, я создаю TdateTimePicker-подобный элемент управления, но по нескольким причинам я использую TButtonedEdit, в котором есть встроенный TMonthCalendar. Они определяются следующим образом:Изменение состояния/формата TMonthCalendar в 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;
У меня есть довольно много получили это происходит по желанию с календарным месяцем показывается, когда правая кнопка нажата, и я прячусь, когда выбор сделан, когда пользователь покидает, побеги и т.д. .
Что меня пугает, так это: когда календарь «опустился», если пользователь нажимает или дважды нажимает на заголовок, календарь меняется на сетку месяцев или лет соответственно. Если пользователь ESCapes, например, в тот момент, когда я опускаю календарь вниз, он возвращается к состоянию месяцев/лет, тогда как я хотел бы, чтобы он возвращался к показу текущего месяца его свойства Date (как это делает TDateTimePicker).
Как я могу вернуть отображение календаря месяца в его состояние на один месяц, прежде чем показывать его?
Редактирование: Я считаю, что нашел ответ: после скрытия MonthCalendar я просто вызываю RecreateWnd, а основной экранный объект уничтожается и воссоздается с нуля, когда следующий вызываемый. И поскольку он появляется в формате одного месяца, чего я хочу, больше ничего не нужно делать.
Это нормальное поведение. Поместите календарь месяца в форму, нажмите на заголовок (который в месяц на заголовке даже изменит свой цвет, намекая, что что-то произойдет, когда вы нажмете), и на нем будут отображаться месяцы и т. Д. –
Да, но если вы закрываете его (с помощью ESCaping или перехода к другому элементу управления), когда вы снова понижаете TdateTimePicker, он не будет выпадать в предыдущем состоянии «сетка месяцев/лет», а вернется к состоянию «по умолчанию» одного месяца. Я хочу знать, как заставить его backj в это состояние «default». – TomB
Итак, напишите процедуру для установки вида, например. 'procedure SetCalendarView (Календарь: TMonthCalendar; ViewType: TViewType);' и назовите его соответствующим образом. Например. 'SetCalendarView (MyMonthCalendar1, vtMonth);'. –