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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 11:41   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Прогресс в заставке при старте программы

При пуске программы SplashForm долго висит порядка 50 секунд (в зависимости от количества записей в базе данных). Как мне реализовать ProgressBar, чтобы он отображал создание форм.
Код:
 Application.Initialize;
  with TSplashForm.Create(Application) do
  try
    Show;
    Update;


  Application.Initialize;
  Application.Title := 'Terminal com port';
  Application.CreateForm(TForm1, Form1);

 while SplashForm.Timer1.Enabled do

  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TSQLForm, SQLForm);
  Application.CreateForm(TOptionForm, OptionForm);
  Application.CreateForm(TFindForm, FindForm);
  Application.CreateForm(TResultForm, ResultForm);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  finally
    Free;
  end;


  Application.Run;

В форме заставки прописал
Код:
procedure TSplashForm.FormActivate(Sender: TObject);
begin
 progressbar1.position:=progressbar1.position+10;
  if ProgressBar1.Position=100 then Timer1.Enabled := false;
end;
Aleksandr вне форума Ответить с цитированием
Старый 09.04.2013, 11:58   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

А что для вас создание формы? Сама функция создания окна выполняется мгновенно.
Если у вас грузится база и вы хотите это отобразить, то используйте какой-нибудь счётчик в функции загрузки.
Kix.IV вне форума Ответить с цитированием
Старый 09.04.2013, 12:02   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Да я хочу отобразить загрузку базы. Как это сделать?
Aleksandr вне форума Ответить с цитированием
Старый 09.04.2013, 12:07   #4
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Для этого вам необходимо знать, либо приблизительное время загрузки, либо макс. кол-во элементов базы или ещё что-то, на что можно ориентироваться.
Далее просто увеличиваете текущее значение ПрогрессБара, либо каждую секунду, либо при загрузки каждого элемента базы, либо ещё при каком-то событии.
Что не понятно?
Kix.IV вне форума Ответить с цитированием
Старый 09.04.2013, 12:31   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Если я буду определять максимальное число базы, то программа еще медленее будет грузиться
Aleksandr вне форума Ответить с цитированием
Старый 09.04.2013, 13:08   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Если я буду определять максимальное число базы, то программа еще медленее будет грузиться
Поясните.
Тут не понятно то, как вы определяете размер базы. Ведь в БД фиксированный размер записи, а размер файла известен заранее. Просто делим общий размер на размер записи и получаем кол-во записей.
Sibedir вне форума Ответить с цитированием
Старый 09.04.2013, 13:08   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
50 секунд
Это еще куда ни шло при загрузке сотен тысяч записей из базы. У вас столько? Если существенно меньше, то сверх не оптимальный код. А прогрессбар по другому и не работает - счетчик прогресса и максимальное значение счетчика. Как их определять знает только программист в конкретной ситуации
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2013, 13:11   #8
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Вот так работает, но прогресс достиг уже максимального значения, а программа еще не запустилась.
Код:
 
 SplashForm := TSplashForm.Create(Application);
  SplashForm.Show;
  SplashForm.Update;
  while SplashForm.Timer1.Enabled do
    Application.ProcessMessages;


  Application.Title := 'Terminal com port';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TSQLForm, SQLForm);
  Application.CreateForm(TOptionForm, OptionForm);
  Application.CreateForm(TFindForm, FindForm);
  Application.CreateForm(TResultForm, ResultForm);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  finally
    Free;

 SplashForm.Hide;
  SplashForm.Free;



  Application.Run;
Код:
progressbar1.position:=progressbar1.position+10;
  if  ProgressBar1.Position=100 then Timer1.Enabled := false;
Aleksandr вне форума Ответить с цитированием
Старый 09.04.2013, 13:13   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

У меня 400 000 записей, и оно растет.
У меня база на MYSQL как определить размер записи?
Aleksandr вне форума Ответить с цитированием
Старый 09.04.2013, 13:19   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
У меня 400 000 записей, и оно растет.
И человеку(пользователю) ВСЕГДА нужны все эти 400 000 ?
Да нужны все. Просмотр каждой записи в течении всего ОДНОЙ СЕКУНДЫ займет более 100 (СТА ЧАСОВ) или около 4 суток(по 24 часа в сутки)

Не грузить при старте ничего, и дать пользователю средства для указания (формирования условий отбора) действительно нужных данных.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.04.2013 в 13:27.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Divizion by zero - при старте программы trigger Помощь студентам 1 23.02.2011 18:20
прорисовка формы при старте designer999 Общие вопросы Delphi 3 12.11.2010 01:33
запуск программы при старте windows Izlom Помощь студентам 10 03.07.2010 17:05
При старте програмы KoBRaAndrey Общие вопросы Delphi 9 04.10.2009 15:46
создание dll при старте приложения и удаление при завершении TyoshA Общие вопросы Delphi 7 13.07.2009 13:56