我在Delphi6表单上有一个默认日期为30/12/1899年的DateTimePicker。我希望用户能够点击它或打开下拉日历,并选择当前日期。使用OnClick过程时:
DateTimePicker.Date :=日期
将可编辑部分中的日期设置为日期,当用户单击该日期或日历下拉按钮时,但不会强制日历自动选择今天的日期。如果在DateTimePicker的OnDropDown过程中使用此代码,结果是相同的。
我需要使用像in this post这样的东西来操纵日历吗?还是我错过了一个简单的财产?
谢谢马特
发布于 2014-08-18 14:58:08
您可以通过MonthCal_SetCurSel直接更新月份日历窗口。
类似的情况(我将“默认”逻辑留给您处理):
uses Commctrl;
type TDateTimePickerAccess = class(TDateTimePicker);
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var
ST: TSystemTime;
CalendarHandle: HWND;
begin
DateTimePicker1.Date := Date;
DateTimeToSystemTime(Date, ST);
CalendarHandle := TDateTimePickerAccess(DateTimePicker1).GetCalendarHandle;
MonthCal_SetCurSel(CalendarHandle, ST);
end;就我个人而言,我会将默认日期设置为任何默认日期(Date)。
发布于 2014-08-18 10:33:17
我找不到解决您请求的现有属性。看起来你提供的链接解决了问题,但我还没有进行测试。
一个简单的"Hacky“解决方案如下所示。
procedure TFormMain.FormCreate(Sender: TObject);
var DefaultDate : TDate;
begin
//Set the default date
DefaultDate := EncodeDate(1899, 12, 30);
DateTimePicker1.MinDate := DefaultDate; //Use MinDate to store the default date
DateTimePicker1.Date := DefaultDate;
end;
procedure TFormMain.DateTimePicker1DropDown(Sender: TObject);
begin
//Only continue if the component is set to the default date
if CompareDate(DateTimePicker1.MinDate, DateTimePicker1.Date) <> 0 then exit;
//Hack: Change the DateTimePicker's Kind Type to disrupt the current drop down event
DateTimePicker1.Kind := dtkTime;
DateTimePicker1.Kind := dtkDate;
//Change to today
DateTimePicker1.DateTime := now;
//Send a message to the drop down the calander once again
SendMessage(DateTimePicker1.Handle,WM_SYSKEYDOWN,VK_DOWN, 0);
end;https://stackoverflow.com/questions/25358615
复制相似问题