На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Пользовательский интерфейс / Заставка для программы Сделать домашней страницей Добавить в избранное Написать писмо

Заставка для программы


Сведения о программе, авторские права и т.д., лучше оформить в виде отдельной формы и показывать ее при запуске программы (как это сделано в Word).
Сделать это не сложно:
1. Создаете форму (например SplashForm).
2. Объявляете ее свободной (availableForms).
3. В Progect Source вставляете следующее (например):




   program Splashin;
   uses
       Forms,
       Main in 'MAIN.PAS',
       Splash in 'SPLASH.PAS'
   {$R *.RES}
   begin
       try
       SplashForm := TSplashForm.Create(Application);
       SplashForm.Show;
       SplashForm.Update;
       Application.CreateForm(TMainForm, MainForm);
       SplashForm.Hide;
       finally
       SplashForm.Free;
       end;
       Application.Run;
   end.



И форма SplashForm держится на экране пока выполняется Create в главной форме. Но иногда она появляется и пропадает очень быстро, поэтому нужно сделать задержку:
1. Добавляете на форму таймер с событием:


   procedure TSplashForm.Timer1Timer(Sender: TObject);
   begin
     Timer1.Enabled := False;
   end;



2. Событие onCloseQuery для формы:




   procedure TSplashForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   begin
     CanClose := Not Timer1.Enabled;
   end;

3. И перед SplashForm.Hide; ставите цикл:



   repeat
     Application.ProcessMessages;
   until SplashForm.CloseQuery;


4. Все! Осталось установить на таймере период задержки 3-4 секунды.
5. На последок, у такой формы желательно убрать Caption:
SetWindowLong (Main.Handle,GWL_STYLE, GetWindowLong(Main.Handle, GWL_STYLE) AND NOT WS_CAPTION OR WS_SIZEBOX);



Коментарий от "Sevastyanov Andrey" (mystic2000@newmail.ru)
Работает это, если честно, коряво. Если прога грузиться долго, то наступив  на эту заставку другим приложением, а потом убрав ее вы получите серое  пятно до конца загрузки приложения. А если оно грузиться как Delphi 6...
По-моему, лучше создавать splash-форму в отдельном потоке.

Коментарий от "digimaster" (digimaster@mail.ru)
Лучше сделать так:

procedure TForm1.FormCreate(Sender: TObject);
var
 t:integer;
begin
 SplashForm:=TSplashForm.Create(nil);
 SplashForm.Show;
 t:=GetTickCount;
 while (GetTickCount-t)<5000 do begin //пока не прошло 5000 милливек
  sleep(0);
  Application.ProcessMessages;
  if not SplashForm.Visible then break;
 end;
 //Application Init Code here...
 
 SplashForm.Free;
end;

Не забудьте добавить SplashForm unit в список USES главной формы.

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz