TMediaPlayer em tempo de execução
Em certas circunstâncias, conforme o resultado de algum evento da
aplicação, pode ser conveniente chamar a exibição de algum vídeo em um
segundo formulário (criado dinamicamente pelo operador new) por meio de um
componente TMediaPlayer.
Alguns problemas podem resultar dessa decisão. Por exemplo, se o programa
estiver sendo desenvolvido para rodar em outros computadores, certamente a
propriedade FileName deste
componente, marcada inicialmente em tempo de projeto no Object Inspector, deverá ser alterada. Evidentemente, se a
exibição do vídeo for uma resposta automática do programa a alguma ação do
usuário, a chamada de uma caixa de diálogos (OpenDialog) mostrar-se-á uma solução deselegante e
inadequada.
Simplesmente tentar alterar o FileName do TMediaPlayer no código provocará o retorno de
mensagens de erros. Uma solução para essas situações é remover o TMediaPlayer colocado no segundo
formulário em tempo de desenho e criá-lo em tempo de execução, também por
meio do operador new:
1 - Crie uma nova aplicação;
2 - Dê um clique no menu File e depois
3 - No menu Project,
dê um clique
4 – Selecione Form2 e dê um clique no botão
>, mudando esse formulário para a lista Available forms. Em seguida dê um OK. Isso impedirá que esse
formulário seja criado automaticamente na inicialização do programa.
5 – Pegue um componente Animate na guia Win32 e o coloque no Form2. Marque a propriedade AutoSize para false, (a
propriedade Height para 175 e a propriedade Width para 200 – ou verificar o tamanho desejado).
Dê um clique e arraste o controle Animate para o
canto superior esquerdo do form.
6 - Agora mude o tamanho do form para o tamanho do controle Animate.
7 – Coloque um Button no primeiro Formulário
(Form1) e em seu evento OnClick digite o código responsável pela criação e destruição do segundo formulário:
//---------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2 *Form2;
Form2 = new TForm2(Application);
Form2->ShowModal();
delete Form2;
}
//---------------------------------------------------------------------------------
8 – Na região dos include da Unit1.cpp digite:
#include "Unit2.h"
Com essas medidas já conseguimos criar o segundo formulário
dinamicamente, porém ainda sem a exibição do vídeo.
NOTA: Vamos partir do princípio de que o arquivo de vídeo a ser exibido
sempre será instalado juntamente com o programa, na mesma pasta do
executável. Dessa forma, o programa sempre saberá onde localizá-lo,
independente do diretório ou disco.
9 – No evento OnActivate de Form2, escrevemos o código
responsável pela criação dinâmica do TMediaPlayer,
bem como pela exibição do vídeo no componente Animate.
//---------------------------------------------------------------------------------
void __fastcall TForm2::FormActivate(TObject *Sender)
{
TMediaPlayer *MediaPlayer1 = new TMediaPlayer(this);
MediaPlayer1->Parent =
this;
MediaPlayer1->Left = 0;
MediaPlayer1->Top = 1;
MediaPlayer1->Visible =
false;
MediaPlayer1->FileName =
(ExtractFilePath(Application->ExeName) + "Meu_Video.avi" ); //especifique o
arquivo
MediaPlayer1->DeviceType = dtAVIVideo;
MediaPlayer1->Display =
Animate1;
MediaPlayer1->Open();
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------------
10 – O componente TMediaPlayer precisa ser destruído (evento OnDestroy de Form2):
//---------------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
delete MediaPlayer1;
}
//---------------------------------------------------------------------------------
11 – Na Unit2.h,
digite:
TMediaPlayer *MediaPlayer1;
na parte __published:
bem como:
#include <Mplayer.hpp>
na região dos include. Pode rodar o programa.
Abaixo transcrevemos o código completo do programa:
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define
Unit1H
//---------------------------------------------------------------------------
#include
<Classes.hpp>
#include
<Controls.hpp>
#include
<StdCtrls.hpp>
#include
<Forms.hpp>
#include
<ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE
TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include
<vcl.h>
#pragma hdrstop
#include
"Unit2.h"
#include
"Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent*
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2 *Form2;
Form2 = new TForm2(Application);
Form2->ShowModal();
delete Form2;
}
//---------------------------------------------------------------------------
Unit2.h
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include
<Classes.hpp>
#include
<Controls.hpp>
#include
<StdCtrls.hpp>
#include
<Forms.hpp>
#include
<ComCtrls.hpp>
#include
<MPlayer.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TMediaPlayer *MediaPlayer1;
TAnimate *Animate1;
void __fastcall FormActivate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE
TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
Unit2.cpp
//---------------------------------------------------------------------------
#include
<vcl.h>
#pragma hdrstop
#include
"Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent*
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormActivate(TObject *Sender)
{
TMediaPlayer *MediaPlayer1 = new TMediaPlayer(this);
MediaPlayer1->Parent =
this;
MediaPlayer1->Left = 0;
MediaPlayer1->Top = 1;
MediaPlayer1->Visible = false;
MediaPlayer1->FileName =
(ExtractFilePath(Application->ExeName) + "Meu_Video.avi" ); //especifique o
vídeo
MediaPlayer1->DeviceType = dtAVIVideo;
MediaPlayer1->Display =
Animate1;
MediaPlayer1->Open();
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDestroy(TObject *Sender)
{
delete MediaPlayer1;
}
//---------------------------------------------------------------------------
VMS Desenvolvimentos
Diversas Dicas, Apostilas, Arquivos Fontes,
Tutoriais, Vídeo Aula, Download de Arquivos Relacionado a Programação em C++ Builder.
|