delphi – TMonthCalendar行为发生了变化
在将我的一个Win32 VCL应用程序从Delphi 2006迁移到delphi XE6的过程中,我遇到了以下问题:
我的一个表单有一个TMonthCalendar(插入TPanel用于记录),以帮助用户选择一周在图表中查看.按周我的意思是星期一是第一天,星期日是最后一天(法国语言环境).为了实现这样的周选择模式,我将multiSelect属性设置为true,并将以下代码放在CalendarClick事件中: MonthCalendar1.MultiSelect := True; //Temporarily storing the selected day in a variable TempoDate := MonthCalendar1.Date; //searching for the monday right before the selected day (by user) while dayOfWeek(TempoDate) <> 2 do TempoDate := IncDay( TempoDate,-1 ); //Setting the monday as the start date of the selection MonthCalendar1.Date := TempoDate; //Setting the Sunday as the last day of selection MonthCalendar1.EndDate := IncDay(tempoDate,6); 以前在Delphi 2006上运行良好(在win XP计算机上编译). >当单击右箭头(>)切换到下个月时,它大部分时间都会失败.当包含下个月的第一个星期的星期一仍然在上个月时,它实际上失败了.例如:从9月14日到2014年10月的转换失败是因为10月1日之前的星期一是9月(9月29日星期一). 之前曾经工作的所有东西. 我做了一些特定的隔离测试: >在XE6下创建具有相同行为的最小应用程序 – >仍然失败(当然) 我的直觉是,TMonthCalendar现在使用.Date属性来定义要显示的月份,而在D2006上,它使用.EndDate属性. 谢谢你的帮助 有用的文件: http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.ComCtrls.TMonthCalendar 解决方法
不幸的是我不能为你提供解决方案,但是我已经为当前行为提供了解释.
您面临的问题是TMonthCalender控件本身以及哪些日期字段即使在使用多选时也会被选中. 至于查找开始和结束周日期,请使用以下函数: TempDate := MonthCalendar1.Date; WeekStart := StartOfTheWeek(TempDate); WeekEnd := EndOfTheWeek(TempDate); 这两个函数都将星期一视为一周中的第一天. 我希望我能帮助你更多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |