TTimerを使いTimerイベント時にTTrackbarとTMediaplayer.positionを連動させ、音楽再生時に再生と共にTrackbarのつまみが移動するようにしました。
しかし、今度はOnChangeイベントにてTrackbarのつまみを動かした時にMediaplayerの再生する位置を変更させるプログラムを書いたのですが、動作しません。
というのも、
Trackbar1.Position:=Mediaplayer1.Position;//Timerイベント
の記述と
Mediaplayer1.Position:=Trackbar1.Position;//OnChangeイベント
の記述がぶつかりあってしまって再生されません。
OnStartDragイベントなどで試してみても無反応でした。
できればOnChangeイベントを使って、Trackbarのつまみを移動した時にMediaplayer.Positionを指定したいのです。
どのように記述すればよいのでしょうか?
どなたかご教授お願いします。
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;
>KHE00221さん
ありがとうございます!
このコードを入れたら理想の動作をするようになりました。
ちょっとスレから外れてしまうかもしれないのですが、勉強のために聞きたいことがあります。
>TTrackBar = class(ComCtrls.TTrackBar);
この行でTrackbarをclassに入れて(宣言?)いるのはわかるのですが、
>TTrackBar(TrackBar1).OnMouseUp := TrackBarMouseUp;
>TTrackBar(TrackBar1).OnMouseDown := TrackBarMouseDown;
この行は何をしている行なのでしょうか?
この行によって、「OnMuseUp(Down)イベントをTrackbar1にも追加している」ということなのですか?
TrackBar1.OnMouseDown := nil;
としてコンパイルすると
プロテクトシンボル TControl.OnMouseDown にアクセスできません
と出てコンパイルできないけど
>TTrackBar = class(ComCtrls.TTrackBar);
TTrackBar(TrackBar1).OnMouseUp := TrackBarMouseUp;
>TTrackBar(TrackBar1).OnMouseDown := TrackBarMouseDown;
とするとプロテクトシンボルにアクセスできるようになるの
>KHE00221さん
なるほど。
ありがとうございます。
勉強になりました。
ありがとうございました。
ツイート | ![]() |