我正在制作一个基本的音乐播放器并使用TTrackBar作为歌曲的进展。我也想做到这一点,你可以拖动酒吧并快进歌曲。
目前我有一个OnChange事件,其中包含以下行:
MediaPlayer1.position := TrackBar1.value... (with proper casting)
但是,当我在沿途的某些随机点播放歌曲时,我拖动发出一声不稳定的声音,它会跳过这首歌。
我真正想要的是当用户停止拖动歌曲应该改变时。这是什么事? onStopDrop甚至没有做到这一点..
答案 0 :(得分:2)
滚动通知消息会通过WM_HSCROLL
或WM_VSCROLL
到达,具体取决于跟踪栏的方向。这些在VCL控件中显示为CN_HSCROLL
和CN_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;