更改 Delphi 中 TMonthCalendar 的 state/format
Changing the state/format of a TMonthCalendar in Delphi
使用 Delphi XE6,我正在创建一个 TdateTimePicker-like 控件,但由于一些原因,我使用了一个 TButtonedEdit,其中有一个 TMonthCalendar "embedded"。这些是这样定义的:
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 等时隐藏它。
让我感到困惑的是:使用日历 "dropped down",如果用户单击或双击标题,日历会相应地更改为月或年的网格。例如,如果此时用户 ESCapes,当我下一次将日历向下 returns 到那个 months/years 状态时,我希望它恢复显示其日期的当前月份 属性(就像 TDateTimePicker 所做的那样)。
如何将月历的显示恢复到显示之前的单月状态?
编辑:我相信我已经找到了答案:隐藏 MonthCalendar 后,我只需调用 RecreateWnd,底层屏幕 object 将被销毁并在下次调用时从头开始重新创建。当它以单月格式出现时,这就是我想要的,不需要做任何进一步的事情。
您可以致电MonthCal_SetCurrentView
设置月历视图(或发送MCM_SETCURRENTVIEW
)。
uses commctrl;
MonthCal_SetCurrentView(FMonthCalendar.Handle, MCMV_MONTH);
如果您需要检索当前视图,可以使用 MonthCal_GetCurrentView
(或 MCM_GETCURRENTVIEW
)。
使用 Delphi XE6,我正在创建一个 TdateTimePicker-like 控件,但由于一些原因,我使用了一个 TButtonedEdit,其中有一个 TMonthCalendar "embedded"。这些是这样定义的:
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 等时隐藏它。
让我感到困惑的是:使用日历 "dropped down",如果用户单击或双击标题,日历会相应地更改为月或年的网格。例如,如果此时用户 ESCapes,当我下一次将日历向下 returns 到那个 months/years 状态时,我希望它恢复显示其日期的当前月份 属性(就像 TDateTimePicker 所做的那样)。
如何将月历的显示恢复到显示之前的单月状态?
编辑:我相信我已经找到了答案:隐藏 MonthCalendar 后,我只需调用 RecreateWnd,底层屏幕 object 将被销毁并在下次调用时从头开始重新创建。当它以单月格式出现时,这就是我想要的,不需要做任何进一步的事情。
您可以致电MonthCal_SetCurrentView
设置月历视图(或发送MCM_SETCURRENTVIEW
)。
uses commctrl;
MonthCal_SetCurrentView(FMonthCalendar.Handle, MCMV_MONTH);
如果您需要检索当前视图,可以使用 MonthCal_GetCurrentView
(或 MCM_GETCURRENTVIEW
)。