Delphi TMonthCalendar - остановить автоматическую прокрутку, и в каком месяце я нахожусь?
Перетащите элемент управления TMonthCalendar на форму. Установите это, чтобы показать один месяц. Используйте американский английский язык (воскресенье как первый день недели). Просмотр января 2013 года. Ваш календарь на самом деле показывает 30 декабря 2012 года по 9 февраля 2013 года, потому что он показывает всего 42 дня. Установите MaxSelCount на 42 и установите MultiSelect на true, чтобы вы могли выбрать и количество этих дней.
Выпуск 1 - Нажмите 31 декабря и удерживайте кнопку мыши нажатой. Перетащите на 1 января и отпустите. Вы выбрали два дня. Работает как положено. Очистите этот выбор, выбрав другую дату в январе. Теперь выберите те же два дня снова, но на этот раз выберите 1 января ПЕРВЫЙ и перетащите влево, чтобы выделить 31 декабря. Заметьте, как календарные свитки уходят в декабрь? Как я могу остановить прокрутку календаря???
Проблема 2. В обоих приведенных выше сценариях были выбраны одинаковые две даты, но отображаемый месяц календаря был совершенно другим. Как я могу узнать, какой месяц на самом деле отображается в календаре?
Выпуск 3 - Выберите с 24 января по 1 февраля. Календарь теперь прокручивается до февраля, а затем отключается 24-го, 25-го и 26-го числа из поля зрения. Кажется, полностью сломан.
Я также попробовал джедаев, которые являются обертками.
1 ответ
Легкий - второй. Вы можете просто использовать 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;