Rusland Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 Как сделать так чтобы после нажатия кнопки Назад программа не закрывалась, а сначала выдавала запрос? Как отловить это событие? Цитата Ссылка на комментарий
0 beklexx Опубликовано 22 октября, 2015 Поделиться Опубликовано 22 октября, 2015 (изменено) на 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; Изменено 22 октября, 2015 пользователем beklexx Rusland 1 Цитата Ссылка на комментарий
1 Rusland Опубликовано 26 октября, 2015 Автор Поделиться Опубликовано 26 октября, 2015 (изменено) Подправил вот так (чтобы работало в 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 поменять местами? А еще лучше заменить на Да и Нет. Изменено 26 октября, 2015 пользователем Rusland Hevard 1 Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 26 октября, 2015 Модераторы Поделиться Опубликовано 26 октября, 2015 Работает нормально, только в диалоге запроса No стоит впереди. Как бы No и Yes поменять местами? А еще лучше заменить на Да и Нет. заменить незнаю можно или нет, но расположение зависит от самого девайса Rusland 1 Цитата Ссылка на комментарий
0 HyperZen Опубликовано 2 февраля, 2016 Поделиться Опубликовано 2 февраля, 2016 (изменено) Обнаружил одну странность (Delphi 10 Seattle update 1), если использовать одну кнопку в диалоге, то по модальному результату mrYes, нет срабатывания процедуры. Стоит добавить вторую кнопку, все начинает работать как надо. Почему так? MessageDlg('Выйти из программы?', TMsgDlgType.mtInformation, [TMsgDlgBtn.mbYes], 0, procedure(const AResult: TModalResult) begin case AResult of mrYes: Close; end; end); Изменено 2 февраля, 2016 пользователем HyperZen Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 февраля, 2016 Модераторы Поделиться Опубликовано 3 февраля, 2016 Если внимательно смотреть, то не бывает диалогов с одной кнопкой Yes, всегда OK case AResult of mrOk: Close; end; HyperZen 1 Цитата Ссылка на комментарий
0 HyperZen Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 Это я немного затупил Цитата Ссылка на комментарий
Вопрос
Rusland
Как сделать так чтобы после нажатия кнопки Назад программа не закрывалась, а сначала выдавала запрос? Как отловить это событие?
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.