通过 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 实现这一切,我认为这是不可能的。