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 em New Form;
3 - No menu Project, dê um clique em Options. Na caixa Project Options que se abrirá, escolha a aba Forms;
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.
|
IMPORTANTE: responda "no" para a pergunta que o compilador fará se você deseja remover a declaração TMediaPlayer *MediaPlayer1; da Unit2.h. |
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;
}
//---------------------------------------------------------------------------
Nota: Para exibição de um vídeo no mesmo formulário, veja o tutorial a respeito neste Site.
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |