如何让DateTimePicker控件既能显示日期又能显示时间,并且可以修改保存?
我的解决方法:
首先设置控件的format属性为yyyy年MM月dd日 HH时mm分ss秒,kind属性为dtkTime.
在想要保存控件里的值的地方,比如change事件中(当然这不是较好的地方,只取一次就够,这样只是方便各位查看效果),写下列代码:
procedure Tfrom_sms.DateTimePicker2Change(Sender: TObject);
var
ss:string;
pp:pchar;
begin
//time1:=formatdatetime('yyyy年MM月dd日 HH时mm分ss秒',DateTimePicker2.Datetime);
//用控件的Datetime属性不行.因为它只记录kind属性规定的部分(或者是dtkDate或者是dtkTime)的改变,而对另一部分不会记录改变.
pp:=StrAlloc(20); //为PChar分配内存
DateTimePicker2.GetTextBuf(pp,20);
ss:=pp;
showmessage(ss);
StrDispose(pp); //为PChar释放内存,必须要有,否则报错.
end;
需要注意或者说是目前一个BUG的地方是:
如果先修改日期,则在修改时间时日期会自动还原.
所以只能先修改时间,然后再修改日期.
不知各位是否可以解决这个问题.
之所以不用MASKEDIT(或者干脆就是EDIT)控件,是希望能借助DateTimePicker的一些优点:
1.输入有效验证(年月日时分秒都有边界,还涉及闰年闰月等问题)
2.上下调整箭头.各位可以试试,虽然平时它是时间部分专用的,但在我改过的这个例中,它对日期部分也有效果.当然,这是次要的,可有可无.主要是第1点.