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

[Android] Можно ли создать динамическую заставку загрузки данных?


haword

Вопрос

Можно ли сделать изменяемую заставку? Например что бы там писалось по очереди - Загрузка данных, Данные загружены?

 

попробовал сделать по старинке, в DPR добавил в ручную создание формы, вывод ее перед созданием главной формы, при создании других форм изменение надписи в ней, после того как главная форма показана убираем спэш. Под виндой все нормально работает. На андроиде далее родного сплеша дело не идет. Программа зависает. 

  Application.Initialize;
  SplashForm:= TSplashForm.Create(Application);
//  SplashForm:= TSplashForm.Create(nil);
  SplashForm.Show;
  Application.CreateForm(Tdm, dm); //TDataModule
  Application.CreateForm(TMainForm, MainForm);
//  Application.CreateForm(TSplashForm, SplashForm);
  Application.Run;
Ссылка на комментарий

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

  • 0

можно закрывать тему. такое в принципе в данное время в огнеобезьяне не возможно из за того что Application.CreateForm не создает форму и не вызывает OnCreate событие у формы. Формы создаются в Application.Run. То есть процесс загрузки форм отобразить невозможно. Остается только пялится на черный экран и ждать пока покажется программа. 

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

Динамическую нельзя.

 

Но не обязательно смотреть на черный экран.

  1. Так как начиная с XE7 FireMonkey поддерживает установку заставки, вместо черного экрана
  2. Для пользователей предыдущих версий есть другое решение
Ссылка на комментарий
  • 0

Между заставкой картинкой и показом моей программы проходит порядка 3 секунд и в этот момент чёрный экран. Картинка пропадает а форма еще не нарисована. Видно много компонентов накидал на табы поэтому долго грузится.

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

Можно конечно, делал, правда в XE8. Объясню на примере своего приложения:

В проекте 2 формы: frmSplash и frmMain. frmSplash в свойствах проекта ставим как Main form. Там же, обоим формам устанавливаем Avto create.

frmSplash содержит картинку и прогресс бар, отображающий ход загрузки frmMain.

В самой frmSplash никакого особого кода не пишем.

Для frmMain ставим свойство Visible в False в  ObjectInspector.

В frmMain в процедуре FormCreate пишем:

 

 код....

  frmSplash.pbLoad.Value:=15;Application.ProcessMessages; //Меняем значение индикатора в форме заставки

 код...

  frmSplash.pbLoad.Value:=20; Application.ProcessMessages; //Меняем значение индикатора в форме заставки

 код...

  frmSplash.pbLoad.Value:=100;Application.ProcessMessages; //Загрузка закончилась
  frmMain.Visible:=True;
Самое главное, чтоб frmSplash не была перегружена контролами и появилась практически сразу, после исчезновения стандартной загрузочной картинки.
 

Если же, ваша главная форма грузится ну очень долго и экран блокируется (гаснет) раньше, чем исчезнет заставка - то нужно отключить блокировку экрана в файле проекта, например: 

program VisAcu;
uses
  System.StartUpCopy,
  FMX.Forms,
  {$IF DEFINED(ANDROID)}
  Androidapi.Helpers,
  FMX.MobilePreview,
  Androidapi.JNI.GraphicsContentViewText,
  {$ENDIF }
  untAstro in 'untAstro.pas',
  untSplash in 'untSplash.pas', {frmSplash}
  untMain in 'untMain.pas'; {frmMain}


{$R *.res}


begin
  Application.Initialize;
  //Управление подсветкой
  {$IF DEFINED(ANDROID)}
  SharedActivity.getWindow.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON);
  {$ENDIF}
  Application.CreateForm(TfrmSplash, frmSplash);
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

В итоге: появляется картинка стандартной заставки, потом Ваш сплэш-скрин, в котором неторопливо ползет прогресс бар загрузки основной формы...

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

 

Если же, ваша главная форма грузится ну очень долго и экран блокируется (гаснет) раньше, чем исчезнет заставка - то нужно отключить блокировку экрана в файле проекта, например: 

 

Сдается мне что такое приложение не нуждается в отключении блокировки экрана, его тупо удалят до того как оно загрузится :)

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

у меня подобный код не прокатил. объясню почему. у меня не одна была форма и формы грузились долго не из за кода в OnCreate а из за большого количества контролов на формах. все мои 5 форм грузились около 7 секунд. а основная форма которая шла первой и на которой должна была быть картинка не прорисовывалась пока все формы не загрузятся. то есть был белый экран без прорисованных компонентов. потом белый экран убирался и появлялась моя основная форма. смысла в таком сплеше я не увидел. 

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

у меня подобный код не прокатил. объясню почему. у меня не одна была форма и формы грузились долго не из за кода в OnCreate а из за большого количества контролов на формах. все мои 5 форм грузились около 7 секунд. а основная форма которая шла первой и на которой должна была быть картинка не прорисовывалась пока все формы не загрузятся. то есть был белый экран без прорисованных компонентов. потом белый экран убирался и появлялась моя основная форма. смысла в таком сплеше я не увидел. 

Если основная форма загружает большую базу данных, содержит кучу контролов и грузится 30 сек. и более - то только так. в NavitelNavigator, например, размер карт большой и там, примерно, то же самое.

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

Всем добрый день,

 

Внесу свои небольшие коррективы. Чтобы сделать сплешскрин, достаточно сделать отложенное создание форм. Другими словами:

  1. В главном файле проекта создаем только форму сплешскрин и ничего более
  2. В форме-заставке уже создаем динамически все остальные формы. 

При таком подходе вначале появится заставка, а потом уже будет создание других форм.

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

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

 

Ярослав а вообще когда ни будь будет работа с формами как в VCL что бы формы грузились именно тогда когда в DPR вызываются? 

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

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

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

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

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

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

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

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

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

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

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