Перейти к содержанию
Fire Monkey от А до Я
  • 0

Запрос на закрытие приложения при нажатии кнопки Назад


Rusland

Вопрос

Рекомендуемые сообщения

  • 0

на XE5 это работало... где нашёл не помню 

uses FMX.Platform, FMX.VirtualKeyboard ...

procedure TFSale.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
var FService : IFMXVirtualKeyboardService;
begin
  if Key = vkHardwareBack then
    begin
      TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
      if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState)
        then
          begin
            // Back button pressed, keyboard visible, so do nothing...
          end
        else
          begin
            // Back button pressed, keyboard not visible, lets exit the app...
            if MessageDlg('Выйти без сохранения?', ...
              then
                begin
                  FSale.Close; // Back button pressed CONFIRMED...
                end
              else
                begin
                  Key := 0; // Back button pressed IGNORED...
                end;
          end;
    end;
end;
Изменено пользователем beklexx
Ссылка на комментарий
  • 1

Подправил вот так (чтобы работало в Delphi 10 Seattle):

 

procedure TFormMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
var
  FService : IFMXVirtualKeyboardService;
begin
  if Key = vkHardwareBack then
    begin
      TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
      if (FService <> nil) and (TVirtualKeyBoardState.Visible in FService.VirtualKeyBoardState)
        then
          begin
            // Back button pressed, keyboard visible, so do nothing...
          end
        else
          begin
            MessageDlg('Закрыть приложение?', TMsgDlgType.mtConfirmation,
                  [TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo], 0,
                  procedure(const AResult: TModalResult)
                  begin
                    Case AResult of
                    mrYes: FormMain.Close;
                    mrNo:  Exit;
                    end;
                  end);
            Key:=0;
          end;
    end;
end;

Работает нормально, только в диалоге запроса No стоит впереди. Как бы No и Yes поменять местами?  :)

А еще лучше заменить на Да и Нет.

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
  • Модераторы

Работает нормально, только в диалоге запроса No стоит впереди. Как бы No и Yes поменять местами?  :)

А еще лучше заменить на Да и Нет.

заменить незнаю можно или нет, но расположение зависит от самого девайса

Ссылка на комментарий
  • 0

Обнаружил одну странность (Delphi 10 Seattle update 1), если использовать одну кнопку в диалоге, то по модальному результату mrYes, нет срабатывания процедуры. Стоит добавить вторую кнопку, все начинает работать как надо.

Почему так?

      MessageDlg('Выйти из программы?', TMsgDlgType.mtInformation, [TMsgDlgBtn.mbYes], 0,
        procedure(const AResult: TModalResult)
          begin
            case AResult of
              mrYes: Close;
            end;
          end);
Изменено пользователем HyperZen
Ссылка на комментарий
  • 0
  • Модераторы

Если внимательно смотреть, то не бывает диалогов с одной кнопкой Yes, всегда OK

case AResult of
   mrOk: Close;
end;
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...