Delphi TMonthCalendar-停止自动滚动,我在哪个月?

Delphi TMonthCalendar-停止自动滚动,我在哪个月?,delphi,vcl,comctl32,Delphi,Vcl,Comctl32,将TMMonthCalendar控件拖放到窗体上。设置为显示一个月。使用美国英语地区周日作为一周的第一天。2013年1月视图。您的日历实际上显示的是2012年12月30日至2013年2月9日,因为它总共显示42天。将MaxSelCount设置为42,将MultiSelect设置为true,以便您可以选择这些天数 第1期-在12月31日单击,然后按住鼠标。拖到1月1日,然后放手。你有两天的时间。一切正常。通过在1月份选择另一个日期来清除此选择。现在再次选择相同的两天,但这次选择1月1日,然后向左拖

将TMMonthCalendar控件拖放到窗体上。设置为显示一个月。使用美国英语地区周日作为一周的第一天。2013年1月视图。您的日历实际上显示的是2012年12月30日至2013年2月9日,因为它总共显示42天。将MaxSelCount设置为42,将MultiSelect设置为true,以便您可以选择这些天数

第1期-在12月31日单击,然后按住鼠标。拖到1月1日,然后放手。你有两天的时间。一切正常。通过在1月份选择另一个日期来清除此选择。现在再次选择相同的两天,但这次选择1月1日,然后向左拖动以突出显示12月31日。注意日历是如何滚动到十二月的吗?如何阻止日历滚动

问题2-在上述两种情况下,您选择了相同的两个日期,但显示的日历月份完全不同。如何知道日历实际显示的月份

第3期-选择从1月24日到2月1日。日历现在滚动到2月,然后从视图中删除24日、25日和26日。似乎完全崩溃了


我也试过绝地控制装置,它们是包装器。

简单的是第二个。您可以简单地使用消息——或者更简单地说,使用“宏”——来获取此信息

例如,使用CommCtrl


我有点怀疑这个控件是否“坏了”,因为它是本机Windows控件…1对我来说非常有意义。您已告诉控件允许最多42天,选择1/1作为第一天,并开始移动到上个月。直到你停止拖动,它才知道你想在12/31停止;如果您打算拖动到12/15,如果它不滚动以允许,您会怎么做?3是同一件事;它开始允许你选择2月,但你不能选择超过42天,那么为什么在你的选择接近2月底之前,它会在2月日历上向你显示超过42天的时间呢?…尽管一些测试证实,该控件不擅长进行需要多个视图的选择。例如,似乎无法选择2012-01-15-2012-02-15。[但是,如果同时显示两列或更多列,这项功能会很好地工作。]现在想想,这个控件的限制性令人惊讶。为什么更改控件的视图时不保存选择?此外,为什么不能“Ctrl-click”选择不连续的天数子集?[另一方面,您可以更改显示的“今天”日期!]第3期不是问题。如果你的意思是一个问题,考虑分开张贴,这样你就可以得到所有问题的最佳答案,而不是让人们试图在一个单一的响应中平等地对待他们。谢谢你,这非常有帮助。
procedure TForm1.FormClick(Sender: TObject);
var
  st: array[0..1] of TSystemTime;
begin
  MonthCal_GetMonthRange(MonthCalendar1.Handle, GMR_VISIBLE, @st);
  Caption := IntToStr(st[0].wMonth);
end;