Плейлист и случайное воспроизведение песен
|
|
Hanigan | Дата: Среда, 16.05.2012, 12:39 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Здравствуйте,подскажите пожалуйста,как можно сделать так чтоб удалять песни из плей листа можно было по средством нажатия правой кнопки мыши и выбора меню удалить,и возможно ли реализовать случайное воспроизведение песен?
|
|
| |
Filo$oF | Дата: Среда, 16.05.2012, 13:49 | Сообщение # 2 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| Hanigan, Я реализовал это так: Кидаем на форму listbox и PopupMenu И FormCreate пишем:
Code procedure TForm1.FormCreate(Sender: TObject); begin listbox1.PopupMenu:=popupmenu1; end; Создаём в меню пункт "Удалить" и в обработчике события N1Click пишем: Code procedure TForm1.N1Click(Sender: TObject); begin //удаляем активный элемент listbox1.Items.Delete(listbox1.ItemIndex); end;
Здесь показан пример, когда PopupMenu вызывается если выбрана строка Listbox-a. Что бы PopupMenu появилось в любом месте listbox-a, то поставьте свойстве listbox 'popup'.Добавлено (16.05.2012, 13:49) --------------------------------------------- А про случайный фаил, мне и самому интересно бы узнать
|
|
| |
xaramamburu | Дата: Среда, 16.05.2012, 16:15 | Сообщение # 3 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Случайное воспроизведение песен: Размещаем на форме CheckBox и при выборе песни проверяем, если галочка установлена, то выбираем песню случайным образом. Code //воспроизведение следующей песни //если время проигрывания равно длине песни if BASS_ChannelGetPosition(channel, 0)=BASS_ChannelGetLength(channel, 0) then begin //то выбираем следующую песню из плейлиста if CheckBox1.Checked<>True Then begin if i<ListBox1.Items.Count-1 then begin inc(i); Filename:=ListBox1.Items.Strings[i]; ListBox1.ItemIndex:=i; mode:=stop; player; end //если лист закончился - выходим else exit;
end else begin //выбор песни случайным образом i:=random(ListBox1.Items.Count); Filename:=ListBox1.Items.Strings[i]; ListBox1.ItemIndex:=i; mode:=stop; player; end; end;
Ну и в процедуре создания формы OnCreate пропишем Randomize;
|
|
| |
Filo$oF | Дата: Среда, 16.05.2012, 21:33 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| xaramamburu, Что-то я не совсем понял, что и куда вставлять... inc(i) у меня уже используется для повтора выбранного файла.
Code //то выбираем следующую песню из плейлиста if i<Form2.ListBox1.Items.Count-1 then begin if CheckBox1.Checked<>True then inc(i); begin Filename:=Form2.ListBox1.Items.Strings[i]; Form2.ListBox1.ItemIndex:=i; mode:=stop; player;
|
|
| |
xaramamburu | Дата: Среда, 16.05.2012, 21:49 | Сообщение # 5 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Filo$oF, В таймере, где идет переход на следующую песню, старый код заменить этим.
|
|
| |
MuLtLaNdIa | Дата: Среда, 16.05.2012, 22:37 | Сообщение # 6 |
Рядовой
Группа: Пользователи
Сообщений: 12
Статус: Offline
| Quote (xaramamburu) Ну и в процедуре создания формы OnCreate пропишем Randomize;
А зачем в OnCreate процедуру Randomize добавлять? Я попробовал и без неё работает вроде
|
|
| |
Filo$oF | Дата: Среда, 16.05.2012, 22:58 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| xaramamburu, Так, в том-то и дело, что если я старый код заменю на новый у меня пропадёт возможность повторять один фаил.
Сообщение отредактировал Filo$oF - Среда, 16.05.2012, 23:01 |
|
| |
xaramamburu | Дата: Среда, 16.05.2012, 22:59 | Сообщение # 8 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| MuLtLaNdIa, Она устанавливает генератор случайных чисел в его последовательность из 232 псевдослучайных чисел. Т.е. последовательности случайных чисел реже повторяются.
|
|
| |
MuLtLaNdIa | Дата: Среда, 16.05.2012, 23:26 | Сообщение # 9 |
Рядовой
Группа: Пользователи
Сообщений: 12
Статус: Offline
| xaramamburu, Понятно
|
|
| |
Hanigan | Дата: Четверг, 17.05.2012, 12:28 | Сообщение # 10 |
Рядовой
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Почему то вместо воспроизведения случайной песни он заново начинает играть эту
|
|
| |
xaramamburu | Дата: Четверг, 17.05.2012, 14:39 | Сообщение # 11 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Hanigan, Такое возможно, если песен в плейлисте не очень много, так как случайные числа могут повторяться. В идеале нужно создавать массив в котором запоминать уже поигравшие песни и после выбора песни делать проверку по этому массиву, если песня уже была повторить выбор песни заново.))))
|
|
| |
Kiko | Дата: Вторник, 22.05.2012, 13:09 | Сообщение # 12 |
Рядовой
Группа: Пользователи
Сообщений: 5
Статус: Offline
| Quote Такое возможно, если песен в плейлисте не очень много, так как случайные числа могут повторяться. В идеале нужно создавать массив в котором запоминать уже поигравшие песни и после выбора песни делать проверку по этому массиву, если песня уже была повторить выбор песни заново.)))) Всё же требуется этот идеал)),ибо предыдущая версия даже при 20 песнях в плей листе может повторить одну и ту же, 2-3 раза. P.S. Заранее благодарен.
|
|
| |
xaramamburu | Дата: Вторник, 22.05.2012, 13:29 | Сообщение # 13 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Kiko, В чем проблема, это классическая задача по программированию поиск совпадения элементов в массиве с некоторым заданным значением. Или вы хотите, чтоб за вас эту задачу решил дядя? Я не могу думать за всех и хотел бы видеть некоторые ваши решения.)))
|
|
| |
Filo$oF | Дата: Суббота, 02.06.2012, 23:57 | Сообщение # 14 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| Здравствуйте.
Набросал вот такую процедуру для выбора случайной песни.
Code procedure TForm_player.Randm; var old, new: integer; begin randomize; old := List[play_list].ItemIndex; for i := 0 to List[play_list].Count - 1 do begin new := Random(List[play_list].Items.Count); if old <> new then List[play_list].ItemIndex := new else Filename:=List[play_list].Items.Strings[i]; List[play_list].ItemIndex:=Random(List[play_list].Items.Count+1); mode:=stop; player; end; end;
Строка в listbox выбирается и выделяется рандомно, но фаил воспроизводится один и тот же.Добавлено (02.06.2012, 23:57) --------------------------------------------- А, всё разобрался. Песни при рандоме не повторяются. Так же сделал повтор. Правда вышел вееесьма извращённый код
|
|
| |
BM_GORA | Дата: Пятница, 29.06.2012, 14:47 | Сообщение # 15 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| Quote (Filo$oF) Здесь показан пример, когда PopupMenu вызывается если выбрана строка Listbox-a. Что бы PopupMenu появилось в любом месте listbox-a, то поставьте свойстве listbox 'popup'.
а как сделать чтобы при нажатии на правую кнопку (то есть когда вызывается PopupMenu) выделялся трек на котором я нажал на правую кнопку, и удалялся именно он, а то если без этого то получается по какому бы треку я не тыкал на правую кнопку и не нажимал удалить, удаляется именно выделенный трек) надеюсь вы поняли о чем я ))
|
|
| |
|