0

将 TMonthCalendar 控件拖放到窗体上。设置为显示一个月。使用美国英语语言环境(星期日作为一周的第一天)。查看 2013 年 1 月。您的日历实际上显示 2012 年 12 月 30 日至 2013 年 2 月 9 日,因为它显示总共 42 天。将您的 MaxSelCount 设置为 42 并将 MultiSelect 设置为 true,以便您可以选择这些天数。

问题 1 - 单击 12 月 31 日,并按住鼠标。拖到 1 月 1 日,然后放开。您选择了两天。按预期工作。通过选择一月份的另一个日期来清除此选择。现在再次选择相同的两天,但这次选择 1 月 1 日 FIRST,然后向左拖动以突出显示 12 月 31 日。注意日历是如何向左滚动到 12 月的?如何阻止日历滚动???

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

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

我还尝试过作为包装器的 Jedi 控件。

4

1 回答 1

2

最容易的是第二个。您可以简单地使用MCM_GETMONTHRANGE消息——或者更简单地说,MonthCal_GetMonthRange“宏”——来获取这些信息。

例如 ( uses CommCtrl),

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;
于 2013-01-24T21:31:44.580 回答