Originariamente inviato da Lyll0
il comando PlaySound() è scomodo perchè il primo parametro da passare è il nome del file ma può solo essere fornito come 'path'.
quindi per dare effetti ad un controllo (tipo click.wav su pulsante) è comodo e veloce, ma non consente di sfruttare path complessi creati con procedure esterne.
Queste affermazioni sono false.

La funzione API PlaySound non ha alcuna limitazione sul percorso; è in grado di riprodurre qualsiasi risorsa sonora in formato WAVE sia da file esterni, sia da risorse incorporate nella applicazione stessa oppure dal sistema usando una delle costanti predefinite che rappresentano un evento (avvio, arresto, minimizza, ripristino, errore...).

La funzione PlaySound, come tutte le funzioni API, accetta stringhe di testo null terminated, cioè terminate da un carattere nullo (codice 0, zero). Le stringhe in Delphi sono strutture dati gestite dinamicamente e di gran lunga più complesse, pertanto è necessario eseguire un "casting" per informare Delphi che la stringa da passare deve figurare così come descritto sopra.

Per fortuna, questa operazione non richiede allocazioni di buffer manuali o altro...basta semplicemente "castare" la stringa al tipo PChar (puntatore a carattere), che è equivalente poi al PAnsiChar.

Un esempio:
codice:
procedure TDemoForm.PlayButtonClick(Sender: TObject);
var
  Path: string;
begin
  Path := 'C:\Cartella\Sottocartella\NomeFile.wav';
  PlaySound(PChar(Path), 0, SND_FILENAME);
end;