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

Заставка приложения до Form1.Show


rustam_d

Вопрос

Delphi XE8 upd1, FMX.

 

Перелопатил форумы по заставкам. Я думаю тема все еще не раскрыта.

реализация встроенной заставки с ХЕ7 чепуха годная для студентов.

Кому нужная 0.0001с заставка и потом черный экран на секунды длящиеся вечностью?

 

Господа, предлагаю поставить точку с этим недоразумением.

Пробовал и двойные формы, типа одна с картинкой и только потом главная и т.п.

Также сама сплешь форма криейтид главную...нормального эффекта не добился...

Может что то не так делаю, а может руки кривые, я незнаю. А может надо было влить

пару тон процессинг мессенджеров или апдейтов с репаинтами?

 

Видал варианты, где ковыряют манифесты, деплои и т.п. Однако по отзывам и там не все чисто.

А главное все это как то не в одном месте не упорядоченно разбросано...

 

Коллеги, у кого есть идеальное и простое решение для дроида и иоса...прошу поделиться...

 

 

 

 

 

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

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

  • 0
0.0001с заставка и потом черный экран

 

у меня нормально быстренько выскакивает заставка и через 2-3 сек загружается первая форма

путем подмены .png на .9.png можно даже на весь экран ее растянуть нормально.

конечно было бы неплохо анимацию туда как у людей, но пока есть и более насущные проблемы...

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

Все "быстренько" бывает только если приложение простое "как две копейки"...

В реальности - это действительно напрягает.

Извернуться можно примерно так:

- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно

- создайте TfgProgressDialog (например), который будет отображать процесс загрузки приложения и инициализацию переменных, модулей и т.п.

- подготовьте все что вам нужно для вашего приложения, до создания главной формы (и других)

- все что требует отображения в TfgProgressDialog помещайте в блоки

  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    {....}
  end);

- все что не требует отображения в GUI и никак не связано с компонентами других форм, и что может выполняться "постольку-поскольку" помещайте в блоки

  TThread.CreateAnonymousThread(procedure
  begin
    {...}
  end).Start;

- и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке

  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    {....}
  end);

создайте все формы вашего приложения...

 

З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...

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

Извернуться можно примерно так:

 

Алекс, спс за вариант, 

1. сплеш криейтится один в файле прокета?

2. у меня на главной форме все и создаются объекты...в том числе и "тяжелые" коннекты к бд.

    Так то обожаю Datamodule, но fmx плевать на него хотел когда создает баинды...и лепит все на главную форму...

 

Вариант на нитях может и не плох...но всегда опасаюсь ими злоупотреблять ввиду сложного дебага.

Алекс ваш проект вызвал у меня немного чувство неполноценности...удачи в смене числа кол-во установок.

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

Splash - да. Он и является первой формой. Все остальные создаются в рантайме уже потом. И все компоненты невизуальные - тоже на главной форме, которая создается тоже позже.

Смысл-то такой:

- вы можете в DesignTime создать все формы, навалять на них компоненты и т.д. и т.п.

- но в опциях проекта уберите все формы из автосоздания, оставив только splash

- а в коде самого проекта у вас будет что-то типа

  Application.Initialize;
  Application.CreateForm(TfmSplash, fmSplash);
  Application.Run;

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

Application.CreateForm(TfmMain, fmMain);
Ссылка на комментарий
  • 0

 

Splash - да. Он и является первой формой. Все остальные создаются в рантайме уже потом. И все компоненты невизуальные - тоже на главной форме, которая создается тоже позже.

Смысл-то такой:

- вы можете в DesignTime создать все формы, навалять на них компоненты и т.д. и т.п.

- но в опциях проекта уберите все формы из автосоздания, оставив только splash

- а в коде самого проекта у вас будет что-то типа

  Application.Initialize;
  Application.CreateForm(TfmSplash, fmSplash);
  Application.Run;

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

Application.CreateForm(TfmMain, fmMain);

Алекс идея то не нова...обсосали уже по миру...

В каком событии сплеша у вас создание главной формы? и есть ли баласты или кодо-вреды типа процессинг месенжеров, апдейты, рипеинты? 

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

"- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно

- и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке

  TThread.Synchronize(TThread.CurrentThread, procedure
 
begin
    {....}

    Application.CreateForm(TfmMain, fmMain);
  end);

создайте все формы вашего приложения..."

 

чего там только нет... даже боюсь начать перечислять...

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

"- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно

 

Алекс спасибо за участие...но я пока обманул судьбу немного по другому.

При загрузке приложения я вывожу главное окно с запросом пин кода, или еще можно оставить одну кнопку "Войти".

И потом уже на кнопке ввода пина или вход я гружу все объекты и коннекты к БД.

Понятно что не на всех проектах такое прокатит, но мне помогло.

Я оставил набортовую заставку. Мое решение помогло мне решить 2 проблемы:

- быстрая заставка (черный экран есть но не долгий)

- проверку соединения с интернет выводить стало проще, я более не выкидываю программу...а просто тоаст.

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

Не за что!

Ваше решение будет достаточным только в случае если на создаваемой форме не много компонентов. Если их много - процесс "появления" формы может растянуться )

Ссылка на комментарий
  • 0
В 14.08.2015 в 00:31, AlexG сказал:

Все "быстренько" бывает только если приложение простое "как две копейки"...

В реальности - это действительно напрягает.

Извернуться можно примерно так:

- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно

- создайте TfgProgressDialog (например), который будет отображать процесс загрузки приложения и инициализацию переменных, модулей и т.п.

- подготовьте все что вам нужно для вашего приложения, до создания главной формы (и других)

- все что требует отображения в TfgProgressDialog помещайте в блоки


  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    {....}
  end);

- все что не требует отображения в GUI и никак не связано с компонентами других форм, и что может выполняться "постольку-поскольку" помещайте в блоки


  TThread.CreateAnonymousThread(procedure
  begin
    {...}
  end).Start;

- и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке


  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    {....}
  end);

создайте все формы вашего приложения...

 

З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...

Подниму тему.

Перехожу с 10.1 на 10.3. Реализован SplashScreeen по методу AlexG, только вместо потоков был банальный Application.ProcessMessages. В 10.3. это перестало работать, но и с потоками не могу совладать.

procedure TSplashForm.FormShow(Sender: TObject);
begin
  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    Application.CreateForm(TForm1, Form1);
  end);

  //Application.ProcessMessages;
  TThread.Synchronize(TThread.CurrentThread, procedure
  begin
    StartUpLabel.Text := 'Инициализация!!!';
      Label1.Text := VERSION;
  end);

end;

Не показывает саму форму SplashForm, заставка висит до самого отображения MainForm. Что можно предпринять?

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

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

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

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

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

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

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

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

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

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