Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ECommonCalendarError:无法设置日历日期或时间_Delphi_Runtime Error_Delphi 2009 - Fatal编程技术网

Delphi ECommonCalendarError:无法设置日历日期或时间

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; 当我运行程序并试图使用键盘上的向上箭头更改日期时,我收到此错误消息。但是如果我用鼠标将日期更改为最后一个可能的日期,我不会收到错误消息。之

我启动了一个新的Delphi应用程序,在主窗体上删除了一个
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