由于 TDateTimePicker 只能用于日期或时间,不能同时使用。如果将Kind属性设置为dtkDate,则可以指定自定义DATE格式,但忽略任何TIME格式,并且Time未定义使用该属性。如果将Kind属性设置为dtkTime,则可以指定自定义TIME格式,但忽略任何DATE格式,并且Date未定义使用该属性。虽然通过设置 Format = 'yyyy/MM/dd HH:mm:ss' 可以显示日期和时间,但读取到 DateTime 的值是初始化前的,无法正确读取出日期和时间。
   很多时候,需要同时显示日期和时间,又不想使用两个控件组合显示,如何实现呢?

方法一:通过修改 TDateTimePicker 的源码实现,打开 Vcl.ComCtrls.pas  大约 28144 行:

procedure TDateTimePicker.CNNotify(var Message: TWMNotifyDT);
try
DT := SystemTimeToDateTime(st);
if Kind = dtkDate then
SetDate(DT)
else
SetTime(DT);
// 增加一行
  SetDateTime(DT);
finally
FChanging := False;
end;

然后重新编译这个单元,生成dcu文件,替换原有的,或者是将这个修改的单元添加到自己的工程中。

方法二:基于TDateTimePicker派生新的控件。

unit uZDateTimePicker;

interface

uses
Vcl.ComCtrls, SysUtils; type
TZDateTimePicker = class(TDateTimePicker)
private
procedure SetDateAndTime;
protected
procedure Change; override;
end; implementation { TZDateTimePicker } procedure TZDateTimePicker.Change;
begin
SetDateAndTime
end; procedure TZDateTimePicker.SetDateAndTime;
begin
DateTime := StrToDateTime(Caption);
inherited;
end; end.

方法三:通过读取TDateTimePicker私有属性实现。

  // this class is just to access protected Caption property
THackDateTimePicker = class(TDateTimePicker);

这样使用

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
TDateTimePicker(Sender).DateTime := StrToDateTime(THackDateTimePicker(Sender).Caption);
end;

上面三种方法各有优缺点,我个人更喜欢第三种。

最新文章

  1. JavaScript权威指南 - 对象
  2. AP(affinity propagation)研究
  3. 接触Matlab5年一个总结(Matlab要掌握的一些要点 )
  4. 【转】NVelocity模板引擎初学总结
  5. Hibernate一对一双向关联(注解)
  6. Lining.js - 为CSS提供 ::nth-Line 选择器功能
  7. atitit.标准时间格式 互相转换 秒数 最佳实践
  8. URAL 1227 Rally Championship(树的直径)(无向图判环)
  9. CF Soldier and Badges (贪心)
  10. DTCMS,手机网站访问跳转到DTCMS官网解决方法
  11. eclipse 修改设置Ctrl+Shift+F长度
  12. C++类的成员函数(在类外定义成员函数、inline成员函数)
  13. log4j 详解
  14. ASP.net体系
  15. Web开发框架对比
  16. appledoc导出iOS代码文档的使用和问题详解(干货篇)
  17. 【mysql】关于InnoDB表text blob大字段的优化
  18. 【CF1076D】Edge Deletion 最短路+贪心
  19. POIUtil
  20. EXCEL 2007施工进度横道图制作步骤及实战练习

热门文章

  1. 07-图5 Saving James Bond - Hard Version (30 分)
  2. ffmpeg结合SDL编写播放器
  3. javaScript 判断为false
  4. uni-app 实现分享生成图片
  5. SpringCloud:搭建基于Gateway的微服务网关(一)
  6. zabbix监控ESXI主机
  7. mybatis在sql中的CDATA区
  8. What is the difference between UNION and UNION ALL?
  9. Python安装依赖包及开发工具转移到Visual Studio 2019
  10. 用PMML实现python机器学习模型的跨平台上线