Суббота, 16.12.2017, 21:40
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум » Delphi » Создание mp3 плеера на Delphi » Плейлист и случайное воспроизведение песен
Плейлист и случайное воспроизведение песен
HaniganДата: Среда, 16.05.2012, 12:39 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
Здравствуйте,подскажите пожалуйста,как можно сделать так чтоб удалять песни из плей листа можно было по средством нажатия правой кнопки мыши и выбора меню удалить,и возможно ли реализовать случайное воспроизведение песен?
 
Filo$oFДата: Среда, 16.05.2012, 13:49 | Сообщение # 2
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: 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)
---------------------------------------------
А про случайный фаил, мне и самому интересно бы узнать smile

 
xaramamburuДата: Среда, 16.05.2012, 16:15 | Сообщение # 3
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: 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; smile
 
Filo$oFДата: Среда, 16.05.2012, 21:33 | Сообщение # 4
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: 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
Репутация: 26
Статус: Offline
Filo$oF,
В таймере, где идет переход на следующую песню, старый код заменить этим. smile
 
MuLtLaNdIaДата: Среда, 16.05.2012, 22:37 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Quote (xaramamburu)
Ну и в процедуре создания формы OnCreate пропишем Randomize;


А зачем в OnCreate процедуру Randomize добавлять? help Я попробовал и без неё работает вроде smile
 
Filo$oFДата: Среда, 16.05.2012, 22:58 | Сообщение # 7
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
xaramamburu,
Так, в том-то и дело, что если я старый код заменю на новый у меня пропадёт возможность повторять один фаил. smile


Сообщение отредактировал Filo$oF - Среда, 16.05.2012, 23:01
 
xaramamburuДата: Среда, 16.05.2012, 22:59 | Сообщение # 8
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
MuLtLaNdIa,
Она устанавливает генератор случайных чисел в его последовательность из 232 псевдослучайных чисел. Т.е. последовательности случайных чисел реже повторяются. smile
 
MuLtLaNdIaДата: Среда, 16.05.2012, 23:26 | Сообщение # 9
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
xaramamburu,
Понятно smile
 
HaniganДата: Четверг, 17.05.2012, 12:28 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
Почему то вместо воспроизведения случайной песни он заново начинает играть эту
 
xaramamburuДата: Четверг, 17.05.2012, 14:39 | Сообщение # 11
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Hanigan,
Такое возможно, если песен в плейлисте не очень много, так как случайные числа могут повторяться. В идеале нужно создавать массив в котором запоминать уже поигравшие песни и после выбора песни делать проверку по этому массиву, если песня уже была повторить выбор песни заново.))))
 
KikoДата: Вторник, 22.05.2012, 13:09 | Сообщение # 12
Рядовой
Группа: Пользователи
Сообщений: 5
Репутация: 0
Статус: Offline
Quote
Такое возможно, если песен в плейлисте не очень много, так как случайные числа могут повторяться. В идеале нужно создавать массив в котором запоминать уже поигравшие песни и после выбора песни делать проверку по этому массиву, если песня уже была повторить выбор песни заново.))))

Всё же требуется этот идеал)),ибо предыдущая версия даже при 20 песнях в плей листе может повторить одну и ту же, 2-3 раза.
P.S. Заранее благодарен. respect


 
xaramamburuДата: Вторник, 22.05.2012, 13:29 | Сообщение # 13
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Kiko,
В чем проблема, это классическая задача по программированию поиск совпадения элементов в массиве с некоторым заданным значением. Или вы хотите, чтоб за вас эту задачу решил дядя? Я не могу думать за всех и хотел бы видеть некоторые ваши решения.)))
 
Filo$oFДата: Суббота, 02.06.2012, 23:57 | Сообщение # 14
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: 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)
---------------------------------------------
А, всё разобрался. smile
Песни при рандоме не повторяются.
Так же сделал повтор.
Правда вышел вееесьма извращённый код smile

 
BM_GORAДата: Пятница, 29.06.2012, 14:47 | Сообщение # 15
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Offline
Quote (Filo$oF)
Здесь показан пример, когда PopupMenu вызывается если выбрана строка Listbox-a.
Что бы PopupMenu появилось в любом месте listbox-a, то поставьте свойстве listbox 'popup'.


а как сделать чтобы при нажатии на правую кнопку (то есть когда вызывается PopupMenu) выделялся трек на котором я нажал на правую кнопку, и удалялся именно он, а то если без этого то получается по какому бы треку я не тыкал на правую кнопку и не нажимал удалить, удаляется именно выделенный трек) надеюсь вы поняли о чем я ))
 
Форум » Delphi » Создание mp3 плеера на Delphi » Плейлист и случайное воспроизведение песен
Страница 1 из 212»
Поиск:


Copyright MyCorp © 2017Конструктор сайтов - uCoz