怎样同步TrackBar的滑块?(100分)

  • 主题发起人 主题发起人 leslie cheng
  • 开始时间 开始时间
L

leslie cheng

Unregistered / Unconfirmed
GUEST, unregistred user!
在我的多媒体播放程序中,我使用了一个Timer控件来控制滑块的移动,
Timer的internal设为1000,Timer控件中有这样一个语句:
TrackBar1.position:=mediaplayer1.position div 1000;

这样可以实现随着播放,trackbar显示进度。

但我想实现拖动滑块快速浏览媒体文件时:
TrackBarChange过程,在其中加入了:
mediaplayer1.position:=trackbar1.position*1000;


当我执行程序时,图像总是断续,媒体数据的操作不同步,我的问题是:
怎样使它们同步呢,使trackbar即可以随播放时间移动又可以根据用户的调整位置播放?
这个问题以前回答过,但并没有给出解决方法!谢谢!!!!!!

 
TrackBarChange过程,在其中加入了:
mediaplayer1.pause;
mediaplayer1.position:=trackbar1.position*1000;
mediaplayer1.play;
 
GCGAT :
还是不行!!!
 
sorry . 没看到还有一个 timer

在 Ontimer 里不要直接对 TrackBar.Position 赋值;

SendMessage(TrackBar1.Handle, WM_USER+5, 1, mediaplayer1.position);
即可

另在 TrackBar.Onchange 中, 不用pause 和 play;


 
GGCAT: 接受答案了!
你可以讲一下SendMessage的用法和各个参数的意义吗?


 
sendmessage 你应该是知道的。
对于这次的问题,TTrackBar 是一个 Windows 标准控件的 VCL 封装。
在对 Position 赋值时 ,TTrackBar 会先把值通过消息通知内部的Windows 类。
然后触发 OnChange 事件,因此出现了循环调用的问题,导致不能正常播放
因此必须绕过事件的触发。在 查看了 TTrackBar 的 VCL 源码后,
得知 需要发送的消息 的 消息常量 是 WM_User+5;
lparam为0,
wparam 为新的position. 这样,就直接发送 新位置 给内部的类,而避免了
事件的触发。
 

Similar threads

D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
后退
顶部