PDA

Ver la Versión Completa : MessageBox y PlaySnd simultáneos


ixMike
16-07-2007, 19:21:33
Hola a todos.

Lo primero quería advertir que se ha roto la barra espaciadora, por eso escribo con guiones bajos (espero que no sea una molestia).

Y ahora mi pregunta.

Veréirs, me preguntaba si sería posible mostrar un MessageBox mientras se reproduce un archivo de audio mediante PlaySnd.
Y, además, que cuando pulsara el boton OK del MsgBox dejara de sonar el archivo de audio.

Gracias.

//Edito: Para cambiar los guiones bajos por espacios. ;)

seoane
16-07-2007, 19:31:55
Prueba con algo así:

type
TSound = class(TThread)
private
FPath: String;
protected
procedure Execute; override;
public
constructor Create(Path: String);
end;

uses mmsystem;

{ TSound }

constructor TSound.Create(Path: String);
begin
FPath:= Path;
FreeOnTerminate:= TRUE;
inherited Create(FALSE);
end;

procedure TSound.Execute;
begin
while not Terminated do
begin
if FPath <> '' then
PlaySound(PChar(FPath),0,SND_FILENAME or SND_SYNC)
else
// Pausa entre sonidos, usa la que prefieras
Sleep(10);
end;
end;


Y para usarlo:

with TSound.Create('C:\WINDOWS\Media\Chord.wav') do
begin
ShowMessage('Pulsa aceptar para terminar');
Terminate;
end;

jhonny
16-07-2007, 19:32:34
Y si creas tu propio MessageBox, desde un TForm que haga lo que quieres?

jhonny
16-07-2007, 19:37:03
Aquí es donde mejor retiro mis palabras y abro paso a un señor como seoane... La idea de usar un Hilo es definitivamente mucho mas practica :)

seoane
16-07-2007, 19:40:19
Aquí es donde mejor retiro mis palabras y abro paso a un señor como seoane... La idea de usar un Hilo es definitivamente mucho mas practica :)

Todo lo contrario, parece que volví a sacar el cañón para matar un par de moscas :o :D

Mucho mas sencillo así:

var
Sonido: String;
begin
Sonido:= 'C:\WINDOWS\Media\Error de Windows XP.wav';
PlaySound(PChar(Sonido),0,SND_FILENAME or SND_ASYNC or SND_LOOP);
ShowMessage('Pulsa aceptar para terminar');
PlaySound(nil,0,0);
end;


El código anterior estaba reciclado de este otro (http://www.clubdelphi.com/foros/showthread.php?t=37401), en donde si tenia sentido usar un thread.

jhonny
16-07-2007, 20:17:11
Todo lo contrario, parece que volví a sacar el cañón para matar un par de moscas :o :D

Mucho mas sencillo así:



var
Sonido: String;
begin
Sonido:= 'C:\WINDOWS\Media\Error de Windows XP.wav';
PlaySound(PChar(Sonido),0,SND_FILENAME or SND_ASYNC or SND_LOOP);
ShowMessage('Pulsa aceptar para terminar');
PlaySound(nil,0,0);
end;


Jo jo jo, tienes razón :D, pero en ese caso queda una duda dentro de mi,
¿Como carajos es que deje pasar la oportunidad de ganarle unita a seoane? :D :D :D

ixMike
25-07-2007, 19:12:07
Graicas, seoane, el código va de perlas.

;)