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

ShowModal not implemented on this platform


Steepe_Hare

Вопрос

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

На Windows делал так и всё было отлично:

  with TForm3.Create(Application) do
    try
      if (ShowModal = mrOK) then
        MakeSomething(StrToInt(SpinBox1.Text), StrToInt(SpinBox2.Text));
    finally
      Free;
    end;

На Андроиде получаю:

Project project1.apk raised exception class ENotImplemented with message 'ShowModal not implemented on this platform'.
 

ОК, поменяем ShowModal на Show, но как узнать, что пользователь нажал OK, а не отказался??

 

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

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

  • 0
  • Модераторы
42 минуты назад, Steepe_Hare сказал:

у вас TfrmLogin создается вручную. Нужно ли ей где-то делать Free? Или память сама освободится после закрытия приложения?

без разницы, можете прописать в OnClose формы авторизации

Action := TCloseAction.caFree;

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

Ссылка на комментарий
  • 0
  • Модераторы
33 минуты назад, Steepe_Hare сказал:

вы знаете, я обнаружил, что пока не отработает код внутри


  frmLogin.Show(
    procedure
    begin
    ...
    end);

то второе окно не закроется(

Нужно поменять в форме авторизации последовательность, сначала закрытие потом выполнение анонимной процедуры.

Я не проверял, но попробуйте

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

в главной форме объявить 

void __fastcall OnOptFormReady(TObject *Sender);

в вызываемой форме 

private:	// User declarations
	TNotifyEvent FOnReady;
public:		// User declarations
	__property TNotifyEvent OnReady = { read = FOnReady, write = FOnReady };

показать форму

if ( !fmLogin ) fmLogin = new TfmLogin(this);
fmLogin->OnReady = OnOptFormReady;
#ifdef WIN32
fmLogin->ShowModal();
#else
fmLogin->ShowFullScreenIcon = true;
fmLogin->Show();
#endif

по кнопкам в "модальном" окне вызвать событие:

Close();
ModalResult = mrOk; // если ок
if ( FOnReady ) FOnReady( (TObject*)this );

и обработка callback:

void __fastcall TForm1::OnOptFormReady(TObject *Sender)
{
if ( Sender == fmLogin )
    {
        if ( fmLogin->ModalResult != mrOk ) return;
        ApplySettings();
    }

код получается кроссплатформенный

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

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

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

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

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

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

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

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

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

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

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