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

Удаление формы из back-стека


krapotkin

Вопрос

Если я из формы 1 вызову форму 2, из нее перейду к форме 3, то при нажатии Back я вернусь к форме 2.

Если форма 2 была, например, формой ввода пароля, то нужно возвращаться прямо к форме 1.

Как это делать в FMX?

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

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

  • 0

это тот же костыль - и требует он формирования явного дерева состояний и перехвата и переопределения системных кнопок во всех формах

в Android уже есть эта функциональность, нужно только узнать, как ей воспользоваться

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

Если форма 2 была, например, формой ввода пароля, то нужно возвращаться прямо к форме 1.

Как это делать в FMX?

Так удалите эту форму вообще.

Судя по тому, что я накопал - у FMX свой механизм определения активной формы. Смотреть

function TScreen.NextActiveForm
Ссылка на комментарий
  • 0
  • Администраторы

Я бы сделал просто свой стек с формами. Открываеся форма, добавляем ее в стек. Для каждоый формы реализовал бы метод, типа

function NeedShow: Boolean;

При закрытии формы 3, убираем ее из стека, и проверяем NeedShow у предыдущей формы, и так далее, пока не появится форма, которую можно показывать.

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

You can implement this from your AndroidManifest.xml file, just adding[android:noHistory=true] attribute in those <activity> you want.

 

выглядит более простым, правда же?

вот и хочу найти, как это сделать

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

Это не будет работать. Так как форма FMX не имеет никакого отношения к активити. Поэтому этот аттрибут не поможет вам.

Так же этот флаг используется, чтобы осуществить навигацуию между разными активити, а в не внутри одного.

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

ок,

т.е. нужно найти стек, который создается в FMX

он же есть?

форму я создаю TMyForm.Create(NIL).Show

в OnClose стоит Action:=caFree,

т.е. по идее, она должна разрушиться при показе следующей формы

но back приводит к ней, значит создается заново

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

Например, у нас есть 3 формы MultipleForms.zip

  1. Главная (Form1)
  2. Форма ввода пароля (Form2)
  3. Третья форма (Form3)

Form2 в момент открытия Form3 должна поставить себя в очередь на самоудаление (Release). Чтобы когда откроется Form3, Form2 была уже разрушена. В этом случае после закрытия Form3, вы вернетесь в Form1.

 

Код открытия Form3 из Form2:

procedure TForm2.Button2Click(Sender: TObject);
begin
  Form3.Show;
  Release;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;
Ссылка на комментарий
  • 0

зачем такие бубны. просто не надо вызывать из 2 формы третью и все. возвращай первой форме вызов со второй, и потом в первой форме вызывай третью. тогда при закрытии третей формы перейдешь к первой. 

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

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

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

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

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

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

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

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

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

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

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