Текущий архив: 2005.10.23;
Скачать: CL | DM;
Внизприсоединение файла Найти похожие ветки
← →
Andrey235 (2005-09-28 09:28) [0]как присоединить файл *.waw или *.mp3 к моему exe_шнику?
← →
Gydvin © (2005-09-28 09:40) [1]///Nomadic
Можно ли сделать так, чтобы в исполняемом файле программы находился какой-нибудь звук в формате .wav, и можно было бы проиграть этот звук?
Создаешь в папке проекта файл MyWave.rc туды пишешь:
MyWave RCDATA LOADONCALL MyWave.wav
в командной строке пишешь
brcc32.exe полный путь /MyWave.rc,
получаешь MyWave.res.
В своей программе пишешь:
--------------------------------------------------------------------------------
{$R MyWave.res}
Все!
Предупреждая следующий твой вопрос "а как прочитать wave-файл из исполняемого файла?"
--------------------------------------------------------------------------------
procedure RetrieveMyWave;
var
hResource: THandle;
pData: Pointer;
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, "MyWave", RT_RCDA
TA));
try
pData := LockResource(hResource);
if pData = nil then
raise Exception.Create("Cannot read MyWave");
// Здесь pData указывает на MyWave
// Теперь можно, например, проиграть его (Win32):
PlaySound("MyWave", 0, SND_MEMORY);
finally
FreeResource(hResource);
end;
end;
← →
Andrey235 (2005-09-28 16:10) [2]ни чё не понял
← →
Джо © (2005-09-28 16:31) [3]
> [2] Andrey235 (28.09.05 16:10)
> ни чё не понял
Это плохо.
← →
Кефир87 © (2005-09-28 16:40) [4]
> Andrey235 (28.09.05 16:10) [2]
>
> ни чё не понял
Так может и не стоит тебе этого делать, раз таких простых весчей не понимаешь. Я имею в виду "всему свое время"...
← →
Profi © (2005-09-28 20:55) [5]Andrey235 (28.09.05 16:10) [2]
Попарся и все получится.
← →
z007 (2005-09-29 01:40) [6]Мастера мимо этого раздела без шуток не ходят...
Gydvin дал старый, но, действительно, не сразу понятный ответ.
"Где скачать файл MyWave.wav?" :)
Без него ничего не получается...
На самом деле есть 2 способа:
1. Действительно, использовать ресурсы. Но на сегодня уже давно гораздо удобнее использовать встраиваемые в IDE редакторы ресурсов проекта (такой был, кажется в rxlib).
Потом из ресурса загружаем и проигрываем. Правда, mp3 вряд ли удастся прочитать как рассказал Gydvin:(
Боюсь, что ресурс придется извлекать во временный файл - ч/з ResourceStream(?).
2. Другой вариант - дописывать файл в конец exe, потом его оттуда читать (тоже, боюсь, во временный файл) и делать с ним что заблагорассудится.
Второй вариант хорош тем, что на стадии компиляции файл не присоединяется, можно дописать его к уже готовой программе (или dll) в т.ч. чужой. Этим же и плох.
← →
Fay © (2005-09-29 14:09) [7]2 z007 (29.09.05 1:40) [6]
>> Другой вариант - дописывать файл в конец exe,
Извращение. Ахтунг!
← →
Gydvin © (2005-09-29 15:12) [8]Потом из ресурса загружаем и проигрываем. Правда, mp3 вряд ли удастся прочитать как рассказал Gydvin:(
А это и так для wav, для mp3 действительно (наско-ко я знаю) надо извлекать на хард и потом проигрывать, хотя может я и ошибаюсь (как-то незадавался этой проблемой)
← →
Gydvin © (2005-09-29 15:39) [9]Andrey235 (28.09.05 16:10) [2]
ни чё не понял
Чего ж тут непонятного, я сам учился по этому примеру и все вышло с первой попытки.
Кидаешь свой wav в папку пректа назови его MyWave.wav
создай новый текстовый файл напиши там
MyWave RCDATA LOADONCALL MyWave.wav
сохрани закрой, переменуй его в MyWave.rc
далее у тя в меню пуск/ выполнить там пишешь
brcc32.exe полный путь /MyWave.rc, ///полный путь в смысле полный путь до твоего MyWave.rc
жмешь ок в твоей папке проекта должен появится MyWave.res
в своей юните где {$R *.dfm}
пишешь
{$R MyWave.res}
кидаешь button1 в обработчик которого добавляешьvar
hResource: THandle;
pData: Pointer;
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, "MyWave", RT_RCDA
TA));
try
pData := LockResource(hResource);
if pData = nil then
raise Exception.Create("Cannot read MyWave");
// Здесь pData указывает на MyWave
// Теперь можно, например, проиграть его (Win32):
PlaySound("MyWave", 0, SND_MEMORY);
finally
FreeResource(hResource);
end;
end;
компилишь нажимаешь буттон должна зазвучать музыка, овации!
← →
Andrey235 (2005-09-30 09:18) [10]компилишь нажимаешь буттон зазвучит музыка, овации!
← →
Andrey235 (2005-09-30 13:37) [11]Только проигрывается она из WAV а не из res При удалении wav и rc прога выдаёт звук ошибки
функция PlaySound("MyWave", 0, SND_MEMORY);
с последним параметром SND_MEMORY не работает ставишь SND_SYNC и всё нормально...
а можно ли проигрывать res не через WIN32
← →
Gydvin © (2005-09-30 14:59) [12]Только проигрывается она из WAV а не из res
Быть токого немогет
← →
z007 (2005-09-30 21:23) [13]2Fay
>> Другой вариант - дописывать файл в конец exe,
>>Извращение. Ахтунг!
вполне распространенная практика в установщиках, некоторых презениациях , в проекторе Flash.
← →
Starcom © (2005-10-01 01:23) [14]Gydvin © (29.09.05 15:39) [9]
Сделал как вы и написали и вот что пишет компилятор
может чтото надо в юзес написать или нет...
Build
[Error] MyRegistry.pas(67): Undeclared identifier: "PlaySound"
[Error] MyRegistry.pas(67): Undeclared identifier: "SND_MEMORY"
← →
Джо © (2005-10-01 02:30) [15]
> [14] Starcom © (01.10.05 01:23)
uses MMSystem;
← →
Starcom © (2005-10-01 11:32) [16]Джо © (01.10.05 02:30) [15]
Мастера в примерах всегда про это забывают! Пасибо!
С Уважением Starcom! :)
← →
Starcom © (2005-10-01 11:51) [17]Andrey235 (30.09.05 13:37) [11]
У меня тоже самое!
Мастера что за неточность в источниках!
← →
Starcom © (2005-10-01 14:28) [18]Ну и Шо! Или семечки полузгаем! :)
← →
Gydvin © (2005-10-01 14:53) [19]Не знаю что у вас попробуйте так:
в Mywave.rc написать
MyWave Wave MyWave.wav
а в буттоне
PlaySound("mywave", hInstance, SND_RESOURCE or SND_SYNC);
только опробывал все ровно.
← →
Starcom © (2005-10-01 15:33) [20]Gydvin © (01.10.05 14:53) [19]
Всё О"Кей! Так в чём же баг!
← →
Gydvin © (2005-10-01 16:15) [21]Starcom © (01.10.05 15:33) [20]
Несмотрел, некогда
← →
Starcom © (2005-10-01 17:00) [22]Gydvin © (01.10.05 16:15) [21]
Бай! ;{
Страницы: 1 вся ветка
Текущий архив: 2005.10.23;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.037 c