通过 LiveBindings 同步 TMediaPlayer.Position 和 TTrackBar.Position
Syncronizing TMediaPlayer.Position and TTrackBar.Position via LiveBindings
我有一个 TTrackBar 和一个 TMediaPlayer,我正在寻找一种使用 LiveBindigs 功能根据 TMediaPlayer 位置更改 TTrackBar 位置的方法。
问题是,TMediaPlayer上没有事件可以观看TMediaPlayer.Position
属性的变化,所以我的TTrackBar.Position
无法同步。
是否可以在不触发事件的情况下观察组件属性的变化?
不,如果没有合适的事件,就无法监视某些 属性 的变化。
而且您也不希望将任何事件绑定到 MediaPlayer.Position 属性。为什么?
例如,当您播放视频时,每一帧的位置都会发生变化,这意味着当以 30 FPS 播放视频时,此类事件将每秒触发 30 次。因此,根据该事件中的代码,它可能会很快使您的应用程序陷入困境。
所以我能给你的最好建议是在你的表格上放置一个计时器,然后在一定的时间间隔内检查媒体播放器的位置以更新你的 TrackBar。我相信一秒的间隔就足够了,但如果你愿意,你可以缩短它。
只要确保如果您还使用 TrackBar 寻求使用某些控制变量的能力来查看 TrackBar 位置是由用户还是由您的计时器更新的。其他老虎钳你最终会出现奇怪的口吃(我第一次遇到)。
至于仅靠 LiveBindings 实现这一切,我认为这是不可能的。
我有一个 TTrackBar 和一个 TMediaPlayer,我正在寻找一种使用 LiveBindigs 功能根据 TMediaPlayer 位置更改 TTrackBar 位置的方法。
问题是,TMediaPlayer上没有事件可以观看TMediaPlayer.Position
属性的变化,所以我的TTrackBar.Position
无法同步。
是否可以在不触发事件的情况下观察组件属性的变化?
不,如果没有合适的事件,就无法监视某些 属性 的变化。
而且您也不希望将任何事件绑定到 MediaPlayer.Position 属性。为什么?
例如,当您播放视频时,每一帧的位置都会发生变化,这意味着当以 30 FPS 播放视频时,此类事件将每秒触发 30 次。因此,根据该事件中的代码,它可能会很快使您的应用程序陷入困境。
所以我能给你的最好建议是在你的表格上放置一个计时器,然后在一定的时间间隔内检查媒体播放器的位置以更新你的 TrackBar。我相信一秒的间隔就足够了,但如果你愿意,你可以缩短它。
只要确保如果您还使用 TrackBar 寻求使用某些控制变量的能力来查看 TrackBar 位置是由用户还是由您的计时器更新的。其他老虎钳你最终会出现奇怪的口吃(我第一次遇到)。
至于仅靠 LiveBindings 实现这一切,我认为这是不可能的。