quarta-feira, 3 de junho de 2009

Executando video no Delphi

Já pensou em fazer seu próprio sistema para reprodução de vídeos? Poder programar o palyer da forma como você quiser? Ao usar o componente MediaPlayer do Delphi, isto pode ser possível, ele além de reproduzir vários formatos de audio é também capaz de reproduzir videos.

Em um novo projeto no Delphi, adicione ao formulário os seguintes componentes:
- Panel: que será utilizado como
Display para a reprodução do vídeo.
- MediaPlayer: que fará a execução do vídeo.
- TrackBar: linha do tempo da execução do vídeo.
- Button1: altere o
Caption para "abrir".
- Button2: altere para "Pause".
- Button3: altere para "Stop".
- Timer: para atualizar a linha do tempo.
- OpenDialog: para localizar e abrir o arquivo de vídeo.

Adicione o seguinte código ao evento
OnClick do botão abrir:
procedure TForm1.Button1Click(Sender: TObject);
var
TheLength: LongInt;
begin
if OpenDialog1.Execute then
begin
with MediaPlayer1 do
begin
DeviceType := dtAVIVideo;
TimeFormat := tfFrames;
FileName := OpenDialog1.FileName;
Open;
TrackBar1.Max := Frames;
TheLength := Length;
Display := Panel1;
DisplayRect := Rect(10,10, Panel1.Width-20,Panel1.Height-20);
Play;
end;
end;
end;


Adicione o seguinte código ao evento OnClick do Button2 (Pause):
procedure TForm1.Button2Click(Sender: TObject);
begin
If Button2.Caption = 'Pause' Then
Button2.Caption := 'Continue'
else
Button2. Caption := 'Pause';
MediaPlayer1.Pause;
end;

Adicione o seguinte código ao evento OnClick do Button3 (Stop):
procedure TForm1.Button3Click(Sender: TObject);
begin
MediaPlayer1.Stop;
MediaPlayer1.Frames := 0;
TrackBar1.Position := 0;
Panel1.Refresh;
end;

Adicione o evento a seguir ao evento OnTimer do componente Timer1 para atualizar a linha do tempo de acordo com o avanço do video:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if MediaPlayer1.Frames > 0 then
begin
TrackBar1.Position := MediaPlayer1.Position;
end;
end;

Adicione o código a seguir ao evento OnChange do TrackBar1 para atualizar o vídeo no Display caso o usuário avance ou recue a linha do tempo:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
With MediaPlayer1 do
Begin
StartPos := TrackBar1.Position;
Play;
End;
end;

Salve o projeto em seu computador, compile e execute sua aplicação. Clique no botão "abrir", e localize um arquivo de vídeo no formato "*.avi" para que seja executado. Abraço e até o próximo post.

segunda-feira, 1 de junho de 2009

Rodar programa dentro de outro

Por exemplo, você quer mostrar a calculadora do Windows dentro do seu sistema, em um form específico, ou, quer rodar um executável terceirizado só que dentro da interface do seu sistema, é possível?

Sim, ao utilizarmos o Handle de formulários do Delphi conseguimos incorporar outras aplicações dentro da estrutura do nosso sistema, permitindo que as ações sejam executadas no próprio sistema. Veremos como exibir a calculadora do windows ("calc.exe") dentro de um form. Adicione dois botões ao formulário, altere o Caption dos mesmos para "Abrir" e "Incorporar" respectivamente. Ao evento OnClick do botão abrir, adicione o seguinte código que irá executar a calculadora:
WinExec('calc.exe',SW_NORMAL);

Ao botão incorporar adicione a seguinte linha de código que irá localizar o executável da calculadora e em seguida incorporar a sua estrutura dentro da estrutura do formulário que estamos trabalhando (handle):
windows.SetParent( FindWindow( nil, 'Calculadora' ), Form1.handle ) ;

Ao rodar a aplicação, clique primeiramente em "abrir" para que a calculadora seja executada, veja que a mesma está aparecendo na barra de tarefas do windows. Após clique em "incorporar" observando que ela passa a ser exibida como sendo um objeto do formulário que deixa de ser exibida na barra de tarefas do S.O. Faça a utilização desta dica empregada a outros tipos de executáveis. Abraço e até o próximo post.