在使用TRzDateTimePicker的时候。手动设置TRzDateTimePicker的时间后,要么只能设置日期,要么只能设置时间,这个根据该控件的kind属性决定的,且该属性只有dtkTime 和dtkDate两种情况。我们既不想放2个这样的控件,又想同时修改date和time。那么需要做如下处理:
this problem can be solved by reading the Text property, but in delphi this property is protected. so...
TDTPicker = class(TControl)
public
property Text;
end;
in DTPicker onChange read the text and convert to DateTime property
DT1.DateTime := StrToDateTime(TDTPicker(DT1).Text);
上面的DT1是你的TDateTimePicker or TRzDateTimePicker。
说明:StrToDateTime 和电脑的本地时间格式有关系,如果设定的格式和电脑的格式不一致就会报错。
我们可以这么做:
var
FSetting : TFormatSettings;
DateTime1: tDateTime;
begin
FSetting := TFormatSettings.Create(LOCALE_USER_DEFAULT);
try
FSetting.ShortDateFormat:='yyyy-MM-dd';
FSetting.DateSeparator:='-';
FSetting.TimeSeparator:=':';
FSetting.LongTimeFormat:='hh:mm:ss';
DT1.DateTime := StrToDateTime(TDTPicker(DT1).Text,FSetting);
finally
freeandnil(FSetting);
end;
end;
也可以这么做:
var
formatsetting:TFormatSettings;
begin
GetLocaleFormatSettings(GetUserDefaultLCID,formatsetting);
formatsetting.DateSeparator:='-';
formatsetting.TimeSeparator:=':';
formatsetting.ShortDateFormat:='yyyy-MM-dd';
formatsetting.ShortTimeFormat:='HH:mm:ss';
dtp1.DateTime := StrToDateTime(TDTPicker(dtp1).Text,formatsetting);
end;
参考:https://forums.embarcadero.com/message.jspa?messageID=354510