Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 10:22   #1
Mmo
 
Регистрация: 06.04.2013
Сообщений: 8
По умолчанию Как в MediaPlayer проиграть случайный трек после окончания предыдущего

Хочу, чтобы по окончании трека MediaPlayer автоматически начал проигрывать следующий, со случайным номером, который выставляется в ячейке. Попытка использовать следующий код:

Код:
Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)
    If NewState = 8 Then   ' Событие 8 - конец трека
        sn = Worksheets("Playlist").Cells(1, 7) 'В ячейке стоит рандомное число - номер следующего трека
        WindowsMediaPlayer1.URL = Worksheets("Playlist").Cells(sn, 3) ' Ссылка на нужный файл
        WindowsMediaPlayer1.Controls.Play ' На всякий случай, чтобы всё-таки проигрывалось
    End If
End Sub
В итоге по окончании трека ссылка на файл автоматически меняется, но плеер замирает. Чтобы музыка пошла, надо нажать play.
Попробовал подебажить - после команды WindowsMediaPlayer1.URL = Worksheets("Playlist").Cells(sn, 3) трек начинает проигрываться и эта процедура вызывается ещё 3 раза: с кодами 9, 10 и снова 9 и после выхода из последней трек останавливается.
В общем, я уже голову сломал - не понимаю, почему так и как это исправить. Помогите, люди добрые )))
Mmo вне форума Ответить с цитированием
Старый 06.04.2013, 11:25   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Mmo, в каком модуле у вас находится событие Private Sub WindowsMediaPlayer1_PlayStateChange (ByVal NewState As Long).

Есть следующие виды модулей в "VBA":
  1. стандартный модуль;
  2. модуль класса;
  3. модуль формы;
  4. модуль объекта программы "MS Office".
Скрипт вне форума Ответить с цитированием
Старый 06.04.2013, 13:12   #3
Mmo
 
Регистрация: 06.04.2013
Сообщений: 8
По умолчанию

Скрипт, Модуль листа, на котором находится объект MediaPlayer. Я так понимаю, это к 4 пункту относится.
Mmo вне форума Ответить с цитированием
Старый 06.04.2013, 13:15   #4
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Mmo, а в Tools - References... вы какую библиотеку подключили для работы с "Media Player"?
Скрипт вне форума Ответить с цитированием
Старый 06.04.2013, 14:50   #5
Mmo
 
Регистрация: 06.04.2013
Сообщений: 8
По умолчанию

Скрипт, а есть какие-то варианты? wmp.dll вроде как.
Mmo вне форума Ответить с цитированием
Старый 06.04.2013, 14:58   #6
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Mmo, у меня здесь: Tools - References... 4 библиотеки, связанные с "Windows Media Player":
  1. Windows Media Player (wmp.dll);
  2. Windows Media Player (msdxm.tlb);
  3. Windows Media Compatibility Layer;
  4. Windows Media Player Launcher.
Скрипт вне форума Ответить с цитированием
Старый 06.04.2013, 23:21   #7
Mmo
 
Регистрация: 06.04.2013
Сообщений: 8
По умолчанию

Скрипт, ну собсно у меня wmp.dll подключена. Я уже ответил.
Mmo вне форума Ответить с цитированием
Старый 07.04.2013, 07:31   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Mmo, у вас на Excel-листе находится "WMP"?
Скрипт вне форума Ответить с цитированием
Старый 07.04.2013, 11:42   #9
Mmo
 
Регистрация: 06.04.2013
Сообщений: 8
По умолчанию

Скрипт, да
Mmo вне форума Ответить с цитированием
Старый 08.04.2013, 03:05   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Допросы закончены?
Нашел пока такой выход.
По другому после старта останавливается.
Код:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub CommandPlay()
       sn = Worksheets("Playlist").Cells(1, 7) 'В ячейке стоит рандомное число - номер следующего трека
        WindowsMediaPlayer1.URL = Worksheets("Playlist").Cells(sn, 3) ' Ссылка на нужный файл
        For n = 1 To 10
        Sleep (100)
         DoEvents
        Next
 
End Sub
Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)
    Static i As Integer
    If i >= 8 Then
        i = i + NewState
    End If
    If NewState = 8 Then
        i = NewState
    End If
    If i = 18 Then
        i = 0
        CommandPlay
    End If
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вернуть имя предыдущего месяца? valerij Microsoft Office Excel 7 14.03.2013 12:21
как не ждать окончания процедуры(функции)? Кольша Общие вопросы Delphi 14 02.02.2012 16:49
Bass.dll событие после окончания воспроизведения. ZBEP Мультимедиа в Delphi 4 30.01.2011 04:06
Кем я могу работать после окончания учебы помимо как прогрммистом Kobe Помощь студентам 7 13.09.2010 03:44
Как узнать какой трек сейчас играет.. NBSTUDIO Мультимедиа в Delphi 2 01.10.2009 22:11