Как скрыть & quot; Сегодня & quot; кнопка в TDateTimePicker?

В настоящее время я работаю над устаревшей программой, созданной в C ++ Builder 5.

Я работаю в области, где у нас есть несколько TDateTimePicker управления. Сам протокол dtp работает правильно, но из-за проблемы с локализацией, над которой я сейчас работаю, я хочу удалить кнопку «Сегодня» в нижней части окна выбора, которая позволяет пользователю щелкнуть по нему, чтобы автоматически выбрать сегодняшнюю дату.

Альтернативой этому было бы просто удалить форматированную строку даты снизу, чтобы она показала «Сегодня», а не «Сегодня MM / ДД / ГГГГ».

Я нашел несколько решений, которые позволяют форматировать текст Today на других языках, но не для C ++. Я пытался использовать некоторые из встроенных функций, таких как высота и текст, но безуспешно. Обычно я не тот, кто работает в этом коде, поэтому, я надеюсь, я упускаю что-то простое.

РЕДАКТИРОВАТЬ: я использую Windows XP на виртуальной машине для этого проекта.

0

Решение

Чтобы удалить текст «Сегодня», вы должны включить MCS_NOTODAY стиль окна в дочернем месячном календаре DTP. Этот стиль доступен с Internet Explorer 3.

в TDateTimePicker::OnDropDown событие, вы можете использовать DateTime_GetMonthCal() чтобы получить HWND календаря месяца, а затем использовать SetWindowLong/Ptr(GWL_STYLE) чтобы включить MCS_NOTODAY стиль.

#include <commctrl.h>

void __fastcall TMyForm::DateTimePicker1DropDown(TObject *Sender)
{
HWND hCalendar = DateTime_GetMonthCal(DateTimePicker1->Handle);
LONG_PTR style = GetWindowLongPtr(hCalendar, GWL_STYLE);
SetWindowLongPtr(hCalendar, GWL_STYLE, style | MCS_NOTODAY);
}

В Vista и более поздних версиях вы можете использовать DateTime_SetMonthCalStyle() чтобы включить MCS_NOTODAY стиль.

DWORD style = DateTime_GetMonthCalStyle(DateTimePicker1->Handle);
DateTime_SetMonthCalStyle(DateTimePicker1->Handle, style | MCS_NOTODAY);
1

Другие решения

Других решений пока нет …