Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-02-2013
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
error en ejecuciones constante en aplicacion...

Hola chicos como estan?

Quiero hacer una consulta tengo un pequeño problema ya que stoy realizando una aplicacion el cual necesito que me mande tres sonidos diferente a la hora de confirmar por ejemplo una marcación.


Ya logre eso sin embargo haciendo prueba note que al ser la segunda o tercera marcación seguida me cierra el programa mandandome el tipico error de windows "aplicacion.exe ah detectado un problema y debe cerrarse" cuando un programa es interrumpido.

pueda ser liberacion de memoria inadecuadamente bueno la verdad no se pero me gustaria que me pudieran ayudar...

envio este codigo para que vean que hago...

Código Delphi [-]
function cargarFicheroMemoria (const fichero : TFileName): string;
begin
  with TFileStream.Create(fichero,
      fmOpenRead or fmShareDenyWrite) do
  begin
    try
      SetLength(Result, Size);
      Read(Pointer(Result)^, Size);
    except
      Result := '';
    Free;
      raise;
    end;
    Free;
  end;
end;

procedure sonidoconfirma;
var
  ficheroSonido : string;

begin
  //cargar fichero en memoria
  case Sonido of

  1: ficheroSonido := cargarFicheroMemoria ('C:\EDD TXT TECNOLOGIA MARCACION\voces\confirmacion.wav');
  2: ficheroSonido := cargarFicheroMemoria ('C:\EDD TXT TECNOLOGIA MARCACION\voces\confirmacionHombre.wav');
  3: ficheroSonido := cargarFicheroMemoria ('C:\EDD TXT TECNOLOGIA MARCACION\voces\noencontrado.wav');
  //reproducir fichero
   end;

  sndPlaySound(Pointer(ficheroSonido), SND_MEMORY
      Or SND_NODEFAULT Or SND_ASYNC);
 ficheroSonido := '';
  sonido:= 0;
  end;

procedure TfrmAsistencia.AgregaAsistencia; 
begin
  dmStoreProcedure.spConsultaCedula.Params.ParamByName('CEDULA').AsString :=
    edtCedula.Text;
  dmStoreProcedure.spConsultaCedula.ExecProc;
  Id_emplAsis := dmStoreProcedure.spConsultaCedula.Params.ParamByName('ID')
    .AsInteger;
  if Id_emplAsis >= 1 then
        begin
            with dmConectar.qMarcaciones do
              begin
                ParamByName('pID_EMPLEADOS').AsInteger := Id_emplAsis;
                execsql;
                    with dmConectar.qConsultaEmpl do
                      begin
                      close;
                        ParamByName('pIDEMPL').AsInteger := Id_emplAsis;
                        execsql;
                      end;
                        dmConectar.qConsultaEmpl.Open;
                        lblCedula.Caption := dmConectar.qConsultaEmplCEDULA_EMPL.AsString;
                        lblNombre.Caption := dmConectar.qConsultaEmplNOMBRE_EMPL.AsString;
                        IFoto.Picture.LoadFromFile(dmConectar.qConsultaEmplIMAGEN_EMPL.AsString);
                          begin
                            if dmconectar.qConsultaEmplID_GENERO.asinteger = 2 then
                            begin
                            sonido:= 2;
                            sonidoconfirma;
                            end
                              else
                              begin
                               sonido:=1;
                             sonidoconfirma;
                              end;
                          end;
             end;
        end
            else
              begin
              sonido:= 3;
              sonidoconfirma;
  end;
end


//Procedimiento que utilizo con timer para que me cambie la foto despues de haber mostrado la imagen del colaborador encontrado
procedure TfrmAsistencia.tcorrectoTimer(Sender: TObject);
begin
  lblCedula.Visible := false;
      begin
       IFoto.Picture.LoadFromFile('c:\EDD TXT TECNOLOGIA MARCACION\fotos\picture03.png');
      end;
      lblNombre.Visible := false;
      edtCedula.Text := '';
      edtCedula.setFocus;
      tcorrecto.Enabled:= false;

end;
//Muestra hola al usuario
procedure TfrmAsistencia.Timer1Timer(Sender: TObject);
begin
LblHora.Caption := FormatDateTime('hh:mm:ss ampm',Now);
end;

saludos

novato_erick
Responder Con Cita
  #2  
Antiguo 07-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola novato_erick.

Según entiendo deseas almacenar el contenido de un archivo .wav en un string y luego reproducirlo desde allí con la función sndPlaySound. Desconozco si hay manera de hacerlo funcionar de ese modo, pero lo dudo.

De este modo no te ofrecerá ningún problema:
Código Delphi [-]
procedure sonidoconfirma(Sonido: Integer);
var
  fichero: string;
begin
  case Sonido of
    1: fichero:= 'C:\Windows\Media\chimes.wav';
    2: fichero:= 'C:\Windows\Media\chord.wav';
    3: fichero:= 'C:\Windows\Media\ding.wav';
    //...
    else
      raise Exception.Create('Elección fuera de rango');
  end;
  with TMemoryStream.Create do
  try
    LoadFromFile(fichero);
    sndPlaySound(Memory, SND_MEMORY + SND_SYNC)
  finally
    Free
  end
end;

Aunque no veo la nececidad de hacerlo de ese modo, sería mucho más simple:
Código Delphi [-]
procedure sonidoconfirma(Sonido: Integer);
var
  fichero: string;
begin
  case Sonido of
    1: fichero:= 'C:\Windows\Media\chimes.wav';
    2: fichero:= 'C:\Windows\Media\chord.wav';
    3: fichero:= 'C:\Windows\Media\ding.wav';
    //...
    else
      raise Exception.Create('Elección fuera de rango');
  end;
  sndPlaySound(PChar(fichero), SND_NODEFAULT + SND_SYNC);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error con la constante 18446744073709551615 en delphi7 erickperez6 Varios 5 14-06-2011 14:35:02
Evitar 2 ejecuciones de mi aplicación. Unidad UIApp rafita Varios 8 16-01-2008 19:42:37
Comparar String con Constante brandolin Varios 1 08-06-2007 05:46:05
ShowHint Constante .. se puede? ingel Varios 5 14-11-2005 15:36:49
Cambiar una constante D@byt Varios 3 24-05-2005 16:03:11


La franja horaria es GMT +2. Ahora son las 00:16:30.


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
Copyright 1996-2007 Club Delphi