• Android平台自己定制日期对话框


    我想为一个按钮定制一个日期对话框,即用户点击按钮就弹出一个日期对话框,该如何实现呢?

    首先,引用单元FMX.Pickers, FMX.Platform,然后声明一个日期对话框:

        FDateTimePicker: TCustomDateTimePicker;

    然后,在Create事件中建立这个对话框:

    procedure TQueryCpzsDoc.AfterConstruction;
    var
      PickerService: IFMXPickerService;
    begin
      if TPlatformServices.Current.SupportsPlatformService(IFMXPickerService, PickerService) then
      begin
        FDateTimePicker := PickerService.CreateDateTimePicker;
        FDateTimePicker.Parent := Self;
        FDateTimePicker.OnDateChanged := HandlerPickerDateTimeChanged;
        FDateTimePicker.OnHide:=Self.OnDateHide;
      end;
    
    end;

    同时要接管用户输入日期点确定的事件,OnDateChanged:

    procedure TQueryCpzsDoc.HandlerPickerDateTimeChanged(Sender: TObject; const ADate: TDateTime);
    begin
      DateButton.Text := FormatDateTime('yyyy-mm-dd', ADate);
    end;

    最后,别忘记销毁这个对话框:

    procedure TQueryCpzsDoc.BeforeDestruction;
    begin
      if Assigned(FDateTimePicker) then
      begin
        if FDateTimePicker.IsShown then
          FDateTimePicker.Hide;
        FreeAndNil(FDateTimePicker);
      end;
      inherited;
    end;

    现在,点击DateButton时,显示这个对话框:

    procedure TQueryCpzsDoc.DateButtonClick(Sender: TObject);
    var
      d: TDateTime;
    begin
      if TryStrToDate(DateButton.Text, d) then
        FDateTimePicker.Date := d
      else
        FDateTimePicker.Date := Date;
    
      FDateTimePicker.Show;
    end;

    万事大吉,为一个按钮,定制了一个日期对话框。

    遇到的问题:

    在我的实际项目中,发现这个对话框会自动隐藏,经查,发现是TTabControl,用Timer定时显示一个TabItem时,将我的对话框给关了。查到原因就好解决了,当显示这个对话框时,Timer.Enabled:=False,解决!

  • 相关阅读:
    ME05 黑匣子思维
    F06 《生活中的投资学》摘要(完)
    ME03 关于运气要知道的几个真相
    ME02 做一个合格的父母To be good enough parent
    ME02 认知之2017罗胖跨年演讲
    F03 金融学第三定律 风险共担
    F05 敏锐的生活,让跟多公司给你免单
    ML04 Accord 调用实现机器算法的套路
    D02 TED Elon Mulsk The future we're building — and boring
    ML03 利用Accord 进行机器学习的第一个小例子
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14886607.html
Copyright © 2020-2023  润新知