トラックバーの利用

解決


いおり  2000-10-03 21:06:27  No: 31

MediaPlayerコンポーネントで、mp3を再生しようとしております。そこで、トラックバーを使って曲の現在再生しているポジションをリアルに表示したいのですが、どうすればよろしいでしょうか?
MediaPlayer1.Min := ?;
MediaPlayer1.Max := ?;
TrackBar1.Position := MediaPlayer1.Position;

みたいな感じではダメでした。

よろしくお願いします。


PAPY  2000-10-04 23:54:58  No: 32

とりあえず、こんな感じでできました。

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;


いおり  2000-10-05 18:04:52  No: 33

ありがとうございました。トラックバーの件、独立させて使用するとうまくいきました。
しかし、以前行った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;


いおり  2000-10-05 18:09:21  No: 34

もうひとつお聞きしたいのですが、上の私の書き込みにある、「再生&トラックバーの初期化」の中で、Flagを立てているんですが、デフォルトでは、FlagはTrueになっているんですか?それともFalseなんでしょうか?

よく理解できていませんので、教えてください。
ってゆ〜か、私がFlagの使い方を分かっていないのが原因です(悲)


いおり  2000-10-05 18:10:02  No: 35

もうひとつお聞きしたいのですが、上の私の書き込みにある、「再生&トラックバーの初期化」の中で、Flagを立てているんですが、デフォルトでは、FlagはTrueになっているんですか?それともFalseなんでしょうか?

よく理解できていませんので、教えてください。
ってゆ〜か、私がFlagの使い方を分かっていないのが原因です(悲)


PAPY  2000-10-06 01:22:11  No: 36

>今回の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のはずです。


いおり  2000-10-06 02:08:31  No: 37

いつもありがとうございます。解決しましたd(^-^)! 
それと、2000/10/05(木) 09:10:02の書き込みがダブってしまってごめんなさい。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加