播放视频时程序冲突

Procedure conflict when video play

我使用来自 Zeau64 的 Alcinoe 视频播放器,当视频播放时,停止几毫秒然后重新开始。 每个程序单独工作都很好,但我发现我与这些程序有冲突。计时器和跟踪使系统混乱并停止毫秒。 这是我的代码。

procedure TForm9.FormCreate(Sender: TObject);
begin
  ALVideoPlayerSurface1.VideoPlayer.prepare(VidUrl1, True);
  TrackBar1.Max := ALVideoPlayerSurface1.VideoPlayer.getDuration;
end;

procedure TForm9.ALTrackBar1Tracking(Sender: TObject);
begin
  ALVideoPlayerSurface1.VideoPlayer.seekTo(Round(TrackBar1.Value));
  SecPass.Text := FormatDateTime('nn:ss', (Round(TrackBar1.Value) div 1000) / SecsPerDay);
end;

procedure TForm9.Timer1Timer(Sender: TObject);
begin
  TrackBar1.Value := ALVideoPlayerSurface1.VideoPlayer.getCurrentPosition;
  SecPass.Text := FormatDateTime('nn:ss', (ALVideoPlayerSurface1.VideoPlayer.getCurrentPosition div 1000) / SecsPerDay);
end;

我可以在哪里放置 TrackBar Tracking 控件来将视频移动到我想要的位置? 我尝试了 Onclick、OnTap,但我的 Tracking 为 False;

问题是您的计时器正在更新您的 TrackBar 位置,这反过来会触发 TrackBar 跟踪事件,导致您的程序寻找您的视频位置。

我的音乐播放器过去也遇到过同样的问题。我通过添加全局变量 Seeking 来解决它,我在 Trackbar OnMouseDown 事件上设置为 True 并在 OnMouseUp 事件上设置为 False 。然后在 TrackBar 跟踪事件中,我检查 Seeking 变量是否为真。如果是我知道我在手动寻找歌曲中的位置,如果不是我知道 TrackBar 位置是由我的计时器更新的,所以不需要寻找。