Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема отображения формы в Delphi FireMonkey после обновления до Rad Studio 10.4: решение и рекомендации

Delphi , Программа и Интерфейс , Формы

Разработчики, сталкивающиеся с технологиями Delphi и Pascal, могут время от времени сталкиваться с неожиданными проблемами, особенно при обновлении версий разработки. В данной статье мы рассмотрим проблему, с которой столкнулся разработчик после обновления до Rad Studio 10.4 FireMonkey, когда приложение для Android и Windows перестало корректно работать после обновления до Android 11. После ряда попыток решения, включая обновление SDK и манипуляции файлом манифеста, было принято решение обновиться до Rad Studio 10.4. Однако после этого, при нажатии на кнопку, предназначенную для показа новой формы, форма перестала отображаться.

Исходная проблема

В коде, предназначенном для работы в Rad Studio 10.3, использовался следующий метод для создания и показа формы:

Application.CreateForm(Tfrm01, frm01);
frm01.Parent := frmMAIN;
try
  {$IFDEF ANDROID}
    frm01.Show;
  {$ENDIF}
  {$IFDEF MSWINDOWS}
    frm01.ShowModal;
  {$ENDIF}
finally
  {$IFDEF ANDROID}
    FreeAndNil(frm01);
  {$ENDIF}
  {$IFDEF MSWINDOWS}
    frm01.Free;
  {$ENDIF}
end;

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

frm01 := Tfrm01.Create(Self);

Исследование проблемы

При переходе на Rad Studio 10.4 код, который ранее работал без сбоев, перестал корректно отображать форму. Это могло быть связано с изменениями в API или внутренней логике работы компонентов FireMonkey.

Решение проблемы

Проблемой является использование метода TForm.Show(), который не является модальным и завершается немедленно, что приводит к освобождению формы до того, как она успевает отобразиться на экране. Для решения этой проблемы рекомендуется использовать метод TForm.ShowModal() для обеих платформ. На Android следует использовать перегруженный вариант метода ShowModal(), который принимает процедуру ResultProc. Для автоматического освобождения формы при закрытии, следует использовать событие OnClose формы, установив параметр Action в значение caFree.

Пример кода для события OnClose:

procedure Tfrm01.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;

Пример кода для показа формы:

frm01 := Tfrm01.Create(Application);
frm01.Parent := frmMAIN;
frm01.ShowModal(
  procedure(ModalResult: TModalResult)
  begin
    // Действия после закрытия формы
  end
);

Дополнительная информация по использованию модальных диалоговых окон FireMonkey доступна в документации: Using FireMonkey Modal Dialog Boxes.

Заключение

Обновление до новых версий разработки может привести к необходимости внесения изменений в код. Важно следить за документацией и рекомендациями разработчиков, чтобы своевременно адаптировать свои приложения под новые требования и стандарты. В данном случае, переход на использование модального показа формы позволил решить проблему отображения формы в Rad Studio 10.4 после обновления до Android 11.

Создано по материалам из источника по ссылке.

Разработчики столкнулись с проблемой отображения формы в Delphi FireMonkey после обновления до Rad Studio 10.4, где изменение метода показа формы помогло решить проблему совместимости с Android 11.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 13:25:53/0.0049979686737061/1