Порада 1. Створення найпростіших заставок

Нерідко при запуску Windows-додатків перед роботою додатка з'являється
заставка (в англомовній літературі вона називається Splash screen), що містить
інформацію про запускаються, і, можливо, інші відомості (серійний номер
продукту, версію та ін.) Яким чином можна створити таку заставку?

Додамо до нашого додатком форму, властивість BorderStyle її встановимо рівним
bsNone, помістимо на неї мітку і компонент TTimer. Властивість Interval компонента
TTimer встановимо рівним 1000, помножене на число секунд, протягом яких
заставка повинна знаходитися на екрані (значення 3000 відповідає 3 секундам).



Рис. 1.
Форма, яка повинна з'явитися в якості заставки

Створимо обробник події OnTimer компонента TTimer: У разі Delphi він
виглядає так:

procedure TForm3.Timer1Timer(Sender: TObject);
begin
Close;
end;

У разі С + + Builder він має наступний вигляд:

void __fastcall TForm3::Timer1Timer(TObject *Sender)
{
Close();
}

В опціях проекту перенесемо знову створену форму в розділ Available Forms.

Тепер створимо обробник події OnCreate головної форми додатка, який
у разі Delphi виглядає так:

procedure TForm1.FormCreate(Sender: TObject);
begin
Form3:=TForm3.Create(Application);
Form3.ShowModal;
Form3.Free;
end;

У випадку C + + Builder цей же обробник події виглядає так:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form3= new TForm3(this);
Form3->ShowModal();
Form3->Free();
}

Тепер перед запуском додатку на екрані буде з'являтися заставка
такого вигляду:



Рис. 2.
Заставка на етапі виконання

Порада 2. Виведення інформації про програму на заставці


Якщо запустити будь-яке з додатків MS Office 97, на що з'являється при
завантаженні програми заставки можна побачити не тільки відомості про сам
додатку, але також і реєстраційний номер і прізвище користувача. Як
відомо, ці відомості вводяться користувачем у процесі установки програми, і
в даний час прийнято зберігати подібні відомості у реєстрі Windows. Якщо
створити дистрибутив програми за допомогою найбільш часто використовуваного в нашій
країні для цієї мети кошти InstallShield (або за допомогою InstallShield
Express, що входить до складу старших версій Delphi і C + + Builder), в реєстрі
Windows з'явиться розділ, схожий на представлений на рис.3:



Рис. 3.
Розділ реєстру, створюваний програмою установки

У даному випадку додаток MyApp версії 1.0 створено компанією Splash Screen
Company, і при його установці були введені серійний номер 176-99027, а також ім'я
користувача і ім'я компанії, в якій даний користувач працює.

Якщо інсталяційне додаток створено не за допомогою InstallShield, а з
допомогою інших засобів (наприклад, написано на Delphi або C + + Builder), найменування
розділу і ключів реєстру можуть відрізнятися від наведених вище, але в будь-якому випадку
вони повинні бути Вам відомі.

Модифікуємо нашу заставку так, щоб на ній відображалися містяться в
реєстрі ім'я користувача та серійний номер. З цією метою додамо на створену
раніше форму дві позначки.



Рис. 4. Форма
заставки після внесення змін


Створимо обробник події, пов'язаний зі створенням форми. У разі Delphi він
має наступний вигляд:

procedure TForm2.FormCreate(Sender: TObject);
var key,ser,usr:string; Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
key:=”SOFTWARESplash Screen CompanyMyApp1.0″;
Reg.Rootkey:= HKEY_LOCAL_MACHINE;
Reg.OpenKey(key,false);
usr:=Reg.ReadString(“Name”);
ser:=Reg.ReadString(“Serial”);
Label2.Caption: = "Користувач:" + usr;
Label3.Caption: = "Серійний номер:" + ser;
Reg.CloseKey;
Reg.Destroy;
except
Label2.Caption:=”Unregistered user”;
Label3.Caption:=”Please register”;
end;
end;

При цьому в секції uses модуля, пов'язаного з формою, слід послатися
на модуль registry.

Для С + + Builder обробник цієї події виглядає так:

void __fastcall TForm1::FormCreate(TObject *Sender)
{TRegistry *Reg;
try
{
Reg=new TRegistry;
Reg->RootKey=HKEY_LOCAL_MACHINE;
AnsiString key = "SOFTWARESplash Screen CompanyMyApp1.0";
Reg->OpenKey(key,false);
AnsiString usr=Reg->ReadString("Name");
AnsiString ser=Reg->ReadString("Serial");
Label2-> Caption = "Користувач:" + usr;
Label3-> Caption = "Серійний номер:" + ser;
Reg->CloseKey();
Reg->Free();
}
catch (…)
{
Label2->Caption="Unregistered user ";
Label3->Caption="Please register ";
}
}

Природно, на початку тексту модуля слід вставити рядок:

#include <registry.hpp>

Зверніть увагу: в С + + та Pascal формати рядків, що містять імена розділів
реєстру, різні.

У результаті наша заставка на етапі виконання у разі наявності в реєстрі
відповідного розділу придбає наступний вигляд:



Рис. 5.
Заставка з ім'ям користувача і серійним номером на етапі виконання

Якщо ж у реєстрі немає такого розділу, замість імені користувача і серійного
номери булет виводитися повідомлення про те, що користувач не зареєстрований.

Відзначимо, що при бажанні можна додати в цей обробник події код,
аналізує серійний номер і в разі, якщо він не задовольняє будь-які
заздалегідь заданим вимогам, припинити виконання програми (або запустити
його демонстраційну версію).

Порада 3. Заставка з відеофрагментів


Тепер створимо заставку, в якій буде відображатися відеофрагмент (такі
заставки нерідко використовуються розробниками ігор і мультимедіа-енциклопедій). З
цією метою видалимо з форми таймер (він вже не потрібен, тому що час існування
заставки тепер визначається тривалістю відеофрагменту), і знищимо
пов'язаний з ним обробник події OnTimer. Видалимо також компонент TImage. Потім
додамо компонент TPanel (він буде використовуватися в якості "екрану" для
відтворення відеофрагменту, і компонент TMediaPlayer. Властивість Visible цього
компонента встановимо рівним false, властивість AutoOpen – раним true, а в якості
значення властивості FileName виберемо ім'я файлу, що містить відеофрагмент.



Рис. 6.
Форма заставки, що відтворює відеофрагмент

Змінимо обробник події, пов'язаної із створенням форми. Тепер ми повинні
ініціювати відтворення фрагмента, використовуючи як екран компонент
TPanel. При цьому компонент TPanel повинен розташовуватися рівновіддалено від лівого і
правого країв форми і мати розміри, що відповідають розмірам кадрів
відеофрагменту (їх можна дізнатися, звернувшись до властивості DisplayRect компонента
TMediaPlayer). У разі Delphi цей обробник події тепер виглядає так:

procedure TForm2.FormCreate(Sender: TObject);
var key,ser,usr:string; Reg:TRegistry;
begin
try
Reg:=TRegistry.Create;
key:=”SOFTWARESplash Screen CompanyMyApp1.0″;
Reg.Rootkey:= HKEY_LOCAL_MACHINE;
Reg.OpenKey(key,false);
usr:=Reg.ReadString(“Name”);
ser:=Reg.ReadString(“Serial”);
Label2.Caption: = "Користувач:" + usr;
Label3.Caption: = "Серійний номер:" + ser;
Reg.CloseKey;
Reg.Destroy;
except
Label2.Caption:=”Unregistered user”;
Label3.Caption:=”Please register”;
end;
MediaPlayer1.DisplayRect:=Rect(Panel1.Left,Panel1.Top,0,0);
Panel1.Width:=MediaPlayer1.DisplayRect.Right;
Panel1.Height:=MediaPlayer1.Displayrect.Bottom;
Panel1.Left:=Round((Form2.Width-Panel1.Width)*0.5);
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

У випадку C + + Builder відповідний код має вигляд:

void __fastcall TForm2::FormCreate(TObject *Sender)
{TRegistry *Reg;
{TRegistry *Reg;
try
{
Reg=new TRegistry;
Reg->RootKey=HKEY_LOCAL_MACHINE;
AnsiString key = "SOFTWARESplash Screen CompanyMyApp1.0";
Reg->OpenKey(key,false);
AnsiString usr=Reg->ReadString("Name");
AnsiString ser=Reg->ReadString("Serial");
Label2-> Caption = "Користувач:" + usr;
Label3-> Caption = "Серійний номер:" + ser;
Reg->CloseKey();
Reg->Free();
}
catch (…)
{
Label2->Caption="Unregistered user ";
Label3->Caption="Please register ";
}
MediaPlayer1-> DisplayRect = Rect (Panel1-> Left, Panel1-> Top, 0,0);
Panel1->Width=MediaPlayer1->DisplayRect.Right;
Panel1->Height=MediaPlayer1->DisplayRect.Bottom;
Panel1->Left=INT((Form2->Width-Panel1->Width)*0.5);
MediaPlayer1->Open();
MediaPlayer1->Play();
}

Зверніть увагу: при обчисленні координат лівого верхнього кута компонента
TPanel в наведених вище обробниках подій використовуються функції округлення
дійсних чисел, які мають різні назви для Pascal і C + +.

Так як ми ліквідували обробник події, пов'язаний з компонентом TTimer,
наша форма тепер не закриється автоматично. Очевидно, що закриття форми в
даному випадку має бути пов'язано з моментом закінчення відтворення
відеофрагменту. З цією метою скористаємося подією OnNotify компонента
TMediaPlayer, в якому проаналізуємо його властивість Mode – у момент закінчення
відтворення воно зміниться. Відповідний код для Delphi має вигляд:

procedure TForm2.MediaPlayer1Notify(Sender: TObject);
begin
Mediaplayer1.Notify := True;
if Mediaplayer1.Mode=mpStopped then
Form2.Close;
end;

Код для C + + Builder має при цьому наступний вигляд:

void __fastcall TForm1::MediaPlayer1Notify(TObject *Sender)
{
MediaPlayer1->Notify= true;
if (MediaPlayer1->Mode==mpStopped)
{
Form2->Close();
}
}

На етапі виконання ми отримаємо заставку приблизно наступного вигляду:


Рис. 7.
Заставка, відтворювальна відеофрагмент

Порада 4. Заставка з відеофрагментів, які відображатимуться на повному екрані


І, нарешті, створимо заставку, відтворюючу відеофагмент на всьому екрані. У
цьому випадку написи на формі і дані з реєстру вже не потрібні, але при цьому потрібно
розтягнути на весь екран і форму, і компонент TPanel. Тому обробник події,
пов'язаного зі створенням форми, дещо спрощується. У разі Delphi він тепер
має вигляд:

procedure TForm2.FormCreate(Sender: TObject);
begin
Form2.Left:=0;
Form2.Top:=0;
Form2.Width:=Screen.Width;
Form2.Height:=Screen.Height;
Panel1.Align:=alClient;
Mediaplayer1.Open;
MediaPlayer1.DisplayRect: = Rect (0,0, Screen.Width, Screen.Height);
MediaPlayer1.Play;
end;

Відповідно в разі C + + Builder він має вигляд:

void __fastcall TForm2::FormCreate(TObject *Sender)
{
Form1->Left=0;
Form1->Top=0;
Form1->Width=Screen->Width;
Form1->Height=Screen->Height;
Panel1->Align=alClient;
MediaPlayer1->Open();
MediaPlayer1-> DisplayRect = Rect (0,0, Screen-> Width, Screen-> Height);
MediaPlayer1->Play();
}

Тепер форма, панель і сам фільм займають весь екран, закриваючи собою
всі вікна, включаючи панель завдань Windows. Тим не менш рекомендується для повністю
коректного відтворення подібного роду додатків встановити властивість
FormStyle даної форми рівним fsStayOnTop.



Рис. 8.
Заставка, відтворювальна відеофрагмент на повному екрані

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*