Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 为什么TDateTimePicker.Checked在Windows 7上总是返回True?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个在Delphi 2007中构建的应用程序,在窗体上有一个TdatetiR_133_11845@ePicker.此日期时间选择器将Showcheckbox属性设置为True,其旁边的日期或时间显示一个复选框,每当用户选择日期时,或者通过代码更改日期或时间时,该复选框将自动选中.此复选框的状态也可由用户手动控制,其状态可由checked属性确定.

以下代码显示如何在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主题

解决方法

这是Delphi日期时间选择器控件的实现中的 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,请注明来意。