PasLibVlc. Усовершенствованный слайдер доступа на основе компонента TScrollBar

В одной из предыдущих статей уже шла речь о реализации слайдера доступа при воспроизведении видеофайлов с помощью VLC SDK. Однако способ, который был описан в этой статье, имеет существенный недостаток. При его использовании наблюдается прерывистое воспроизведение звукового и видео ряда.

Это связано с тем, что при перемещении ползунка компонента TTrackBar возникает событие OnChange и, как следствие, оно обрабатывается (см. код из предыдущей статьи).

Данное обстоятельство позволяет использовать такой слайдер только в режиме паузы (как это и сделано в демо примерах к PasLibVlc). Но это совершенно не приемлемо для перехода по слайдеру в реальном времени в ходе воспроизведения.

К счастью для решения данной проблемы вполне достаточно обычного компонента TScrollBar.

Реализация слайдера на основе TScrollBar и TTrackBar имеют много общего. В обоих случаях полностью одинакова обработка событий компонента TPasLibVlcMediaPlayer. Отличия состоят в обработке событий компонента, который отвечает непосредственно за сам слайдер.

Преимущество данного способа реализации основано на том, что в момент перетаскивания пользователем ползунка слайдера указатель мыши находится над компонентом, а TScrollBar, в отличие от TTRackBar, умеет обрабатывать события OnMouseEnter и OnMouseLeave. Таким образом, введя логическую переменную для отслеживания положения указателя мыши над TScrollBar можно воспрепятствовать нежелательной обработке события OnChange.

Вводим глобальную логическую переменную со значением по умолчанию false (значение true должно быть тогда и только тогда когда указатель мыши находится над TScrollBar).

В обработчике события OnMouseEnter компонента TScrollBar(когда указатель мыши оказывается над ним) присваиваем этой переменной значение true.

Соответственно, в обработчике события OnMouseLeave (когда указатель мыши покидает «пределы» TScrollBar) присваиваем ей значение false.

А, в обработчик события OnChange добавляем проверку её значения

После этого усовершенствованный слайдер практически готов к использованию. Но, у него остаётся один серьёзный недостаток. Когда указатель мыши находится над TScrollBar, воспроизведение всё равно становится прерывистым.

Чтобы устранить этот недостаток нужно, чтобы переход по слайдеру включался не только, когда указатель мыши находится над TScrollBar, но и нажата её левая кнопка.

К сожалению, компонент TScrollBar не имеет возможности сам обработать события кнопок мыши. Поэтому необходимо использовать его более совершенные аналоги из сторонних библиотек компонентов либо отлавливать нажатие левой кнопки мыши альтернативным способом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *