如何隐藏TDateTimePicker中的“今日”按钮?
问题描述:
我目前正在使用C++ Builder 5构建的遗留程序。如何隐藏TDateTimePicker中的“今日”按钮?
我正在研究一个我们有几个TDateTimePicker
控件的区域。 dtp本身工作正常,但由于我目前正在处理本地化问题,我正在寻找删除选择器底部的“今日”按钮,该按钮允许用户点击它以自动选择今天的日期。
另一种方法是从底部删除格式化的日期字符串,以便它表示“Today”而不是“Today MM/DD/YYYY”。
我发现了一些解决方案,可以格式化其他语言的Today文本,但C++没有。我尝试过使用一些内置函数,比如高度和文本,但都不成功。我通常不是这个代码工作的人,所以我可能希望错过简单的东西。
编辑:我在这个项目的虚拟机使用Windows XP。
答
要删除“今日”文本,您必须在DTP的子月历上启用MCS_NOTODAY
窗口样式。因为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);
这是否在XP下工作?该链接列出了Vista/2008的最低要求。你能提供一个例子吗? – wgallon