Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2008, 10:45   #1
Лёка
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 42
По умолчанию Прогрессбар...

Ребят, помогите сделать прогресбар на splash форме, что б он показывал состояние загрузке всех форм. ну Загрузилась еще одна форма и он продвинулся и потом следующая. Когда все формы загрузятся, splashform закрывается и врубаеся главное окно. Вот такой вот пост

Последний раз редактировалось Лёка; 15.03.2008 в 14:20.
Лёка вне форума Ответить с цитированием
Старый 15.03.2008, 10:49   #2
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

1. Ставишь на форму ProgressBar. Свойство Min=0, Max=(кол-во форм)
Формы создаются в событии Splash-формы, так? значит, в коде создания, после каждой строчки Form3 := TForm3.Create(Self) пишешь ProgressBar1.Position := ProgressBar1.Position + 1. И после создания последней формы закрываешь сплеш-форму. Всё
andrey4623 вне форума Ответить с цитированием
Старый 15.03.2008, 10:52   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Не получится так по той простой причине, что формы не грузятся. Форма в понимании ООП всего лишь указатель на переменную. И как ты думашь, сколько нужно времени чтобы выделить память под новую переменную и присвоить ей значение? Другое дело, если после создания форма запускает на выполение какие-то действия. Но тут тебе никто не даст универсального рецепта.
Баламут вне форума Ответить с цитированием
Старый 15.03.2008, 11:01   #4
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

Да к тому же это надо, если в проекте ~50 форм. А так даже для 10 незаметно
andrey4623 вне форума Ответить с цитированием
Старый 15.03.2008, 11:28   #5
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Можно примерно так. В файле проекта перед созданием основных форм создать форму-заставку.
Код:
  // Создание формы-заставки
  SplashForm := TSplashForm.Create(Application);

  // Создание форм
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm7, Form7);
  SplashForm.Free; //Можно в другом месте
  Application.Run;
В форме заставке установить прогрессбар и увеличивать его значение в процедуре IncrementProcess:
Код:
procedure TSplashForm.IncrementProcess;
begin
  ProgressBar.Position := ProgressBar.Position + 1;

  // Чтобы заставка всегда была поверх других окон
  Application.BringToFront;
  BringToFront;
  Application.ProcessMessages;
end;
В каждой форме (Form1, Form2,...) в обработчике OnCreate (в начале или в конце) вызывать SplashForm.IncrementProcess;

Последний раз редактировалось Jeni; 15.03.2008 в 11:31.
Jeni вне форума Ответить с цитированием
Старый 15.03.2008, 13:28   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
В каждой форме (Form1, Form2,...) в обработчике OnCreate (в начале или в конце) вызывать SplashForm.IncrementProcess;
А не проще ли
Код:
Application.Initialize; 
SplashForm := TSplashForm.Create(Application);  
SplashForm.ProgressBar.Position:=0;
SplashForm.ProgressBar.Max:=7; //по числу создаваемых форм,
//хотя, на мой взгляд, создавать все формы проекта сразу - дурной тон,
//их нужно создавать динамически, по мере необходимости
SplashForm.Show; 
SplashForm.Update;  
Application.CreateForm(TForm1, Form1);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm2, Form2);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm3, Form3);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm4, Form4);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm5, Form5);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm6, Form6);  
SplashForm.ProgressBar.Position := SplashForm.ProgressBar.Position + 1;
Application.ProcessMessages; 
Application.CreateForm(TForm7, Form7);  
SplashForm.Free; //Нельзя в другом месте, именно здесь
Application.Run;
mihali4 вне форума Ответить с цитированием
Старый 15.03.2008, 14:19   #7
Лёка
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 42
По умолчанию

mihali4, а из автокреейта форм их надо убрать? в опциях проекта.
Лёка вне форума Ответить с цитированием
Старый 15.03.2008, 14:27   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Чего в опции-то ходить? Это все делается вручную.
Просто удалите из файла проекта (на примере приведенного мной) все строки между
Application.CreateForm(TForm1, Form1);
и
SplashForm.Free; //Это, если вы использовали заставку
Application.Run;
Вообще-то, аналогичный вопрос уже обсуждался и ответы на все вопросы были даны и с таймером, и без таймера.
Если не поленитесь, найдете и, я думаю, успешно решите проблему с заставкой или без оной...
mihali4 вне форума Ответить с цитированием
Старый 15.03.2008, 14:30   #9
Лёка
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 42
По умолчанию

спасиб, вашим кодом уже воспользовался.
Лёка вне форума Ответить с цитированием
Старый 18.03.2010, 11:36   #10
Art_Divin
Пользователь
 
Аватар для Art_Divin
 
Регистрация: 06.03.2010
Сообщений: 14
По умолчанию

Прошу помочь.
Делаю splash-screen, столкнулся с такой проблемой, что при запуске программы splash-форма отображается как надо, исчезает вовремя, но при этом не уничтожается из памяти. В смысле, не исчезает с панели задач, и висит там рядом с основной программой. Подскажите, в чем ошибка?
Код:
program MainProject;

uses
  Forms,
  MainUnit in 'MainUnit.pas' {Main},
  MainDataModule in 'MainDataModule.pas' {MainDM: TDataModule},
  MainThreadUnit in 'MainThreadUnit.pas',
  MainAbout in 'MainAbout.pas' {about},
  splash_screen in 'splash_screen.pas' {Main_splash};

{$R *.res}

begin
  Main_splash:=TMain_splash.Create(Application);
  Main_splash.Show;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMain, Main);
  Application.CreateForm(TMainDM, MainDM);
  Application.CreateForm(Tabout, about);
  Main_splash.free;
  Application.Run;
end.
House, progressive house, minimal house listener!
Linux registered user #505538
Art_Divin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратный отсчет в прогрессбар Stanislav Общие вопросы Delphi 3 09.01.2008 16:49