Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   MessageBox y PlaySnd simultáneos (https://www.clubdelphi.com/foros/showthread.php?t=45857)

ixMike 16-07-2007 19:21:33

MessageBox y PlaySnd simultáneos
 
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í:
Código Delphi [-]
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:
Código Delphi [-]
  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

Cita:

Empezado por jhonny
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í:
Código Delphi [-]
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, en donde si tenia sentido usar un thread.

jhonny 16-07-2007 20:17:11

Cita:

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

Mucho mas sencillo así:


Código Delphi [-]
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.

;)


La franja horaria es GMT +2. Ahora son las 18:57:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi