четверг, 7 июня 2007 г.

Полезный код

Вот это уже более геморойно. Ты, насколько я понял, хочешь проигрывать звук с помощью медиаплеера с вкладки System? Я бы тебе не советовал, т.к. прога от этого будет тормозить (даже компилится долго) + размер тоже больше намного. Лучше используй sndPlaySound или PlaySound просто.
Делай так. Чтобы потом небыло проблем, заного сделай ресурс: в папку с прогой клади музыку и создаваай пустой файл wavfile.rc . В нём пиши MUS WAVE имя.wav. Потом лучше просто скопируй прогу ПУТЬ_К_DELPHI\Bin\brcc32.exe в папку с прогой и выполни её там с параметром wavfile.rc . В uses добавляй MMSystem, и как всегда ниже {$R wavfile.res} . Чтобы воспроизводить пиши: PlaySound(MUS, hInstance, SND_RESOURCE or SND_ASYNC);
Если надо всё-таки воспроизводить из медиа плеера - вот мой рецепт. Сначала извлекаем файл из ресурсов процедурой:
Код:
procedure TMainForm.ExtractRes(RName: string; RType: PChar; SaveFile: string);
var
ResSt: TResourceStream;//Работа с ресурсом
FileSt: TFileStream; //Создание файла
begin
try
ResSt:=TResourceStream.Create(hInstance, RName, RType); //Берём ресурс
try
if FileExists(SaveFile) then DeleteFile(SaveFile); //Всякое может быть...
FileSt:=TFileStream.Create(SaveFile, fmCreate); //Создаём файл
try
FileSt.CopyFrom(ResSt,0); //Копируем в него файл из ресурса
finally
FileSt.Free; //Освобождаем
end;
finally
ResSt.Free; //Тоже
end;
finally
end;
end;

А при крите формы пишем:

Код:
procedure TMainForm.FormCreate(Sender: TObject);
var
s: string;
begin
s:='C:\Temp\'+ExtractFileName(ParamStr(0))+'.wav'; //Так удобнее
ExtractRes('MUS', 'WAVE', s); //Вынимаем
MediaPlayer1.FileName:=s; //Впихиваем в медиаплеер
MediaPlayer1.Open; //Отрываем файл
end;

Ну, и при дестрое файл удаляем, это думаю не составит труда.

Комментариев нет: