
Совет 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:='SOFTWARE\Splash Screen Company\MyApp\1.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;
Так как мы ликвидировали обработчик события, связанный с компонентом TTimer, наша форма теперь не закроется автоматически. Очевидно, что закрытие формы в данном случае должно быть связано с моментом окончания воспроизведения видеофрагмента. С этой целью воспользуемся событием OnNotify компонента TMediaPlayer, в котором проанализируем его свойство Mode - в момент окончания воспроизведения оно изменится. Соответствующий код для Delphi имеет вид:
procedure TForm2.MediaPlayer1Notify(Sender: TObject);
begin
Mediaplayer1.Notify := True;
if Mediaplayer1.Mode=mpStopped then
Form2.Close;
end;
На этапе выполнения мы получим заставку примерно следующего вида:
Рис. 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;
Теперь форма, панель и сам видеофрагмент занимают весь экран, закрывая собой все окна, включая панель задач Windows. Тем не менее рекомендуется для полностью корректного воспроизведения подобного рода приложений установить свойство FormStyle данной формы равным fsStayOnTop.
Рис. 8. Заставка, воспроизводящая видеофрагмент на полном экране
MessageDlg
отображает диалоговое окно сообщений в центре экрана
|| function MessageDlg ( const Message : string; DialogType : TMsgDlgType; Buttons : TMsgDlgButtons; HelpContext : Longint ) : Integer;