0

我正在制作一个基本的音乐播放器,并使用 TTrackBar 作为歌曲的进度。我也想这样做,这样你就可以拖动栏并快进歌曲。

目前我有一个带有以下行的 OnChange 事件:

MediaPlayer1.position := TrackBar1.value... (with proper casting)

但发生的情况是它会跳过这首歌,因为我拖动它会在沿途的某些随机点播放歌曲时发出断断续续的声音。

我真正想要的是当用户停止拖动歌曲时应该改变。这是什么活动?onStopDrop 甚至不能解决问题..

4

1 回答 1

2

滚动通知消息通过WM_HSCROLL或到达WM_VSCROLL,具体取决于轨迹栏的方向。这些表面在 VCL 控件中为CN_HSCROLLCN_VSCROLL。您需要处理这些消息并忽略滚动代码TB_THUMBTRACK用于防止控件OnChange在用户拖动滑块时触发事件的消息。

例如,这是一个插入器控件,可以满足您的需要:

type
  TTrackBar = class(Vcl.ComCtrls.TTrackBar)
  protected
    procedure CNHScroll(var Message: TWMHScroll); message CN_HSCROLL;
    procedure CNVScroll(var Message: TWMVScroll); message CN_VSCROLL;
  end;

implementation

procedure TTrackBar.CNHScroll(var Message: TWMHScroll);
begin
  if Message.ScrollCode = TB_THUMBTRACK then
    Message.Result := 0
  else
    inherited;
end;

procedure TTrackBar.CNVScroll(var Message: TWMVScroll);
begin
  if Message.ScrollCode = TB_THUMBTRACK then
    Message.Result := 0
  else
    inherited;
end;
于 2014-06-06T09:34:57.787 回答