【发布时间】:2018-07-30 14:03:31
【问题描述】:
我启动了一个新的 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;
【问题讨论】:
-
这是一个 VCL 错误,已在后续版本中修复。在
CNNotify方法中,当DTN_DATETIMECHANGE通知到达时缺少FChanging标志的设置。 -
根本问题是
DTM_SETSYSTEMTIME由于现有时间部分(与最大日期时间重叠)而无法设置日期时间。 -
我对此无能为力吗?一种解决方法或其他东西...... :(如果我能以某种方式触发我用鼠标选择日期时发生的事情......在我这样做之后,一切正常......
-
您可以修改VCL源或外部使用例如intercept class like this.
-
这是相同的潜在问题。当仅设置
Date属性时,日期部分被替换,但时间仍然存在(并且将这么长的日期和时间传递给DateTime_SetSystemTime宏,由于溢出最大限制导致该异常而失败)。解决这两个问题的一种方法是将Time归零,或设置DateTime属性而不是Date。
标签: delphi runtime-error delphi-2009