上文,介绍了CCDateTimePicker基本用法,实现日期、时间等各种日期格式的输入,用法简单,代码简洁。
能不能用这个控件,来实现自定义的输入格式呢?答案是能。比如:我的需要求就遇到这样的情况,用户要选择星期几的方式,如下图,是已经实现的结果:
接下来看看如何实现的?
第一步,先定义一个数组:
const WeekNames:array[0..6] of string=('星期一','星期二','星期三','星期四','星期五','星期六','星期日');
通过这个WeekNames来定义要显示的星期几。
第二步,初始化CCDateTimePicker:
CCDateTimePicker1.Reset; self.CCDateTimePicker1.ShowToolbar := false; //自定义年作为星期1-7 self.CCDateTimePicker1.MinYear := 1; self.CCDateTimePicker1.MaxYear := 7; //只显示年 self.CCDateTimePicker1.PickerType := TCCDateTimePicker.TPickerType.Year; if not InRange(self.CCDateTimePicker1.Year, 1, 7) then begin self.CCDateTimePicker1.Year := System.math.ifthen(DayOfWeek(now) = 1, 7, DayOfWeek(now) - 1); end;
看代码,就是让CCDateTimePicker选择年份,并且输入范围为1-7。
第三步,利用事件OnSetCustomText定义CCDateTimePicker显示内容:
procedure TInputWeekItem.CCDateTimePicker1SetCustomText(ASender: TObject; AItem: TCCDateTimePickerItem; var AText: string); begin if AItem.ItemType = TCCDateTimePickerItem.TItemType.ItemType_Year then begin AText:= WeekNames[AItem.Value-1]; end; end;
最后一步,显示CCDateTimePicker并应用返回的结果:
self.CCDateTimePicker1.Show( // procedure(AResult: TModalResult; ADateTime: TDateTime) begin if AResult = mrOK then begin edtValue.Text:= WeekNames[YearOf(ADateTime)-1]; end else begin //showmessage('取消选择'); end; end);
至此,一个星期选择器就实现完成了!
利用这个方法,相信你也能想到,可以实现任意类型的列表了!
标签:begin,end,CCDateTimePicker1,self,CCDateTimePicker,ChinaCock,WeekNames,图文 From: https://www.cnblogs.com/kinglandsoft/p/18163664