Trackbarの移動に伴いMediaplayerのPositionを変更するには?

解決


panache  2009-06-04 05:10:46  No: 34610

TTimerを使いTimerイベント時にTTrackbarとTMediaplayer.positionを連動させ、音楽再生時に再生と共にTrackbarのつまみが移動するようにしました。

しかし、今度はOnChangeイベントにてTrackbarのつまみを動かした時にMediaplayerの再生する位置を変更させるプログラムを書いたのですが、動作しません。
というのも、
Trackbar1.Position:=Mediaplayer1.Position;//Timerイベント
の記述と
Mediaplayer1.Position:=Trackbar1.Position;//OnChangeイベント
の記述がぶつかりあってしまって再生されません。
OnStartDragイベントなどで試してみても無反応でした。

できればOnChangeイベントを使って、Trackbarのつまみを移動した時にMediaplayer.Positionを指定したいのです。
どのように記述すればよいのでしょうか?
どなたかご教授お願いします。


KHE00221  2009-06-04 10:37:30  No: 34611

OnChangeではないけれど

type

  TTrackBar = class(ComCtrls.TTrackBar);

var
   SavePosition: Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
    TTrackBar(TrackBar1).OnMouseUp   := TrackBarMouseUp;
    TTrackBar(TrackBar1).OnMouseDown := TrackBarMouseDown;
    TrackBar1.PageSize := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    TrackBar1.Position := MediaPlayer1.Position;
end;

procedure TForm1.TrackBarMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    SavePosition := TrackBar1.Position;
    Timer1.Enabled := False;
end;

procedure TForm1.TrackBarMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    if TrackBar1.Position <> SavePosition then
    begin
      MediaPlayer1.Position := TrackBar1.Position;
      MediaPlayer1.Play;
    end;
    Timer1.Enabled := True;
end;


panache  2009-06-06 07:45:56  No: 34612

>KHE00221さん
ありがとうございます!
このコードを入れたら理想の動作をするようになりました。

ちょっとスレから外れてしまうかもしれないのですが、勉強のために聞きたいことがあります。

>TTrackBar = class(ComCtrls.TTrackBar);
この行でTrackbarをclassに入れて(宣言?)いるのはわかるのですが、

>TTrackBar(TrackBar1).OnMouseUp   := TrackBarMouseUp;
>TTrackBar(TrackBar1).OnMouseDown := TrackBarMouseDown;
この行は何をしている行なのでしょうか?
この行によって、「OnMuseUp(Down)イベントをTrackbar1にも追加している」ということなのですか?


KHE00221  2009-06-06 19:49:15  No: 34613

TrackBar1.OnMouseDown := nil;
としてコンパイルすると
プロテクトシンボル TControl.OnMouseDown にアクセスできません
と出てコンパイルできないけど

>TTrackBar = class(ComCtrls.TTrackBar);
TTrackBar(TrackBar1).OnMouseUp   := TrackBarMouseUp;
>TTrackBar(TrackBar1).OnMouseDown := TrackBarMouseDown;

とするとプロテクトシンボルにアクセスできるようになるの


panache  2009-06-09 01:35:43  No: 34614

>KHE00221さん
なるほど。
ありがとうございます。
勉強になりました。
  
ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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