| 
| 
 | Вопрос # 343/ вопрос решён / | 
 |  Здравствуйте. MediaPlayer1 проигрывает песню, которая находится в папке проекта.В этой папке есть ещё песни, как сделать, так что бы после этой песни
 он играл следующюю, потом ещё, короче говоря, все песни по очереди
 которые находятся в этой папке. Снизу я написал код:
 MediaPlayer1.Filename := './Тайна.MP3';
 MediaPlayer1.Open;
 MediaPlayer1.Play;
 И если можно то подскажите, как проиграть все песни один раз, а другой
 кнопке дать команду играть бесконечно. Заранее благодарен.
 
|  |   Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)Вопрос отправлен: 23 февраля 2007, 23:14
 Состояние вопроса: решён, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Вадим К Нужно сделать так. Перед началом воспроизведения сканируем каталог и составляем список файлов - список воспроизведения. Запишем его в TStringListВот эта процедура составит нужный список для заданого каталога.
 procedure TForm1.Button1Click(Sender: TObject);
 var fs:TSearchRec;
 p:string;
 begin
 p:='D:\Music\';
 if FindFirst(p+'*.mp3',faAnyFile,fs)=0 then
 repeat
 sl.Add(p+fs.Name);
 until FindNext(fs)<>0;
 FindClose(fs);
 end;
 здесь sl - класс типа TStringList
 Дальше. Теперь надо иметь номер песни, которая воспроизводиться. Когда оканчивается песенка - просто инкрементируете номер и загружаете с списка имя файла.
 Осталось малость - узнать, что кончилося воспроизведение. Для этого нужно в обработчике
 OnNotify проверять состояние плеера (Mode и NotifyValye) Только не забудьте установить
 MediaPlayer1.Notify:=true; где нибуть в FormCreate, иначе этот обработчик дёргаться не будет
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 23 февраля 2007, 23:51
 Оценка за ответ: 5
 |  Ответ #2. Отвечает эксперт: Aymenel Здравствуйте, Толков Геннадий Викторович!Предложу свой вариант немного отличающийся от варианта эксперта Вадим К.
 
 var
 Files: TStringList;
 Number: Integer;
 MRepeat: Boolean;
 
 procedure TForm1.FormCreate(Sender: TObject);
 var
 MFile: TSearchRec;
 Path: String;
 begin
 Path := '(* Здесь указать путь к директории с файлами *)';
 Files := TStringList.Create;
 MediaPlayer1.Notify   := True;
 MediaPlayer1.OnNotify := NotifyProc;
 if FindFirst(Path+'*.mp3',faAnyFile,MFile)=0 then
 repeat
 Files.Add(Path+MFile.Name);
 until FindNext(MFile)<>0;
 FindClose(MFile);
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 //при нажатии на кнопку Button1
 //начнется воспроизведение первой песни
 // из каталога
 begin
 MediaPlayer1.FileName := Files.Stringd[0];
 Number := 0;
 MediaPlayer1.Open;
 MediaPlayer1.Play;
 end;
 
 procedure TForm1.NotifyProc(Sender: TObject);
 begin
 with Sender as TMediaPlayer do
 begin
 case Mode of
 mpStopped: begin
 if Number < Files.Count -1
 then begin
 Inc(Number);
 MediaPlayer1.FileName := Files.Strings[Number];
 MediaPlayer1.Open;
 MediaPlayer1.Play;
 end else
 if MRepeat then begin
 Number := 0;
 MediaPlayer1.FileName := Files.Strings[Number];
 MediaPlayer1.Open;
 MediaPlayer1.Play;
 end;
 end;
 end;
 Notify := True;
 end;
 end;
 
 procedure TForm1.Button2OnClick(Sender: TObject);
 //Установка повторения
 begin
 MRepeat := True;
 end;
 
 procedure TForm1.FormDestroy(Sender: TObject);
 begin
 Files.Free;
 end;
 
|  | Ответ отправил: Aymenel (статус: 2-ой класс)Время отправки: 24 февраля 2007, 01:51
 Оценка за ответ: 5
 |  Ответ #3. Отвечает эксперт: Дима Гусаков Здравствуйте, Толков Геннадий Викторович!Можно на форму поместить компонент ListBox (видимый или нет) в который записать все песни, находящиеся в папке, и указывать их как в MediaPlayer1.Filename поочереди.
 
|  | Ответ отправил: Дима Гусаков (статус: 2-ой класс)Время отправки: 24 февраля 2007, 19:54
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 0. 31 января 2011, 19:22: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |