gpt4 book ai didi

delphi - 在 Delphi 中更改 TMonthCalendar 的状态/格式

转载 作者:行者123 更新时间:2023-12-03 15:55:56 25 4
gpt4 key购买 nike

使用 Delphi XE6,我正在创建一个类似 TdateTimePicker 的控件,但由于几个原因,我使用了 TButtonedEdit,其中“嵌入”了 TMonthCalendar。这些定义如下:

  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 ,底层屏幕对象就会被销毁,并在下次调用时从头开始重新创建。由于它以单月格式出现,这正是我想要的,所以不需要做任何进一步的事情。

最佳答案

您可以调用MonthCal_SetCurrentView设置月历的 View (或发送 MCM_SETCURRENTVIEW)。

uses commctrl;

MonthCal_SetCurrentView(FMonthCalendar.Handle, MCMV_MONTH);

如果您需要检索当前 View ,可以使用MonthCal_GetCurrentView (或MCM_GETCURRENTVIEW)。

关于delphi - 在 Delphi 中更改 TMonthCalendar 的状态/格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41203888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com