![]() |
Problem mit PlaySound-Befehl
Der PlaySound - Befehl vom MMSystem ruft in meinem Programm aus einer Ressourcen-DLL einen Sound auf.
Das Abspielen des Sounds funktioniert zwar, jedoch wird das ganze Programm für die Dauer des Abspielens angehalten bzw. eben lahm gelegt. Kann man das verhindern bzw. umgehen. Ich hab diesen PlaySound in einen eigenen Timer gelegt, doch das bringt nichts. Das ganze Programm reagiert nicht mehr. Der Sound ist 20 Sek. lang und solange kann man nichts mehr machen. Gibt's dafür ne Lösung? z.B. einen Ersatz für PlaySound oder eine andere Einstellung? |
Re: Problem mit PlaySound-Befehl
|
Re: Problem mit PlaySound-Befehl
Wenn ich ASYNC nehme, dann spielt er gar nichts mehr ab.
Liegt das daran, dass die WAVE ja in der DLL als Ressource liegt?
Delphi-Quellcode:
DLLHandle:=LoadLibraryEX(SoundsDLL,0,LOAD_LIBRARY_AS_DATAFILE);
PlaySound('Intro',DLLHandle,SND_ASYNC Or SND_RESOURCE); |
Re: Problem mit PlaySound-Befehl
Delphi-Quellcode:
Var DLLHandle: THandle;
PlaySound(Nil,0,0); DLLHandle:=LoadLibraryEX(SoundsDLL,0,LOAD_LIBRARY_AS_DATAFILE); Try Application.ProcessMessages; PlaySound(PChar('Intro'),DLLHandle,SND_ASYNC Or SND_MEMORY Or SND_RESOURCE); Finally FreeLibrary(DLLHandle); End; (SoundsDLL ist eine Konstante mit dem Namen) Was ist daran falsch? Es kommt kein Sound? - Er kommt nur wenn ich SND_SYNC nehme - aber das will ich ja nicht. |
Re: Problem mit PlaySound-Befehl
Jane, ist klar. ;) Du musst das laden der Resource global machen. Windows läd zur Wiedergabe nur einen Teil der Resource.
In deinem Fall heisst dass das wenn der Sound wiedergegeben wird nicht die Resource nachgeladen werden kann und somit hängt das Programm... So wird es richtiger:
Delphi-Quellcode:
(ungetested)
//...
const SoundsDLL = 'MediaRes.dll'; var DLLHandle: THandle; procedure TForm.ButtonClick... begin PlaySound(Nil, 0, 0); if DLLHandle > 0 then begin if not PlaySound(PChar('SNDOK'), DLLHandle, SND_ASYNC Or SND_MEMORY Or SND_RESOURCE) then MessageBox(Handle, 'Sound konnte nicht abgespielt werden', 'Information', MB_OK); end else begin MessageBox(Handle, 'DLL-Ladefehler', 'Information', MB_OK); end; end; procedure TForm.FormCreate... begin DLLHandle := LoadLibraryEx(SoundsDLL, 0, LOAD_LIBRARY_AS_DATAFILE); end; procedure TForm.FormDestroy...; begin FreeLibrary(DLLHandle); end; //... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz