MediaPlayerコンポーネントで、mp3を再生しようとしております。そこで、トラックバーを使って曲の現在再生しているポジションをリアルに表示したいのですが、どうすればよろしいでしょうか?
MediaPlayer1.Min := ?;
MediaPlayer1.Max := ?;
TrackBar1.Position := MediaPlayer1.Position;
みたいな感じではダメでした。
よろしくお願いします。
とりあえず、こんな感じでできました。
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.Play;
MediaPlayer1.TimeFormat :=tfMilliseconds;
TrackBar1.Min := MediaPlayer1. StartPos;
TrackBar1.Max := MediaPlayer1. Length;
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
Timer1.Enabled :=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
TrackBar1.Position :=MediaPlayer1.Position;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=False;
Timer1.Interval :=1;
end;
ありがとうございました。トラックバーの件、独立させて使用するとうまくいきました。
しかし、以前行ったOnNotifyを使った連続再生と、今回のTimerを使ったトラックバーの同期とを、同時に使おうとすると連続再生ができなくなり、トラックバーだけができるようになります。
どちらもできるようにするにはどうすればよいのでしょうか?
よろしくお願いします。
今のコードはこれです。
//再生&トラックバーの初期化
procedure TForm1.Button2Click(Sender: TObject);
begin
//Flag := False; //Flagの初期化
with MediaPlayer1 do
begin
Open;
If Flag then
begin
Play;
Flag := False;
end
else
begin
Notify := True;
Play;
end;
//Play;
end;
MediaPlayer1.TimeFormat := tfMilliseconds;
TrackBar1.Min := MediaPlayer1.StartPos;
TrackBar1.Max := MediaPlayer1.Length;
end;
//停止
procedure TForm1.Button3Click(Sender: TObject);
begin
//MediaPlayer1.Open;
MediaPlayer1.Notify := False; //Added
MediaPlayer1.Stop;
end;
//Notifyイベントの中身
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
If Flag then Exit;
Inc(n);
If n < OpenDialog1.Files.Count then
begin
with MediaPlayer1 do
begin
FileName := OpenDialog1.Files.Strings[n];
Open;
Notify := True;
Play;
end;
end;
Timer1.Enabled := True;
end;
//リストボックス内の曲をDblクリックしたら演奏
procedure TForm1.ListBox1DblClick(Sender: TObject);
var FileName : String;
begin
FileName := ListBox1.Items[ListBox1.ItemIndex];
if ListBox1.ItemIndex <> -1 then //リストボックス内に何か入っていれば
begin
MediaPlayer1.FileName := FileName;
//再生できるファイルを自動認識する。
MediaPlayer1.DeviceType := dtAutoSelect;
//再生準備完了
MediaPlayer1.Open;
MediaPlayer1.Notify := True; //OnTimer
//再生
MediaPlayer1.Play;
MediaPlayer1.TimeFormat := tfMilliseconds; //msec設定
//Trackbarの設定
TrackBar1.Min := MediaPlayer1.StartPos;
Trackbar1.Max := MediaPlayer1.TrackLength[ListBox1.ItemIndex];
end;
end;
もうひとつお聞きしたいのですが、上の私の書き込みにある、「再生&トラックバーの初期化」の中で、Flagを立てているんですが、デフォルトでは、FlagはTrueになっているんですか?それともFalseなんでしょうか?
よく理解できていませんので、教えてください。
ってゆ〜か、私がFlagの使い方を分かっていないのが原因です(悲)
もうひとつお聞きしたいのですが、上の私の書き込みにある、「再生&トラックバーの初期化」の中で、Flagを立てているんですが、デフォルトでは、FlagはTrueになっているんですか?それともFalseなんでしょうか?
よく理解できていませんので、教えてください。
ってゆ〜か、私がFlagの使い方を分かっていないのが原因です(悲)
>今回のTimerを使ったトラックバーの同期とを、同時に使おうとすると連続再生ができなくなり、トラックバーだけができるようになります。
とりあえず、OnNotifyイベントを使わなければ出来ました。
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.Play;
Timer1.Enabled :=True; //<---こいつを追加
MediaPlayer1.TimeFormat :=tfMilliseconds;
TrackBar1.Min := MediaPlayer1. StartPos;
TrackBar1.Max := MediaPlayer1. Length;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
TrackBar1.Position :=MediaPlayer1.Position;
end;
>デフォルトでは、FlagはTrueになっているんですか?それともFalseなんでしょうか?
Booean型の初期値はFalseのはずです。
いつもありがとうございます。解決しましたd(^-^)!
それと、2000/10/05(木) 09:10:02の書き込みがダブってしまってごめんなさい。
ツイート | ![]() |