|
Вопрос # 4 383/ вопрос решён / |
|
Здравствуйте, эксперты!
Создаю на Delphi эдакий комикс: форма содержит иллюстрации и текст. В конце сюжетная развилка. В зависимости от того, что выбрал, открывается новая форма с продолжением сюжета. Хотелось бы все это оформить музыкой. В связи с этим вопрос: Как сделать, чтобы музыка стартовала одновременно с запуском .ехе файла, играла вне зависимости от открытия той или иной формы и начиналась по новой, сразу после окончания трека?
Спасибо!
 |
Вопрос задал: Александр7 (статус: Посетитель)
Вопрос отправлен: 5 июля 2010, 17:16
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Егор
Здравствуйте, Александр7!
У вас же будет главная форма? Её всё равно не закрывают - иначе будет выход из программы. Поэтому кладём туда компонент MediaPlayer. Прописываем туда:
AutoEnable - true, AutoOpen - true, AutoRewind - true, FileName - имя файла, который должен проигрываться, Visible - false (чтобы компонент не был виден).
Теперь в событие формы FormCreate прописывае команду воспроизведения звука:
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Play;
end;
Осталось зациклить воспроизведение - указываем обработчик Notify для медиаплеера - этот обработчик будет вызываться каждый раз, когда будет заканчиваться музыка (вообще то он вызывается не только при этом событии, но нам это не важно):
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
MediaPlayer1.Play;
end;
Да. кстати, если обработчик создания формы не задействован, то можно оба обработчика свести в один. Но это уже на ваш вкус. :)
Второй вариант - можно воспользоваться функцией WinAPI PlanSound. Минусы - можно играть только wav. Плюсы - простая реализация.
Подключаем модуль mmsystem и включаем музыку там, где нам надо:
uses
... mmsystem;
...
PlaySound('G:\music\Aqua\GoodGuys.mp3', 0, SND_ASYNC or SND_LOOP);
Параметр SND_ASYNC говорит о том, что проигрываться музыка будет асинхронно (т.е. запустил и забыл - она сама параллельно будет играть), а параметр SND_LOOP отвечает за то, чтобы музыка зациклилась.
 |
Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 5 июля 2010, 18:13
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 6 июля 2010, 14:29; участников в обсуждении: 4.
|
padonak (статус: Посетитель), 5 июля 2010, 17:45 [#1]:
Александр7: ну можно вот так:
берёшь компонент TMediaPlayer и в событии OnShow формы прописываешь:
procedure TForm1.FormShow(Sender: TObject);
begin
MediaPlayer1.FileName := 'путь к файлу';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
А что до "начиналась по новой", то кинь таймер, поставь интервал размером с длинну твоей песни и пропиши:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
MediaPlayer1.Stop;
MediaPlayer1.Play;
end;
Вот где то так... знаю что убого, зато просто...
|
|
min@y™ (статус: Доктор наук), 5 июля 2010, 18:25 [#2]:
Могу посоветовать проигрывать звук синхронно в параллельном потоке. Могу дать пример реализации.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
padonak (статус: Посетитель), 5 июля 2010, 18:34 [#3]:
min@y™: давай пример... я тоже глянуть хочу...
|
|
min@y™ (статус: Доктор наук), 5 июля 2010, 19:06 [#4]:
Пример с исходниками тут.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ерёмин А.А. (статус: *Администратор), 6 июля 2010, 12:35 [#5]:
Цитата (Егор):
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
MediaPlayer1.Play;
end;
Правильнее так:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.NotifyValue = nvSuccessful then
MediaPlayer1.Play;
end;
|
|
Александр7 (статус: Посетитель), 6 июля 2010, 14:29 [#6]:
Спасибо большое всем участникам за советы! Разобрался
|
4 июля 2012, 13:13: Статус вопроса изменён на решённый (изменил модератор DNK)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|