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

[Android] Возврат к предыдущей открытой форме по нажатию на кнопку Назад (Back)


alewka006

Вопрос

Подскажите, пожалуйста, как сделать такие переходы между формами, чтобы при нажатии на Андроиде системной кнопки "Назад" можно было вернуться на предыдущую форму?

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

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

  • 0

Если на Андроиде в приложении Вы создаете новые формы ''newForm.Show" или newForm.ShowModal(procedure( ...., то кнопка "Назад" по умолчанию перемещает обратно между формами.

 

Может быть имелось ввиду создание обработчика более сложного поведения внутри формы? В таком случае, при нажатии кнопки "Назад" (а так же "Menu") на форме срабатывает событие onKeyUp.Там-то и можно организовать обработку поведения:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
...
      // Обработка аппаратной клавиши "Back"
      if Key = vkHardwareBack then
      begin
        //ваш обработчик поведения
        ....
        Key := 0; // отмена стандартного действия

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

Спасибо за ответ. Попробую. Без этого обработчика при нажатии кнопки назад у меня приложение закрывается.

Точно? Может у Вас все же форма одна? Я даже поэкспериментировал на 3.2 и 4.4.

Извините, пока железки с 5-м нет :-)

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

В первом сообщении писал, что если 'новые формы ''newForm.Show" или newForm.ShowModal"...'

 

Тогда да, только в обработчике нажатия клавиши анализировать состояние форм.

 

Но по моему мнению (не для спора), Form1.Visible:=false; Form2.Visible:=true; не лучший стиль программирования. Для андроида в плане экономии ресурсов есть смысл создавать/убивать формы динамически. А если у Вас всего лишь панели интерфейса пользователя, и которые активно используются, то есть другие способы их отображения. Но все равно потребуется писать обработчик. Если без, то смотрите решение выше...

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

 

Если на Андроиде в приложении Вы создаете новые формы ''newForm.Show" или newForm.ShowModal(procedure( ...., то кнопка "Назад" по умолчанию перемещает обратно между формами.

 

Может быть имелось ввиду создание обработчика более сложного поведения внутри формы? В таком случае, при нажатии кнопки "Назад" (а так же "Menu") на форме срабатывает событие onKeyUp.Там-то и можно организовать обработку поведения:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
...
      // Обработка аппаратной клавиши "Back"
      if Key = vkHardwareBack then
      begin
        //ваш обработчик поведения
        ....
        Key := 0; // отмена стандартного действия

Спасибо, тоже пригодится, у меня в проекте одна форма и куча слайдов в TabControl, ума не мог приложить как сделать чтобы по кнопке назад оно возвращалось на главный слайд, ОГРОМНОЕ СПАСИБО! :D  :D  :D  :D  :D

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

Подскажите, пожалуйста.

Есть такой код:

unit more;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.Objects, FMX.WebBrowser;
 
type
  TForm5 = class(TForm)
    Logo: TImage;
    Layout1: TLayout;
    WebBrowser1: TWebBrowser;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form5: TForm5;
 
implementation
 
{$R *.fmx}
 
uses main;
 
procedure TForm5.FormCreate(Sender: TObject);
begin
logo.Width:=Form5.ClientWidth;
logo.Height:=Form5.ClientWidth/2.8;
WebBrowser1.Width:=Form5.ClientWidth-30;
WebBrowser1.Height:=Form5.ClientHeight-30;
end;
 
 
procedure TForm5.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
// Обработка аппаратной клавиши "Back"
      if Key = vkHardwareBack then
      begin
        //ваш обработчик поведения
        WebBrowser1.Visible:=False;
        Key := 0; // отмена стандартного действия
       end;
 
end;
 
procedure TForm5.SpeedButton1Click(Sender: TObject);
begin
WebBrowser1.Visible:=True;
end;
 
 
 
end.
 
При нажатии на кнопку на экране появляется браузер. При нажатии кнопки Назад на телефоне он скрывается. Но стоит прикоснуться к браузеру и обработчик перестает работать. 
Что можно сделать чтобы при любом раскладе при нажатии Назад браузер скрывался?
Ссылка на комментарий

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

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

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

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

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

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

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

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

×
×
  • Создать...