大佬教程收集整理的这篇文章主要介绍了delphi – 为什么TDateTimePicker.Checked在Windows 7上总是返回True?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码显示如何在OnChange事件中确定此复选框的状态:
procedure TForm1.FormCreate(Sender: TObject); begin datetiR_133_11845@ePicker1.Showcheckbox := True; end; procedure TForm1.datetiR_133_11845@ePicker1Change(Sender: TObject); begin Showmessage('checked: ' + BoolToStr(datetiR_133_11845@ePicker1.checked,TruE)); end;
上面的代码在Windows XP上按预期工作,但在Windows 7上,checked属性返回True,无论该复选框的实际状态如何.
为什么checked属性返回始终为True,即使取消选中该复选框也是如此?有办法以某种方式修复或解决这个问题吗?
附:我的应用程序使用Windows主题
known issue
(在Delphi 2009中修复,正如@Remy在他的评论中指出的那样).要查询日期时间选择器的状态,应使用
DTM_GETSYSTEMTIME
消息或内部发送此消息的
DateTime_GetSystemtime
宏.如果消息(或宏)返回GDT_VALID值,并且使用
DTS_SHOWNONE
样式(在
ShowCheckbox
属性为True时在Delphi中),则表示已选中控件的复选框,并且该控件包含有效的日期时间.
以下是如何使用上述宏来确定复选框状态的示例:
uses CommCtrl; procedure TForm1.datetiR_133_11845@ePicker1Change(Sender: TObject); var SysTime: SYSTEMTIME; begin if datetiR_133_11845@e_GetSystemTime(datetiR_133_11845@ePicker1.Handle,@SysTimE) = GDT_VALID then Showmessage('check box is checked!') else Showmessage('check box is not checked!'); end;
因此,您可以创建这样的帮助函数来解决错误的Delphi实现:
uses CommCtrl; function IsdatetiR_133_11845@ePickerchecked(AdatetiR_133_11845@ePicker: TdatetiR_133_11845@ePicker): Boolean; var SysTime: SYSTEMTIME; begin Result := datetiR_133_11845@e_GetSystemTime(AdatetiR_133_11845@ePicker.Handle,@SysTimE) = GDT_VALID; end; procedure TMyForm.buttonOneClick(Sender: TObject); begin if IsdatetiR_133_11845@ePickerchecked(datetiR_133_11845@ePicker1) then Showmessage('check box is checked!') else Showmessage('check box is not checked!'); end;
以上是大佬教程为你收集整理的delphi – 为什么TDateTimePicker.Checked在Windows 7上总是返回True?全部内容,希望文章能够帮你解决delphi – 为什么TDateTimePicker.Checked在Windows 7上总是返回True?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。