|
홍성진 님이 쓰신 글 :
: 흑흑 님이 쓰신 글 :
: : 답변을 빨리해주셔서 감사합니다.
: :
: : 그나저나 기쁜 마음으로 테스트를 해봤는데요...
: :
: : Open()한 다음에 첫 프레임 화면이 출력되고 대기상태로 가신다고 했는데..
: :
: : 출력이 안되거든요
: :
: : ㅠ.ㅠ
: :
:
: 안녕하세요.
: 제가 테스트를 했는데요.
:
: 잘만 되는데요.^^ 뭐가 잘못됐는지 모르겠네요.
: 제가 테스트한 부분입니다.
:
: MediaPlayer1->FileName="C:\\Globe.avi";
: MediaPlayer1->Display=ViewPanel;
: MediaPlayer1->Open();
:
: 이렇게 하면 ViewPanel에 첫번째 프레임이 출력됩니다.
: 패널에 아무 반응이 없는건지, 아니면 어떤 반응이라도 일어나는지 설명해주세요.
:
: 그럼..
:
안녕하십니까?
한꼬맹이입니다.
MediaPlayer는 MS가 만들어 놓은 API를 이용한 일종의 컨트롤입니다.
그래서 동작하나 하나 마다 내부적으로 MCI관련 API를 이용합니다.
왜 처음 화면이 안나오느냐고 하면 MediaPlay를 처음 세팅하여 보여주려고 할때
'흑흑'님께서는 Display로 Panel을 지정해 주셨는데... 이것은 내부적으로 Panel의
핸들만 넘겨 주게 되어 있습니다. 그런데 처음 시작할때는 Mediplay가 한개의 플레임을 그릴때
Panel보다 먼저 그리기 때문에.. 아무것도 안보이는 것 처럼 보이는 것입니다. 그이유는 패널의
WM_PAINT메세지에 맞쳐 그리면 아무문제 없는데.. 이 메디어 플레이어는 그냥 패널DC에다
마구 마구 그리기 때문에 이런 결과를 초래하게 됩니다. 그러면 패널보다 늦께 그려주면 이런
문제를 해결할수 있게죠... 그래서 편법을 쓰자면 Timer컴포넌트를 이용하여 제가 한번
작성해 봤습니다.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Timer1->Enabled = false;
Timer1->Interval = 100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MediaPlayer1->FileName = "c:\\Globe.avi";
MediaPlayer1->Display = ViewPanel;
MediaPlayer1->Open();
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
MediaPlayer1->Play();
MediaPlayer1->Stop();
Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
그럼 참고하세요....
|