Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi

Дата: 26.11.02 14:48


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


Сведения о программе, авторские права и т.д., лучше оформить в виде отдельной формы и показывать ее при запуске программы (как это сделано в 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 главной формы.

Чтобы вернуться оцените этот вопрос/ответ:
   

Прислать свои комментарии


Новое на сайте

Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо