Триггер включения TButton с выбором двух (2) дат в TDateTimePickers - PullRequest
1 голос
/ 02 февраля 2020

У меня установлен TButton «не включен», который должен активироваться двумя (2) TDateTimePicker при выборе обеих дат.

Мои даты TDateTimePicker по умолчанию установлены на дату now (). Итак, в OnChange я создал следующие коды и не смог понять их правильно:

procedure TfrmPayroll.EnableButton; //my created procedure
begin
  if (dtpFrom.Date = Now()) and
     (dtpTo.Date = Now()) then
  begin
    btnOpen.Enabled := False;
  end
  else
  begin
    btnOpen.Enabled := True;
  end;

В результате TButton включен, даже если я выбрал только одну дату из двух заданных условий.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2020

Ваш код требует, чтобы оба DTP были установлены на Now для отключения кнопки, а не либо DTP, являющийся Now.

Для исправьте существующий код, используйте оператор or вместо оператора and:

procedure TfrmPayroll.EnableButton;
begin
  if (dtpFrom.Date = Now()) or
     (dtpTo.Date = Now()) then
  begin
    btnOpen.Enabled := False;
  end else begin
    btnOpen.Enabled := True;
  end;
end;

Это можно упростить, если переписать условие для использования оператора <> вместо = operator:

procedure TfrmPayroll.EnableButton;
begin
  btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;

И, к вашему сведению, вы должны использовать Date() вместо Now(), поскольку свойство TDateTimePicker.Date не должно включать время, а Now(). И вам следует использовать локальную переменную, чтобы избежать состояния гонки, если локальные часы изменяют дату между двумя Date() вызовами:

uses
 ..., DateUtils;

procedure TfrmPayroll.EnableButton;
var
  CurrentDate: TDate;
begin
  CurrentDate := Date();
  btnOpen.Enabled := (DateOf(dtpFrom.Date) <> CurrentDate) and (DateOf(dtpTo.Date) <> CurrentDate);
end;
2 голосов
/ 02 февраля 2020

Вы можете просто написать:

procedure TfrmPayroll.EnableButton; //my created procedure
begin
  btnOpen.Enabled := (dtpFrom.Date <> Now()) and (dtpTo.Date <> Now());
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...