红鱼儿

图文解说ChinaCock日期组件CCDateTimePicker(二)

上文,介绍了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);

至此,一个星期选择器就实现完成了!

利用这个方法,相信你也能想到,可以实现任意类型的列表了!

 

posted on 2024-04-28 14:16  红鱼儿  阅读(135)  评论(0编辑  收藏  举报