• 0
Alex Bakulin

vkHardwareBack и все-все-все

Вопрос

Создаю стандартное мобильное приложение, которое предлагает Delphi Berlin. Там есть обработчик кнопки Назад. Собственно у меня задача, после того, как человек перешел в какой-то из режимов приложения, на эту кнопку реагировать, а именно присваивать Key := 0 и делать Application.Terminate. Но это не срабатывает, пролистываются все экраны приложения до первого и только после этого идет выход...

Возможно я что-то не так для Андроид использую. Как мне закрыть приложение по этой кнопке? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 ответа на этот вопрос

  • 0

Я так понимаю, что "экраны" - это отдельные формы? А нажатие клавиши обрабатываете в главной форме? Если так, то, как вариант, вместо форм использовать фреймы. И тогда все заработает почти без изменений в коде

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
20 часов назад, sinuke сказал:

Я так понимаю, что "экраны" - это отдельные формы? А нажатие клавиши обрабатываете в главной форме? Если так, то, как вариант, вместо форм использовать фреймы. И тогда все заработает почти без изменений в коде

Нет, это TTabControl, соответственно переключения идут между вкладками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

На главной форме обработать FormKeyUp. 

В начале Key:=0; а потом, что угодно.

 

procedure MyForm.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  if (Key =vkHardWareBack) then
  begin
  Key:=0;
   SharedActivity.moveTaskToBack(True);
  end;

Изменено пользователем Dogos

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 17.04.2017 в 18:05, Dogos сказал:

procedure MyForm.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
  if (Key =vkHardWareBack) then
  begin
  Key:=0;
   SharedActivity.moveTaskToBack(True);
  end;

В том и дело, что не работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: serg557
      День добрый!
      Ситуация такова:
      1. Загружаю вебстраничку в AnsiString - тут все отлично работает как на винде так и под андроид;
      2. Пытаюсь ее отпарсить с использованием стандартных методов AnsiString- .Pos(), .SubString(), .Delete(), - на винде все работает - на андроиде -нет.
       Вопрос в следующем - чем работать на с текстом - чтобы одинаково работало под андроидом?
       
    • Автор: DirtyBorov
      За ранее прошу простить если не в ту ветку. Вопрос двоякий и анимация и жесты.
      Нужно реализовать анимацию, таким образом, что бы она постепенно останавливалась. Вот например есть 10 картинок, надо их пальцем прокручивать. Но так, чтоб они постепенно останавливались. Причем картинки небольшие, сразу на экране могут быть 3 картинки.  Как бы лента из картинок. Картинок может быть много 100+. Стоит ли копать в сторону анимации? Не будет ли тормозить на слабеньком телефоне?
      Посоветуйте куда копать - анимация, Box2D?
    • Автор: Рагим
      Добрый день. Пишу приложение на Delphi XE7 под Андроид. Код типа 
       
      if Key = vkHardwareBack then
      begin
      // Do whatever you want to do here
      Key := 0; // Set Key = 0 if you want to prevent the default action
      end;
       
      отлично работал в XE6 и перестал работать после обновления. Приложение выполняет все что находится до строки Key:=0, а потом закрывается. Причем не закрывает подключения TIdTCPServer? в результате чего не выгружается полностью. Вышеуказанный код надо использовать как при выходе из приложения, так и при переходе из формы в форму. В чем по вашему мнению может быть проблема?
    • Автор: Igor
      По умолчанию приложение написанное в Delphi XE6 Update 1 под Android устанавливается во внутреннюю память устройства, и насколько я понял не подлежит переносу.
       
      Можно ли установить приложение на SD карту или разблокировать возможность переноса на SD?
       
      Для установки на SD ориентировочно смотрю в сторону Project -> Version info (Android) -> package
      но там даже когда стандартный com.embarcadero.$(ModuleName) меняешь на $(ModuleName) уже что-то не так.
       
      Предполагаю, что может быть можно вписать что-то типо "/storage/sdcard0/com.embarcadero.$(ModuleName)", но точно не знаю, + ко всему вроде не везде на SD такой путь, и не везде есть вообще SD. Лучший вариант проверять есть ли SD и ставить на него, если есть, иначе во внутреннюю память или предоставлять выбор. Но как?
       
      Подскажите? Честно скажу, методом тыка не пробовал.
    • Автор: SerhioUser
      Здравствуйте!
       
      Вопрос по Андроиду.
      Как из одного приложения (A) запустить инсталляцию apk другого приложения (Б) (желательно полностью в авто режиме), а потом из приложения (A) запустить приложение (Б)?
      Объясняю зачем: делается корпоративная программа, (работающая на нескольких планшетах), которая часто обновляется, и нужно написать агент, который должен в авто-режиме принимать apk по сети и обновлять приложение (Б).
      Пишу на C++ Builder XE6, Андроид 7.
       
      Спасибо.
    • Автор: la_coste
      Доброго времени суток, в процессе изучения Delphi XE5 возник такой вопрос:
      Возможно ли открыть к примеру HTML страницу из файловой системы устройства в браузере по умолчанию??
      Заранее спасибо)
    • Автор: Brovin Yaroslav
      Как в настройках среды RAD Studio XE5 указать, что проект нужно собирать с использованием другой версии Android OS?
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу