Урок 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.
Отменить.