Libvlc wrapperの開発

FireMonkey(fmx)の場合は?

前の記事

でなかなか便利な関数が、

		vlc->SetHWND(Panel1->Handle);

だったのですが、この関数はFireMonkey(以下fmx)では使えません。WindowsプログラムべったりのVCL(紛らわしいね。笑)と違って、fmxではフォームやフォーム上に置いたコントロールの”Handle”が簡単には得られません。さて、fmxなプログラムでLibvlc wrapperを使いたい場合は、どうしましょうか?上の記事を参考にして、fmxの新規プロジェクトを作成してみます。フォームには、ボタン2個とTOpenDialog1個を置きます。

コードは、

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

#include <fmx.h>
#pragma hdrstop

#include "vlcwrapper.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;

VLC* vlc;
int volume=100;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PlayClick(TObject *Sender)
{
	if( OpenDialog1->Execute()){
		vlc = new VLC(OpenDialog1->FileName);
		vlc->SetHWND(Panel1->Handle);
		vlc->SetVolume(volume);
		vlc->Play();

	}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::StopClick(TObject *Sender)
{
	vlc->Stop();
}
//---------------------------------------------------------------------------

vlcwrapper.hをプロジェクトに加えて、vlcのヘッダーをincludeできるようにします。さて、buildしようとすると?

のエラーが出ます。当たり前で、Panel1置いてませんから。この行まるごとコメントアウトします。するとbuild & runが通って、

Playをクリックして、ファイルを選択すると。

このようにlibvlc側が新しい再生windowsを作って、そこで映像を見ることができます。一応使えそうですね。

コメント