Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Выполнение действий до загрузки формы


Автор: Dimyan 10.3.2005, 11:27
Ситуация такая: При запуске программы заполняется TreeView и БД (основной потребитель времени) и выполняются еще кое какие действия для подготовки программы к работе. Все это довольно сильно тормозит загрузку главной формы (на не быстрых компах создается эффект, что программа не запустилась и соправождается попыткой повторного запуска). Хотелось бы сделать так чтоб эти действия происходили до показа основной формы и во время них появлялось какое-нибудь окошечко которое сообщает что программа запущена и идет подготовка к работе. Как можно такое реализовать?

Автор: SPrograMMer 10.3.2005, 15:39
Создаем еще одно окно, допустим Form2. На ней размещаем:
- логотип (по желанию) smile
- прогресс (TProgressBar, TGauge)
- таймер (Timer)
На первой форме создаем обработчик события OnShow:
Код

Procedure TForm1.FormShow(Snedr:TOBject);
Begin
  Form2.ShowModal
End;

То есть перед отображением главной формы показать вторую, в которой, по таймеру, сделать нужные действия, после чего программным путем закрыть Form2, таким образом ShowModal, выполниться и управление перастся в главную форму. smile
Добавлено @ 15:45
Вот код (примерный) для второй формы:
Код

Procedure TForm2.FormShow(Sender:TObject);
Begin 
  ProgressBar1.Position:=0;
  Timer1.Enabled:=True // запускаем таймер (в дизайне сделай ему False)
End;
Procedure TForm2.Timer1Timer(Sender:TObject);
Begin
  ProgressBar1.Position:=ProgressBar1.Position+1; // Инкремент  прогрессу
  Timer1.Enabled:=False;   // НУЖНО!!!!
  case ProgressBar1.Position Of
     1: //Выполнить первую часть действий, например, Connect к базе
     2: //выполнить 2-ую часть , например, открыть нужные наборы данных
     ...
     50: //выполнить 50-ое действие.....
     ...
     100:
         Begin  // Ура дошли до конца!
            Form2.Close // Закрыть вторую форму и вернуться к главной
         End;
   End;
  Timer1.Enabled:=ProgressBar1.Position<100
End;

Автор: ~FoX~ 10.3.2005, 16:51
Может так:

Код

program MyProg;

uses
  Forms,
  Form1 in 'Form1.pas' {Form1},
  USplash in 'USplash.pas' {Splash},

{$R *.res}

begin
  Application.Initialize;

  Application.Title := 'Моя прога';

  Application.CreateForm(TSplash, Splash);
  Application.CreateForm(TForm1, Form1);

  Splash.ShowModal;
  Application.Run;
end.

Автор: Alex 10.3.2005, 18:04
http://vingrad.ru/DELPHI-DLP-001197

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)