Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #53, АПРЕЛЬ 2005 г.

Выделка шкурок в домашних условиях

6th (6th@mail.ru)

Спецвыпуск: Хакер, номер #053, стр. 053-080-4


procedure TfrMain.spOpenBtnClick(Sender: TObject);

begin

//добавляем выбранный файл в плейлист

if spOpenDialog.Execute then

spListBox.Items.Add(spOpenDialog.FileName);

end;

Теперь кидаем два spSkinLabel для отображения длины трека и текущего положения, а также spSkinTrackBar - для красоты. Каждый раз, когда в плейлисте будет выбираться новый файл, нужно будет выводить в лэйблы новые значения и сбрасывать trackbar в ноль. Чует мое сердце, эта последовательность встретится не раз, так что лучше вынести ее в отдельную процедуру:

procedure TfrMain.PlayFile(Filename : String);

begin

//открываем указанный файл

Player.FileName := Filename;

Player.Open;

//начинаем его проигрывать

Player.Play;

//настраиваем trackbar на длину трека в секундах

//(TrackLength возвращает значение в миллисекундах)

spTrackBar.MaxValue := Player.TrackLength[1] div 1000;

//сбрасываем его в ноль

spTrackBar.Value := 0;

//выводим длину трека в удобоваримом виде

spLenLabel.Caption := IntToStr(spTrackBar.MaxValue div 60) + ':' + IntToStr(spTrackBar.MaxValue - (spTrackBar.MaxValue div 60)*60);

end;

Осталось заставить все это работать в процессе воспроизведения музыки. Здесь все просто: помогут spTrackBar.Value и Player.Position (смотри полный исходник на диске). Теперь о плейлисте. Щелкнув по файлу в нем, нужно заставить этот файл проигрываться:

procedure TfrMain.spListBoxListBoxClick(Sender: TObject);

begin

PlayFile(spListBox.Items[spListBox.ItemIndex]);

end;

Теперь нужно заставить нормально работать пять оставшихся кнопок:

procedure TfrMain.spPlayBtnClick(Sender: TObject);

begin

Player.Play;

end;

//аналогично для Pause и Stop

procedure TfrMain.spPrevBtnClick(Sender: TObject);

begin

//кнопка Previous должна переводить указатель на предыдущий

//файл в плейлисте...

spListBox.Selected[spListBox.ItemIndex-1] := True;

//…и начинать его проигрывать

PlayFile(spListBox.Items[spListBox.ItemIndex]);

end;

//аналогично для кнопки Next

Что бы еще добавить?

Весьма к месту пришлась бы возможность выбора положения в файле с помощью trackbar'а. Опять же достаточно немного поиграть с величинами Player.Position и spTrackBar.Value. Ну и, конечно, какой плеер без shuffle'а! Кидаем spSkinCheckRadioBox и правим код кнопки Next:

procedure TfrMain.spNextBtnClick(Sender: TObject);

begin

//если shuffle включен

if spShuffle.Checked then begin

//перейдем на случайный трек

Randomize;

spListBox.Selected[Random(spListBox.Items.Count)] := True

end

//иначе все по-старому

else

spListBox.Selected[spListBox.ItemIndex+1] := True;

PlayFile(spListBox.Items[spListBox.ItemIndex]);

end;

И наконец, еще две вещи: строка состояния в заголовке формы и прилипание к краю экрана. Строка состояния позволяет приблизиться на один шаг к великому и ужасному Winamp’у, ну а прилипание давно стало де-факто в мире MP3-плееров и не только. С первым все просто:

const

//массив возможных состояний плеера

Modes: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');

//OnNotify случается, когда режим работы TMediaPlayer изменяется

Назад на стр. 053-080-3  Содержание  Вперед на стр. 053-080-5