Как зациклить воспроизведение музыки
Код:
mciSendString('play sound.mp3', 0, 0, 0);
Upd.: хотя вот что нашёл я, лишь немного почитав информацию по MCI. Почему автор не мог сделать этого раньше — непонятно.
Тогда как поймать в приложении MCI_NOTIFY_SUCCESSFUL ??
Цитата: Sash1k
Тогда как поймать в приложении MCI_NOTIFY_SUCCESSFUL ??
В цикле обработки сообщений. Ваш К.О.
Код:
var
hd: HWND;
begin
hd := Form1.Handle;
GetMessage(msg, hd, 0, 0);
if msg.message = MCI_NOTIFY_SUCCESSFUL then
mciSendString('stop sound.mp3', 0, 0, 0);
end;
hd: HWND;
begin
hd := Form1.Handle;
GetMessage(msg, hd, 0, 0);
if msg.message = MCI_NOTIFY_SUCCESSFUL then
mciSendString('stop sound.mp3', 0, 0, 0);
end;
Цитата: Sash1k
Создал событие в таймере:
Ужасно. Неужели трудно прочесть десять строк документации и выяснить что например mciSendString принимает в качестве четвертого параметра hwndCallback? Т.е. достаточно передать в него хендл своей формы - а в ней через BEGIN_MESSAGE_MAP/END_MESSAGE_MAP организовать обработку сообщения.
Не знаю, как там в Delphi (впрочем, тут уже ответили, как именно), а на C++ всё было бы предельно просто: в функции окна/диалога обрабатывать сообщение MM_MCINOTIFY, т.е. как-то так
Код:
int DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch(uMsg){
…
case MM_MCINOTIFY:{
… //Здесь будет обработка
}break;
…
}
return 0;
}
switch(uMsg){
…
case MM_MCINOTIFY:{
… //Здесь будет обработка
}break;
…
}
return 0;
}
Цитата: @pixo $oft
Спасибо, kot_! Поржал с комментариев :D
Не знаю, как там в Delphi (впрочем, тут уже ответили, как именно), а на C++ всё было бы предельно просто: в функции окна/диалога обрабатывать сообщение MM_MCINOTIFY,
Не знаю, как там в Delphi (впрочем, тут уже ответили, как именно), а на C++ всё было бы предельно просто: в функции окна/диалога обрабатывать сообщение MM_MCINOTIFY,
Да. Но в Builder/Delphi можно обойтись без switch - через макрос BEGIN_MESSAGE_MAP/END_MESSAGE_MAP, либо надо свою функцию регистрировать как обработчик сообщений и не забывать передавать сообщения дальше.
Все делается гораздо проще, и без всяких костылей с созданием и перехватов сообщений.
Решение проблемы:
Код:
mciSendString('play sound.mp3 repeat', 0, 0, 0);
Оказывается, достаточно было просто погуглить команды MCI ;-)