В настоящее время я работаю над устаревшей программой, созданной в C ++ Builder 5.
Я работаю в области, где у нас есть несколько TDateTimePicker
управления. Сам протокол dtp работает правильно, но из-за проблемы с локализацией, над которой я сейчас работаю, я хочу удалить кнопку «Сегодня» в нижней части окна выбора, которая позволяет пользователю щелкнуть по нему, чтобы автоматически выбрать сегодняшнюю дату.
Альтернативой этому было бы просто удалить форматированную строку даты снизу, чтобы она показала «Сегодня», а не «Сегодня MM / ДД / ГГГГ».
Я нашел несколько решений, которые позволяют форматировать текст Today на других языках, но не для C ++. Я пытался использовать некоторые из встроенных функций, таких как высота и текст, но безуспешно. Обычно я не тот, кто работает в этом коде, поэтому, я надеюсь, я упускаю что-то простое.
РЕДАКТИРОВАТЬ: я использую Windows XP на виртуальной машине для этого проекта.
Чтобы удалить текст «Сегодня», вы должны включить 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);
Других решений пока нет …