SQLRU.net
Разработка приложений баз данных

Начало » Программирование » Delphi » Как сделать начальный SplashScreen для большого приложения (Обозначить загрузку большого приложения)
Как сделать начальный SplashScreen для большого приложения [сообщение #2667] Fri, 30 June 2023 00:14 Переход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
Имеется Delphi приложение, где-то 60МБ, оно запускается по сети. Пользователь его запустил - и ждет несколько секунд, пока появится первая форма. Можно как-то обозначить, что приложение начало загружаться, показать какое-то окно, и спрятать его, как все приложение скачается по сети и запуститься? Понимаю, что можно лоадер написать, который покажет окно, дождется запуска приложения и окно скроет, но может есть более красивое решение?
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2668 является ответом на сообщение #2667] Fri, 30 June 2023 00:51 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
Сначала определи какой этап тормозит: загрузка или запуск до появления формы. Для этого поставь протоколирование выполнения BEGIN главного приложения и секции INITIALIZATION какого-нибудь юнита в начале списка uses. Первое не лечится, второе - следствие радиуса твоих рук.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2676 является ответом на сообщение #2667] Fri, 30 June 2023 14:43 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
сильно подозреваю, что формы создаются автоматом.
покажи текст DPR.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2684 является ответом на сообщение #2676] Fri, 30 June 2023 19:53 Переход к предыдущему сообщениюПереход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
МП писал(а) Fri, 30 June 2023 14:43
сильно подозреваю, что формы создаются автоматом.
покажи текст DPR.
{$R *.res}
begin
  Application.Initialize;
//      TfmSplashScreen.BeginLoading;
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TdmRep, dmRep);
//  Application.MainFormOnTaskbar := True;
  if not DM.connect2DB then exit;
//      TfmSplashScreen.EndLoading;
  case dm.Login2system of
    -1:exit;
    0:MsgError('Неверный пароль');
    1:begin
      Application.CreateForm(TwhMainForm, whMainForm);
      Application.Run;
    end;
  end;
end.

[Обновления: Fri, 30 June 2023 19:53]

Известить модератора

Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2692 является ответом на сообщение #2684] Mon, 03 July 2023 12:51 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
в каком месте тормозит?
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2697 является ответом на сообщение #2692] Tue, 04 July 2023 19:01 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 142
Зарегистрирован: August 2022
Senior Member
Цикл выборки и обработки сообщений спрятан в Application.Run. Попытки отрисовки чего-либо до его запуска не то, чтобы невозможны, но требуют хорошего понимания происходящего. Тут либо принуждать окно силой делать Paint, либо обрабатывать сообщения посредством ProcessMessages, либо еще какой фокус. В приведенном коде ничего на экране до момента Application.Run появиться не может.

[Обновления: Tue, 04 July 2023 19:04]

Известить модератора

Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2698 является ответом на сообщение #2697] Wed, 05 July 2023 00:39 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
А ещё можно запустить отдельный поток, а уже в нём создать сплаш-окно и цикл выборки сообщений для него. Но придётся писать на API, VCL такой трюк не переварит.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2710 является ответом на сообщение #2698] Sun, 09 July 2023 00:33 Переход к предыдущему сообщениюПереход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
SD писал(а) Wed, 05 July 2023 00:39
А ещё можно запустить отдельный поток, а уже в нём создать сплаш-окно и цикл выборки сообщений для него. Но придётся писать на API, VCL такой трюк не переварит.
ну я подозревал, что без хакинга тут не обойтись. А нет примерчика? Мне просто текст вывести, без всякой графики и анимации
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2719 является ответом на сообщение #2710] Mon, 10 July 2023 09:57 Переход к предыдущему сообщениюПереход к следующему сообщению
VladF в настоящее время не в онлайне  VladF
Сообщений: 16
Зарегистрирован: September 2022
Junior Member
GrigoryFomin писал(а) Sun, 09 July 2023 00:33
ну я подозревал, что без хакинга тут не обойтись. А нет примерчика? Мне просто текст вывести, без всякой графики и анимации
По-моему тебя как-то излишне запугали.
Пример, как у меня что-то подобное работает:

{$R *.RES}

begin
  if ActivatePrevInstance(TMainPayDocsForm.ClassName, '') or
     not CheckIBClientMissing then Exit;

  Application.Initialize;
  Application.Title := 'Платежные Документы';

  AboutForm := TAboutForm.CreateAsSplash(Application);
  try
    Application.CreateForm(TMainDataModule, MainDataModule);
    AboutForm.Hide;

    if not MainDataModule.AttemptLogin then Exit;

    AboutForm.Show;
    AboutForm.Update;
    Sleep(1000);

    MainDataModule.LoadDefaults;

    Application.CreateForm(TMainPayDocsForm, MainPayDocsForm);

    AboutForm.Hide;
  finally
    AboutForm.Free;
  end;

  Application.Run;
end.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2727 является ответом на сообщение #2719] Mon, 10 July 2023 14:08 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
Ну да, вместо того, чтобы сделать загрузку быстрой (это же сложно, программист нужен) - просто удлини её ещё на секунду, добавив уродливое белое пятно посередине экрана.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2730 является ответом на сообщение #2727] Mon, 10 July 2023 14:57 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
все так делают ©

зы: пример кода был ещё в самплесах D1

[Обновления: Mon, 10 July 2023 14:58]

Известить модератора

Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2741 является ответом на сообщение #2692] Tue, 11 July 2023 22:21 Переход к предыдущему сообщениюПереход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
МП писал(а) Mon, 03 July 2023 12:51
в каком месте тормозит?
Я в начале написал - при загрузке ЕХЕ по сети. Приложение 50МБ весит. Если запускать с локального ресурса - все быстро работает. Я так понимаю, основная задержка - скачивание по сети самой экзехи, возможно, прогон антивирем. Я так понимаю, что пока ВСЯ экзеха не скачалась - выполнение даже до Application.Initialization не дойдет Sad(( То есть без лодыря не обойтись
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2749 является ответом на сообщение #2741] Wed, 12 July 2023 17:05 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
GrigoryFomin
Я так понимаю, что пока ВСЯ экзеха не скачалась - выполнение даже до Application.Initialization не дойдет Sad((
да.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2758 является ответом на сообщение #2749] Thu, 13 July 2023 01:04 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
Набить 50 мб мусора в файл это надо сильно постараться. Дай угадаю: этого монстрика девками кормили, что он так разжирел?..
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2764 является ответом на сообщение #2758] Thu, 13 July 2023 19:25 Переход к предыдущему сообщениюПереход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
SD писал(а) Thu, 13 July 2023 01:04
Набить 50 мб мусора в файл это надо сильно постараться. Дай угадаю: этого монстрика девками кормили, что он так разжирел?..
Да, девки присутствуют - без них куда щас на дельфи. А 50 МБ при нынешних дистрибутивах на 2-8 ГИГ - это так, консольный *.COM Smile)))
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2770 является ответом на сообщение #2764] Fri, 14 July 2023 15:44 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
Поставь ему в свойствах offline флаг чтобы он кэшировался на клиентском компе.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2921 является ответом на сообщение #2770] Fri, 04 August 2023 08:59 Переход к предыдущему сообщениюПереход к следующему сообщению
LocksmithPC в настоящее время не в онлайне  LocksmithPC
Сообщений: 7
Зарегистрирован: April 2023
Junior Member
Тема выдавила слезу :`(

Компьютер Пресс - CD, 1999, N 2. Наталия Елманова. "Почти все о заставках"...

http://www.citforum.mstu.edu.ru/programming/advice/advice01. shtml
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #2922 является ответом на сообщение #2921] Fri, 04 August 2023 11:54 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
меня всегда поражала нахрапистость Наташи.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #3046 является ответом на сообщение #2922] Mon, 21 August 2023 23:00 Переход к предыдущему сообщениюПереход к следующему сообщению
Taнцop Пacaдoбля в настоящее время не в онлайне  Taнцop Пacaдoбля
Сообщений: 5
Зарегистрирован: August 2023
Junior Member
Думаю возможно эту задачку через интерфейсы порешать...
Создаёшь interface с описанием метода обновления.
Подписываешь на него свой SplashScreen с реализацией
и дёргаешь откуда захочешь, хоть через каждую строчку в коде.
Re: Как сделать начальный SplashScreen для большого приложения [сообщение #3047 является ответом на сообщение #3046] Mon, 21 August 2023 23:03 Переход к предыдущему сообщению
Taнцop Пacaдoбля в настоящее время не в онлайне  Taнцop Пacaдoбля
Сообщений: 5
Зарегистрирован: August 2023
Junior Member
Здесь что цензура?! Почему-то в логин не влезло окончание "бля")))
Предыдущая тема: Excel: получить значение формулы в ячейке
Следующая тема: Цвет пикселя под курсором в другом приложении
Переход к форуму:
  


Текущее время: Sat Apr 27 18:09:26 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01225 секунд