我目前正在使用Delphi创建一个程序(专业版,7.0版;Build 4.453)。
最初,我想在TDateTimePicker下拉日历中添加一些日期;但是我很快发现我做不到--所以我试图在TDateTimePicker下拉日历的顶部重叠一个TMonthCalendar (您可以用它做粗体日期)(简单,对吗?)
但不要太快:不知怎么的,TDateTimePicker下拉日历总是出现在我的TMonthCalendar上。我想让TMonthCalendar出现在顶部。
我想我能做的是:
下面是正在发生的事情:
以下是我尝试过的:
我知道解决方案可能很简单,但我想不出有什么办法可以做到这一点。到目前为止,我想出的几个点子都没有用:(所以,如果你能想出一种方法来做我想做的事,请帮帮我。)
(预先多谢!)
发布于 2014-02-09 14:27:48
你问题的全部前提都是错误的。完全可以修改附在日期时间选择器上的月份日历的格式。
解决方案是响应MCN_GETDAYSTATE通知。此通知只发送具有MCS_DAYSTATE样式的控件。为了确保应用此样式,即使在重新创建窗口时,也需要在重写的CreateWnd方法中应用它。
例如,在这里,我用一个插入者来完成这个任务:
type
TDateTimePicker = class(Vcl.ComCtrls.TDateTimePicker)
protected
procedure CreateWnd; override;
procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;
end;
procedure TDateTimePicker.CreateWnd;
begin
inherited;
DateTime_SetMonthCalStyle(WindowHandle, DateTime_GetMonthCalStyle(WindowHandle) or MCS_DAYSTATE);
end;
procedure TDateTimePicker.WMNotify(var Message: TWMNotify);
var
i: integer;
NMDayState: PNMDayState;
begin
inherited;
case Message.NMHdr.code of
MCN_GETDAYSTATE:
begin
NMDayState := PNMDayState(Message.NMHdr);
for i := 0 to NMDayState.cDayState-1 do begin
NMDayState.prgDayState[i] := $FFFFFFFF; // every day is bold
end;
end;
end;
end;

或者用一点$AAAAAAAA的掩码,只有偶数天的粗体:

https://stackoverflow.com/questions/21659683
复制相似问题