红鱼儿

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,解决!

 

posted on 2021-06-15 18:16  红鱼儿  阅读(296)  评论(0编辑  收藏  举报