首页 > 解决方案 > ECommonCalendarError: 未能设置日历日期或时间

问题描述

我启动了一个新的 Delphi 应用程序,TDateTimePicker在主窗体上放置了一个,并添加了以下代码:

procedure TForm1.FormShow(Sender: TObject);
begin
 DateTimePicker1.MaxDate:= Now - 9;
 DateTimePicker1.Date:= Now - 10;
end;

当我运行程序并尝试使用UP ARROW键盘更改日期时,我收到此错误消息。但是,如果我将日期更改为MOUSE最后可能的日期,我不会收到错误消息。之后,我也可以使用箭头键更改日期。

我不明白出了什么问题以及如何解决此问题。

更新: 发生该错误时,我发现了另一种情况:当我下拉列表并再次关闭它时,没有选择任何内容,但使用以下设置:

procedure TForm1.FormShow(Sender: TObject);
var D:TDate;
begin
 D:= Date;
 DateTimePicker1.Date:= D;
 DateTimePicker1.MaxDate:= D;
end;

标签: delphiruntime-errordelphi-2009

解决方案


Delphi 2009 VCL 中有一个错误。问题是MaxDate属性的设置器没有将 23:59:59 的时间部分添加到最大范围限制。然后,当一个离开时间属性的时间不同于 00:00:00 并且仅设置Date属性时,DateTime_SetSystemTime宏由于日期时间范围的日期时间溢出而失败(这导致了该异常)。

为避免这种情况,您可以将Time属性重置为 00:00:00,或仅将日期(保持时间部分为零)分配给DateTime属性。


推荐阅读