Урок 44 - Пишем MediaPlayer, часть(4/7)

   Продолжаем насиловать библиотеку Bass и этом уроке мы поработаем над интерфейсом и добавим плей-лист.

   Для начала изменим интерфейс, для этого вытащим 3 компонента TPanel, сразу свойство Caption у них очищаем, у первой и второй панели свойство Align выставляем на alTop,а третью пока не трогаем. Теперь выделяем все 4 кнопки, кликаем правой кнопкой мыши и в открывшемся контекстном меню выбираем Edit->Cut, выделяем первую панель и опять же кликаем правой кнопкой мыши: Edit->Paste. Таким образом мы переместили кнопки внутрь первой панели, также нужно сделать и с остальными компонентами, у вас должно получится вот так:

Внешний вид


   Далее добавим еще один TScrollBar на вторую панель, это будет громкость воспроизводимого звука. Свойство Align у третьей панели сделаем alClient и панель займет все свободное место, в нее мы добавим 2 компонента TListBox вот таким образом:

Внешний вид


   В первом ListBox'е будут только имена файлов, а второй будет скрыт от пользователя, в нем будут полные пути до этих файлов, это сделано для удобства и понимания. Также добавим 2 кнопки в оставшееся свободно место под плей-листом:

Внешний вид


   Ну все с визуальным оформлением закончили теперь дело за кодом. Первое что нам надо сделать, это процедуру добавления треков в плей-лист. После ключевого слова private объявим процедуру:
  private
    { Private declarations }
    procedure AddFiles(filename: string);
   Нажимаем комбинацию клавиш Ctrl+Shift+C и в готовом шаблоне пишем код:
procedure TForm1.AddFiles(filename: string);
begin
	ListBox2.Items.Add(FileName);  // Добавляем путь до файла во 2 лист
	ListBox1.Items.Add(ExtractFilename(fileName)); // Добавляем имя файла в 1 лист

	if ListBox1.ItemIndex=-1 then  // Если мы добавляем первый файл то
	ListBox1.ItemIndex:=Listbox1.Items.Count-1; // устанавливаем фокус на последний элемент
end;
   Процедура готова, её нужно откуда-то вызывать, делать мы это будет при нажатии на кнопку "+", создаем обработчик OnClick:
procedure TForm1.AddFiles(filename: string);
begin
	if OpenDialog1.Execute = false then exit; // Если файл не выбран то выходим
	AddFiles(OpenDialog1.FileName); // Вызываем нашу процедуру добавления файла и передаем туда путь
end;


Внешний вид


   Вот как это работает.

   Теперь нужно также написать процедуру проигрывания выбранного файла. Также после ключевого слова private пишем:
  private
    { Private declarations }
    procedure AddFiles(filename: string);
	procedure PlayItem(item: integer); // Вот она
   Нажимаем волшебную комбинацию и пишем в создавшемся шаблоне:
	if item < 0 then exit; // Если выбран несуществующий элемент то выходим
	if stream <> 0 then // Если поток уже существует то освобождаем его 
		Bass_StreamFree(stream); // чтобы не было наложения звуков

	stream:= Bass_streamCreateFile(false, PChar(ListBox2.Items.Strings[item]),0,0,0); // Открываем файл
	
	if stream = 0 then // Если файл не загрузился
		ShowMessage('Ошибка файл не загружен!') // Выводим ошибку
	else
	begin
		Panel1.Caption:=ExtractFileName(OpenDialog1.FileName); // Выводим имя файла
		ScrollBar1.Min:=0; // Устанавливаем минимальную позицию
		ScrollBar1.Max:=Bass_ChannelGetLength(stream,0)-1; // Максимальную
		ScrollBar1.Position:=0; // Обнуляем ScrollBar

		Bass_ChannelPlay(stream, false); // Играем трек
	end;
   Теперь старый обработчик события OnClick на кнопке "Играть" можно удалить и заменить на этот:
	if Bass_ChannelisActive(stream)= Bass_Active_Paused then // Если поток в состоянии паузы то
		BASS_channelPlay(stream,false) // Продолжаем играть
	else // Иначе
		PlayItem(ListBox1.ItemIndex); //Играем файл заного
 
   Ну вот и все, в следующем уроке мы научимся удалять файлы, изменять громкость и другое.

Удачи!
Встретимся в следующем уроке!




Добавил(а): amok-dima Дата: 2014-11-24
Процедура готова, её нужно откуда-то вызывать, делать мы это будет при нажатии на кнопку "+", создаем обработчик OnClick: procedure TForm1.AddFiles(filename: string); begin if OpenDialog1.Execute = false then exit; // Если файл не выбран то выходим AddFiles(OpenDialog1.FileName); // Вызываем нашу процедуру добавления файла и передаем туда путь end; Здесь не большая ошибка, процедура уже будет называться не AddFiles а TForm1.Button5.Clikc, и думаю что нужно исправить код и в первой кнопке с надписью "Открыть", так как при нажатие данной кнопки, названия трека будет передаваться на Panel1, но при этом при нажатие кнопки "Играть" ничего не происходит.


  1. dragan
    dragan 2 months ago
    how to make Delphi player bass.dll, the listbox application load the tags by itself when I play a song
Отменить.