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;

}

//---------------------------------------------------------------------------

 

VMS Desenvolvimentos

Diversas Dicas, Apostilas, Arquivos Fontes, Tutoriais, Vídeo Aula, Download de Arquivos Relacionado a Programação em C++ Builder.

Voltar ao Site