• 0
rustam_d

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

Вопросы

Delphi XE8 upd1, FMX.

 

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

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

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

 

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

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

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

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

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

 

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

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

 

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

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 ответов на этот вопрос

  • 0

 

 

Delphi XE8 upd1, FMX.

@@@

 

 

идеальное и простое решение для дроида и иоса

:unsure:  М-Мечтатель

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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. Что можно предпринять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От brunnengi
      Здравствуйте.
       
      Решил потестить поближе ХЕ7 и проверить SplashScreen. Я создал 4 файла разного размера, с белым фоном и картинкой в центре. Но при запуске сама картинка то белая, а вот остальной фон черный.
       
      Подскажите,
      Как изменить это? Как задать фон?
    • От Brovin Yaroslav
      В XE7 появилась функция задания заставки приложения для андроид устройств. Если раньше пользователям приходилось создавать свои решения этой задачи (Как создать заставку для андроид приложения?), то теперь заставку можно легко указать в настройках проекта:

    • От rareMax
      Добрый день. Интересует вопрос можно ли сделать заставку для приложения Android. Запуск приложения длится 3-8 секунд(в принципе большинство приложений так запускается) но из-за черного экрана кажется слишком долгий запуск. Хотелось бы добавить хотя бы статическую картинку(а еще лучше анимацию). Реально ли?
  • Последние посетители   0 пользователей онлайн

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