Урок 43 - Пишем MediaPlayer, часть(3/7)
В этом уроке мы добавим возможность перематывать файл.
Файл мы будем перематывать с помощью компонента TScrollBar, добавим его форму:
Нам нужно задать ему кое-какие параметры при открытии файла, модифицируем событие на кнопке "Открыть":
procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute = false then exit; // Если файл не выбран то выходим из процедуры if Stream <> nil then // Если поток уже существует то освобождаем его BASS_StreamFree(Stream); // чтобы не было наложения звуков stream:= Bass_streamCreateFile(false, PChar(OpenDialog1.FileName),0,0,0); // Открываем файл if Stream = nil then // Если файл не загрузился ShowMessage('Ошибка файл не загружен!') // Выводим ошибку else begin Panel1.Caption:=ExtractFileName(OpenDialog1.FileName); // Выводим имя файла ScrollBar1.Min:=0; // Устанавливаем минимальную позицию ScrollBar1.Max:=Bass_ChannelGetLength(stream,0)-1; // Максимальную ScrollBar1.Position:=0; // Обнуляем ScrollBar end; end;Далее добавим таймер, в нем мы будем двигать ползунок, показывая сколько уже проиграло. В его обработчике пишем:
procedure TForm1.Timer1Timer(Sender: TObject); begin ScrollBar1.Position:= Bass_ChannelGetPosition(stream,0); // Присваиваем позицию end;Проверим...
Все работает. Двигаемся дальше, теперь сделаем перемотку файла, для этого создадим глобальную переменную Track: boolean; и сам обработчик события OnScroll у ScrollBar1:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin if ScrollCode = scEndScroll then // Как только мы отпусти кнопку мышки то ... begin Bass_ChannelSetPosition(stream, ScrollBar1.Position, 0); // Задаем позицию потоку Track:=false; // Отпустили ScrollBar end else Track:=true; // ScrollBar занят end;Переменная Track будет служить выключателем присваивания позиции ScrollBar'у, что бы мы могли передвинуть ползунок, а так он бы все время возвращался на прежнее место. Изменим обработчик события таймера:
procedure TForm1.Timer1Timer(Sender: TObject); begin if Track=false then // Если ползунок свободен то ... ScrollBar1.Position:= Bass_ChannelGetPosition(stream,0); // Присваиваем позицию end;Все работает!
Мы не будем вдаваться в подробности функций библиотеки, ведь мы пишем простой проигрыватель. Если вы собираетесь написать какой-нибудь супер плеер, то вы наверное сами разберётесь в них и все поймете.
В следующем уроке мы добавим плей-лист.
Удачи!
Встретимся в следующем уроке!
No results found.