使用Delphi XE6,我正在创建一个类似TdateTimePicker的控件,但由于几个原因,我使用的是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;
当按下右键时,月份日历显示为SHOWn时,我已经按照需要进行了操作,当我做出选择时,我隐藏了它,用户导航,ESCapes等。
让我感到困惑的是:如果用户点击或双击标题,则日历"下拉"日历将相应地更改为数月或数年的网格。例如,如果用户ESCapes,那时,当我下一次放下日历时,它返回到那个月/年状态,而我希望它恢复显示其Date属性的当前月份(如TDateTimePicker那样)。
如何在显示月历之前将其显示为单月状态?
编辑:我相信我找到了答案:隐藏MonthCalendar后,我只需调用RecreateWnd,底层屏幕对象将被销毁,并在下次调用时从头开始重新创建。因为它以单月形式出现,这就是我想要的,没有什么需要做的了。
答案 0 :(得分:2)
您可以致电MonthCal_SetCurrentView
设置月历的视图(或发送MCM_SETCURRENTVIEW
)。
uses commctrl;
MonthCal_SetCurrentView(FMonthCalendar.Handle, MCMV_MONTH);
如果您需要检索当前视图,可以使用MonthCal_GetCurrentView
(或MCM_GETCURRENTVIEW
)。