Delphi ECommonCalendarError:无法设置日历日期或时间
我启动了一个新的Delphi应用程序,在主窗体上删除了一个Delphi ECommonCalendarError:无法设置日历日期或时间,delphi,runtime-error,delphi-2009,Delphi,Runtime Error,Delphi 2009,我启动了一个新的Delphi应用程序,在主窗体上删除了一个TDateTimePicker,并添加了以下代码: procedure TForm1.FormShow(Sender: TObject); begin DateTimePicker1.MaxDate:= Now - 9; DateTimePicker1.Date:= Now - 10; end; 当我运行程序并试图使用键盘上的向上箭头更改日期时,我收到此错误消息。但是如果我用鼠标将日期更改为最后一个可能的日期,我不会收到错误消息。之
TDateTimePicker
,并添加了以下代码:
procedure TForm1.FormShow(Sender: TObject);
begin
DateTimePicker1.MaxDate:= Now - 9;
DateTimePicker1.Date:= Now - 10;
end;
当我运行程序并试图使用键盘上的向上箭头更改日期时,我收到此错误消息。但是如果我用鼠标将日期更改为最后一个可能的日期,我不会收到错误消息。之后,我也可以用箭头键更改日期
我不明白什么是错误的,以及如何纠正这个问题
更新:
出现该错误时,我发现了另一种情况:当我下拉列表并再次关闭它时,没有选择任何内容,但使用以下设置:
procedure TForm1.FormShow(Sender: TObject);
var D:TDate;
begin
D:= Date;
DateTimePicker1.Date:= D;
DateTimePicker1.MaxDate:= D;
end;
Delphi 2009 VCL中有一个bug。问题是属性的setter没有将23:59:59的时间部分添加到最大范围限制。然后,如果将属性保留在与00:00:00不同的时间,并仅设置属性,则宏将失败,因为日期时间范围的日期时间溢出(导致该异常)
为了避免这种情况,您可以将属性重置为00:00:00,或者只为属性指定日期(保持时间部分为零)。这是一个VCL错误,在以后的版本中已修复。在CNNotify
方法中,当DTN\u DATETIMECHANGE
通知到达时,缺少FChanging
标志的设置。根本问题是DTM\u SETSYSTEMTIME
无法设置日期时间,因为存在时间部分(与最大日期时间重叠)。对此我无能为力吗?一个变通办法或什么的…:(如果我能以某种方式触发当我用鼠标选择日期时发生的事情…在我这样做之后,一切正常…您可以修改VCL源或外部使用,例如。这是相同的基本问题。当仅设置date
属性时,日期部分被替换,但时间仍然保留。)(如果将很长的日期和时间传递给DateTime\u SetSystemTime
宏,则会由于溢出最大限制而失败,从而导致该异常)。解决这两个问题的一种方法是将time
归零,或者设置DateTime
属性而不是date
。