写一个播放器,用了Delphi自带的TTrackBar,实时显示当前播放进度,以及响应用户通过鼠标或者键盘来调整当前的播放进度。
起初这两个事件我都是在TTrackBar.OnChange里处理的。然而实际使用当中你会发现,这样的播放效果是在是让人难以恭维,因为啥,你看看:
我用一Timer来定期取当前的播放进度,在播放函数里:
procedure OnPlay();
begin
TrackBar1.Position := FilePlayedPos;
end;
在Onchange里:
procedure TTrackBar1.OnChange();
begin
FilePlayedPos := TrackBar1.Position;
end;
这样你看到了吧,在播放的时候同时触发了TrackBar的OnChange事件,而OnChange事件又调整了当前播放进度,那么实际的效果肯定是“卡”,卡的厉害。。。。。。
回头想了想,总觉着在OnChange里手动调整播放进度不大合适,要是能够只在每次用户抬起鼠标左键这个事件里去实现似乎更加合理。然而让人费解的是,VCL里的TrackBar竟然没有OnMouse家族事件。得,这次可得想想法子。在TTrackBar上按着Ctrl加鼠标左键跳到了ComCtrls单元,原来TrackBar的老祖宗是TComponent->TControl->TWinControl,这下好办了,TCom