Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Делаем определенные дни жирными в TDateTimePicker в Delphi7

Delphi , Компоненты и Классы , TDateTimePicker

В статье мы рассмотрим, как сделать определенные дни жирными в компоненте TDateTimePicker в Delphi7. Этот компонент является потомком TMonthCalendar, и изначально кажется, что это должно быть возможно. Однако, как оказалось, это не так просто, и есть несколько нюансов, которые нужно учитывать.

Изначально, пользователь столкнулся с проблемой, что не может сделать определенные дни жирными в TDateTimePicker. Он нашел пример кода на C#, но хотел остаться с стандартным компонентом, без использования третьих-party controls.

После изучения вопроса, было найдено решение, которое работает под Windows Vista и Windows 7. Для этого нужно изменить стиль MonthCalendar, чтобы включить стиль MCS_DAYSTATE. Затем, можно использовать функцию SendMessage для установки стиля дня для каждого дня в MonthCalendar.

Однако, пользователь столкнулся с проблемой, что информация о жирном шрифте теряется, когда меняется вид календаря. Это происходит потому, что MonthCalendar запрашивает эту информацию, когда она ей нужна, и не сохраняет ее. В документации к MCM_SETDAYSTATE сообщается, что состояние дня не будет сохранено, когда другой участок календаря будет проскроллен в виду.

В качестве альтернативного решения, пользователь может использовать настоящий MonthCalendar вместо того, который отображается в TDateTimePicker при нажатии кнопки DropDown. Еще одним вариантом является использование одного из уже доступных кастомных компонентов.

Вот пример кода, который демонстрирует, как установить жирный шрифт для определенных дней в MonthCalendar под Windows Vista и Windows 7:

procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
const
  DTM_GETMCSTYLE = (DTM_FIRST + 12);
  DTM_SETMCSTYLE = (DTM_FIRST + 11);
  MCS_NOTRAILINGDATES = $0040;
  MCS_SHORTDAYSOFWEEK = $0080;
  MCS_NOSELCHANGEONNAV = $0100;
  MCS_DAYSTATE = $0200;
var
  monthCalHandle: THandle;
  boldDates: array[0..2] of integer;
  style, prevstyle: LResult;
begin
  style := SendMessage(DateTimePicker1.Handle, DTM_GETMCSTYLE, 0, 0);
  style := style or MCS_DAYSTATE;
  prevstyle := SendMessage(DateTimePicker1.Handle, DTM_SETMCSTYLE, 0, style);

  monthCalHandle := SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, 0, 0);

  boldDates[0]:=$5a5a5a;
  boldDates[1]:=$5a5a5a;
  boldDates[2]:=$5a5a5a;
  SendMessage(monthCalHandle, MCM_SETDAYSTATE, 3, integer(@boldDates));
end;

Обратите внимание, что вам нужно добавить манифест Vista в файл, иначе это не будет работать.

В заключение, хочется отметить, что сделать определенные дни жирными в TDateTimePicker в Delphi7 не так просто, как может показаться на первый взгляд. Однако, с помощью правильной настройки стиля MonthCalendar и использования функции SendMessage, это можно сделать под Windows Vista и Windows 7. В качестве альтернативы, можно использовать настоящий MonthCalendar или один из уже доступных кастомных компонентов.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема изменения стиля шрифта определенных дней в компоненте TDateTimePicker в Delphi7, и предлагается решение для Windows Vista и Windows 7.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDateTimePicker ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:30:32/0.0059890747070312/0