Delphi 在下拉列表中设置TDateTimePicker上的日期
我在Delphi6表单上有一个DateTimePicker,默认日期为1899年12月30日。我希望用户能够点击它或打开下拉日历,它选择当前日期。将OnClick过程用于: DateTimePicker.Date:=日期 将可编辑部分中的日期设置为用户单击该部分或“日历”下拉按钮时的日期,但不会强制日历自动选择今天的日期。如果在DateTimePicker的OnDropDown过程中使用此代码,结果是相同的 我是否需要使用类似的工具来操纵日历?还是我错过了一个简单的属性 谢谢Delphi 在下拉列表中设置TDateTimePicker上的日期,delphi,date,calendar,datetimepicker,Delphi,Date,Calendar,Datetimepicker,我在Delphi6表单上有一个DateTimePicker,默认日期为1899年12月30日。我希望用户能够点击它或打开下拉日历,它选择当前日期。将OnClick过程用于: DateTimePicker.Date:=日期 将可编辑部分中的日期设置为用户单击该部分或“日历”下拉按钮时的日期,但不会强制日历自动选择今天的日期。如果在DateTimePicker的OnDropDown过程中使用此代码,结果是相同的 我是否需要使用类似的工具来操纵日历?还是我错过了一个简单的属性 谢谢 Matt我找不到可
Matt我找不到可以解决您请求的现有属性。看起来你提供的链接解决了问题,但我还没有测试 一个简单的“黑客”解决方案可以如下所示
procedure TFormMain.FormCreate(Sender: TObject);
var DefaultDate : TDate;
begin
//Set the default date
DefaultDate := EncodeDate(1899, 12, 30);
DateTimePicker1.MinDate := DefaultDate; //Use MinDate to store the default date
DateTimePicker1.Date := DefaultDate;
end;
procedure TFormMain.DateTimePicker1DropDown(Sender: TObject);
begin
//Only continue if the component is set to the default date
if CompareDate(DateTimePicker1.MinDate, DateTimePicker1.Date) <> 0 then exit;
//Hack: Change the DateTimePicker's Kind Type to disrupt the current drop down event
DateTimePicker1.Kind := dtkTime;
DateTimePicker1.Kind := dtkDate;
//Change to today
DateTimePicker1.DateTime := now;
//Send a message to the drop down the calander once again
SendMessage(DateTimePicker1.Handle,WM_SYSKEYDOWN,VK_DOWN, 0);
end;
过程TFormMain.FormCreate(发送方:TObject);
var DefaultDate:TDate;
开始
//设置默认日期
DefaultDate:=编码日期(1899,12,30);
DateTimePicker1.MinDate:=默认日期//使用MinDate存储默认日期
DateTimePicker1.Date:=默认日期;
终止
过程TFormMain.DateTimePicker1下拉列表(发送方:ToObject);
开始
//仅当组件设置为默认日期时才继续
如果CompareDate(DateTimePicker1.MinDate,DateTimePicker1.Date)为0,则退出;
//Hack:更改DateTimePicker的种类类型以中断当前下拉事件
DateTimePicker1.Kind:=dtkTime;
DateTimePicker1.Kind:=dtkDate;
//换到今天
DateTimePicker1.DateTime:=现在;
//再次向下拉日历发送消息
SendMessage(DateTimePicker1.Handle,WM_SYSKEYDOWN,VK_DOWN,0);
终止
我找不到可以解决您请求的现有属性。看起来你提供的链接解决了问题,但我还没有测试
一个简单的“黑客”解决方案可以如下所示
procedure TFormMain.FormCreate(Sender: TObject);
var DefaultDate : TDate;
begin
//Set the default date
DefaultDate := EncodeDate(1899, 12, 30);
DateTimePicker1.MinDate := DefaultDate; //Use MinDate to store the default date
DateTimePicker1.Date := DefaultDate;
end;
procedure TFormMain.DateTimePicker1DropDown(Sender: TObject);
begin
//Only continue if the component is set to the default date
if CompareDate(DateTimePicker1.MinDate, DateTimePicker1.Date) <> 0 then exit;
//Hack: Change the DateTimePicker's Kind Type to disrupt the current drop down event
DateTimePicker1.Kind := dtkTime;
DateTimePicker1.Kind := dtkDate;
//Change to today
DateTimePicker1.DateTime := now;
//Send a message to the drop down the calander once again
SendMessage(DateTimePicker1.Handle,WM_SYSKEYDOWN,VK_DOWN, 0);
end;
过程TFormMain.FormCreate(发送方:TObject);
var DefaultDate:TDate;
开始
//设置默认日期
DefaultDate:=编码日期(1899,12,30);
DateTimePicker1.MinDate:=默认日期//使用MinDate存储默认日期
DateTimePicker1.Date:=默认日期;
终止
过程TFormMain.DateTimePicker1下拉列表(发送方:ToObject);
开始
//仅当组件设置为默认日期时才继续
如果CompareDate(DateTimePicker1.MinDate,DateTimePicker1.Date)为0,则退出;
//Hack:更改DateTimePicker的种类类型以中断当前下拉事件
DateTimePicker1.Kind:=dtkTime;
DateTimePicker1.Kind:=dtkDate;
//换到今天
DateTimePicker1.DateTime:=现在;
//再次向下拉日历发送消息
SendMessage(DateTimePicker1.Handle,WM_SYSKEYDOWN,VK_DOWN,0);
终止
您可以通过直接更新月历窗口。类似这样(我将“默认”逻辑留给您):
我个人会将默认日期设置为默认日期(
date
)。您可以通过直接更新月历窗口。类似这样(我将“默认”逻辑留给您):
就我个人而言,我会将默认日期设置为默认日期(
date
)。工作得很好。我用过这个方法,因为它简单得多。谢谢,做得很好。我用过这个方法,因为它简单得多。谢谢。为什么用户必须选择当前日期?为什么不从一开始就将其设置为当前日期?然后,如果用户不喜欢默认设置,他们只需要与它交互。此外,如果用户改变主意或犯错误,你的计划会不会很烦人?如果他们第一次选择了错误的日期,第二次单击按钮时,他们的选择将重置为当前日期,而不是像普通的日期-时间选择器一样保持当前值。为什么用户必须选择当前日期?为什么不从一开始就将其设置为当前日期?然后,如果用户不喜欢默认设置,他们只需要与它交互。此外,如果用户改变主意或犯错误,你的计划会不会很烦人?如果他们第一次选择了错误的日期,第二次单击按钮时,他们的选择将重置为当前日期,而不是像正常的日期-时间选择器一样保持当前值。