ホーム >プログラム >Delphi 6 ローテクTips

コンポーネントメモ・TMediaPlayer

TMediaPlayer使用上の注意点。

Pauseメソッド

Pauseメソッドは再生の一時停止、再開の両方に使えますが、Pauseで再開させるとメディアの終わりに達しても発生するはずのOnNotifyイベントが発生しなくなります。

procedure TForm1.Pause1Click(Sender: TObject);
begin
  if (MediaPlayer1.Mode = mpPlaying) then begin
    MediaPlayer1.Pause;
  end else begin
    MediaPlayer1.Play;
  end;
end;

再開にPlayメソッドを使うとメディアの終わりにはきちんとOnNotifyイベントが発生します。
どうしてもPauseメソッドを使いたいのなら、OnNotifyイベントの中でNotifyプロパティをTrueにセットし直す必要があります。

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  if (MediaPlayer1.Position = MediaPlayer1.Length) then begin
    Next1Click(nil);  //次のメディアを再生
  end else begin
    MediaPlayer1.Notify := True;
  end;
end;

ちなみにNotifyイベントはメディアの終わりにだけ発生するわけではなく一時停止したあとの再開やPositionのセット後などにも発生します。
なのでメディアの終わりかどうかを判断するにはMediaPlayerの現在位置がメディアの長さと同じかどうかを判定する必要があります。

DiplayRectプロパティ

DiplayRectプロパティの引数は(Left, Top, Width, Height)

(Left, Top, Right, Bottom)ではないことに注意。
SetBoundsの引数の与え方と同じです。

ビデオのある無し

メディアにビデオがあるかどうかはOpenのあとでDisplayRectを調べて、RightとBottomの値が両方0より大きければビデオあり、そうでなければビデオなしと判断します。
CapabilitiesプロパティにmpUsesWindowsが含まれているかを調べてもだめです。

ビデオのサイズ

ビデオのオリジナルの幅と高さを取得するにはOpenのあとでDisplayRectのRightとBottomを調べます。
Rightにオリジナルの幅がBottomにオリジナルの高さが入っています。
DisplayRectの値を操作した後では正しい値が取得できなくなるので、必要ならフォームのprivate部にFiOriginalWidth, FiOriginalHeightなどのオリジナルの幅と高さの保存用変数を用意する必要があります。


2009-01-28: