Создание заставки при старте программы
Создание заставки при старте программы
Создание заставки при старте программы Перед появлением главного окна во всех серьёзных приложениях сначала появляется заставка. Теперь и у Вас есть возможность повыёживаться! Для создания заставки выполняем следующую последовательность действий: Начинаем создание нового приложение командой "New Application" ("Новое приложение") из меню "File" ("Файл") Добавьте ещё одну форму: "New Form"("Новая форма") из меню "File" ("Файл"). Это окно и будет заставкой. У него нужно убрать рамку с полосой заголовка, установив свойство "BorderStyle" в "bsNone". Теперь можно смело разработать дизайн окна заставки. Из меню "Project" ("Проект") выбрать команду "Options"("Опции"). Зайти на закладку "Forms"("Формы") и Form2 из списка автоматически создаваемых форм (Auto-Create forms) перенести в список доступных форм (Available forms) На форму-заставку с закладки System вынести компонент Timer. В его свойстве Interval установить значение 5000, а в событии OnTimer написать: Timer1.Enabled := false; Это сделано для того, чтобы заставка была видна в период указанного времени - 5000 миллисекунд, т.е. 5 секунд. Перейти в файл проекта, нажав Ctrl+F12 и выбрав Project1. Исходный код должен выглядеть так: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Теперь мы внесём сюда немного изменений и код должен стать таким: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.RES} begin Application.Initialize; Form2 := TForm2.Create(Application); Form2.Show; Form2.Update; while Form2.Timer1.Enabled do Application.ProcessMessages; Application.CreateForm(TForm1, Form1); Form2.Hide; Form2.Free; Application.Run; end. ************************************************************** Заставка для программы Сведения о программе, авторские права и т.д., лучше оформить в виде отдельной формы и показывать ее при запуске программы (как это сделано в Word). Сделать это не сложно: 1. Создаете форму (например SplashForm). 2. Объявляете ее свободной (availableForms). 3. В Progect Source вставляете следующее (например): program Splashin; uses Forms, Main in 'MAIN.PAS', Splash in 'SPLASH.PAS'; {$R *.RES} begin try Application.Initialize; 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 главной формы. *********************************************************** Мой способ. В файле проекта: begin FSplash:=TFSplash.Create(Application); FSplash.Show; FSplash.Update; Application.CreateForm(TForm1, Form1); Application.Run; end. В файле главной формы: procedure TForm1.FormActivate(Sender: TObject); begin ... FSplash.Free; ... end;