// So kann man einen Wave-Sound aus einer Ressource abspielen:
// Als erstes erstellt man mit einem Texteditor (notepad.exe) eine *.rc Datei,
// z.B. "test.rc". Dort hinein schreibt man beispielsweise:
//
cat WAVE c:\katz.wav
// Diese Datei wird mittels des Programms "brcc32.exe" zu "test.res" übersetzt.

// Getestet mit D4 unter XP

// Variante 1 (für ganz kurze Geräusche geeignet)

{$R test.res} 

uses mmsystem;
 
var 
  Song: THandle = 0; 
  Zeiger: PChar; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Song := FindResource(HInstance, 'cat', 'WAVE'); 
  if Song <> 0 then begin 
    Song := LoadResource(HInstance, Song); 
    if Song <> 0 then begin 
      Zeiger := LockResource(Song); 
    end; 
  end; 
end; 
 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  if Song <> 0 then begin 
    UnlockResource(Song); 
    FreeResource(Song); 
  end; 
end; 
 
 
// Abspielen 
 
procedure TForm1.Button7Click(Sender: TObject); 
begin 
  if Song <> 0 then PlaySound(Zeiger, 0, SND_ASYNC or SND_MEMORY); 
end;


// ---------------------------------------------------------

// Variante 2 (einfacher)

{$R test.res} 
 
uses mmsystem;

procedure TForm1.Button8Click(Sender: TObject); 
begin 
  PlaySound(PChar('cat'), HInstance, SND_ASYNC or SND_RESOURCE); 
end;
// ---------------------------------------------------------

// Variante 3 (Stream)

{$R  test.res} 
 
uses mmsystem; 
 
var 
  tr: TResourcestream; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  tr := tresourcestream.create(hinstance, 'cat', 'WAVE'); 
end; 
 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  tr.free; 
end; 
 
 
// Abspielen 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  PlaySound(tr.memory, 0, SND_ASYNC or SND_MEMORY); 
end; 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke