Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Presentar Multiples videos consecutivos

Buenas, hoy vengo con un pequeño problema el cual no encuentro como solucionar. Estoy desarrollando un sistema de turnos (Cola de llamada). Les explico brevemente para que sepan y puedan ayudarme.

Este consta de 3 partes:
Primero : Una pantalla la cual genera un numero (Aleatorio o Estación dependerá cual sea la opción). Luego este numero va a una base de datos con la opción Estado Igual N (No atendido), para que los o el representante pueda ver quien esta en cola.

Segundo : La pantalla del representante consta de un logueo de usuario a una estación la cual es fija por equipo no por usuario. Luego de logueado solo le mostrara los números asignado a esa estación. Con un botón el representante llamara el primer numero en su cola (Esto modifica el campo Estado a L (llamar). Si un numero es llamado mas de x veces el representante tiene la opción de cambiar su Estado a C (Cancelado por usuario)

Nota punto 2 : Me gustaría poder hacerlo automáticamente a x veces según configuración guardada en un .ini

Tercero : La pantalla de presentación/Llamada esta solo posee 2 paneles ocultos, uno que presenta una serie de vídeo configurados en una base de datos y el otro el de presentar el numero que se esta llamando. Esto paneles no están visibles al mismo tiempo, es decir cuando se va a llamar un numero se desactiva(Pausa) el vídeo y se hace el llamado de la lista de números disponibles contenidos en un list el cual se carga cada 15 seg.

Cuando termina de llamar la lista de números desde el primero hasta el ultimo que este, se oculta y se continua con el video. Esta es su función.

Nota punto 3: Me gustaría que se llame el numero inmediatamente este modifique su estatus a L, en ves de esperar los 15 seg. del timer para cargar la lista de números.


Problema no puedo hacer que me continué la lista de vídeos guardadas en un list, no se como hacerlo, es decir como saber cuando termine para incrementar una variable indice o si es la continuación del mismo vídeo antes de ser pausado por la llamada.

Acá les paso códigos para que analicen y me den sus posibles soluciones/ayuda

Código Delphi [-]
procedure TfrmVisualizador.Llamar_ticket(marcador: Integer);
var
  llamar : string;
  dirvoz : string;
  espera : Integer;
begin
   dirvoz := ExtractFilePath(Application.ExeName)+'Sonido\';

      numero        := Trim(lstNumero.Items[marcador]);
      representante := StrToInt(Trim(lstrepresentante.Items[marcador]));

      //Primer llamado
      llamar := dirvoz + 'T'+ Trim(numero) + '.wav';
      sndPlaySound(PChar(llamar),SND_NODEFAULT or SND_SYNC);

      Application.ProcessMessages;

      llamar := dirvoz + 'E'+ IntToStr(representante) + '.wav';
      sndPlaySound(PChar(llamar),SND_NODEFAULT or SND_SYNC);
      Application.ProcessMessages;

      espera := 1;
      for espera := 1 to 40000 do //esto debería ser una pausa, pero aun asi lo llama inmediatamente no espera 
      begin
          Application.ProcessMessages;
          sndPlaySound(nil, 0);
      end;

      //Segundo llamado
      llamar := dirvoz + 'T'+ Trim(numero) + '.wav';
      sndPlaySound(PChar(llamar),SND_NODEFAULT or SND_SYNC);

      Application.ProcessMessages;

      llamar := dirvoz + 'E'+ IntToStr(representante) + '.wav';
      sndPlaySound(PChar(llamar),SND_NODEFAULT or SND_SYNC);
      Application.ProcessMessages;
      sndPlaySound(nil, 0);
end;

procedure TfrmVisualizador.tmrVerificarTickeTimer(Sender: TObject);
var
  i,espera : Integer;
begin
  //Limpiar lista de numeros vieja
  lstNumero.Clear;
  lstrepresentante.Clear;

  //Cargando Numeros
  DM.qryTurnos.Close;
  DM.qryTurnos.SQL.Text := 'SELECT * FROM tblTurnos Where Estatus = ''L'' ';
  DM.qryTurnos.Open;
  DM.qryTurnos.First;
    while not(DM.qryTurnos.Eof) do
    begin
      lstNumero.Items.Add(Trim(dm.qryTurnosletra.AsString)+Trim(dm.qryTurnosturno.AsString));
      lstrepresentante.Items.Add(dm.qryTurnosrepresentante.AsString);
      dm.qryTurnos.Next;
      Application.ProcessMessages;
    end;
  DM.qryTurnos.Close;

  If lstNumero.Items.Count < 1 then
  begin
    PresentarVideos(indice);
    Exit;
  end;

  If (lstNumero.Items.Count > 0) and (lstNumero.Items.Count > 0) then
  begin
    tmrVerificarTicke.Enabled := False;
    mpvideos.Pause;

    pnlVideos.Visible := False;
    grpticket.Visible := True;

    for i := 0 to (lstNumero.Count-1) do
    begin
      lblticketnumero.Caption := Trim(lstNumero.Items[i]);
      lblticketrepresentante.Caption := Trim(lstrepresentante.Items[i]);
      Application.ProcessMessages;
      Llamar_ticket(i);

      espera := 1;
      for espera := 1 to 100000 do
      begin
          Application.ProcessMessages;
          sndPlaySound(nil, 0)
      end;
    end;
    tmrVerificarTicke.Enabled := True;
    grpticket.Visible := False;

    pnlVideos.Visible := True;
    mpvideos.Resume;
    presentarvideos(indice);
  end;
end;


procedure TfrmVisualizador.presentarvideos(Indice : Integer);
begin
    //Preparar el rectangulo de visualizacion de video
    mpvideos.filename :=  Trim(lstActividad.Items[indice]); //video a presentar
    mpvideos.Display  := pnlVideos;
    mpvideos.Open;
    mpvideos.DisplayRect := pnlVideos.ClientRect; //rec es el rectangulo. Quiere decir que el rectangulo del display y el del panel 1 han de ser iguales.

    try
      mpvideos.Play;
    except
      indice := indice + 1;
      presentarvideos(indice);
    end;
end;

Utilizo Delphi 7, MySql

Gracias de ante manos por cualquier sugerencia o ayuda prestada
Gracias tambien por toda la ayuda prestada cada ves que presento un problema en este foro
Responder Con Cita
  #2  
Antiguo 13-09-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 steelha.

Lamentablemente no vas a lograr la pausa que deseas con la función sndPlaySound ya que no posee esa funcionalidad.

Sin embargo podes hacerlo sin problemas con la función mciSendString, un ejemplo:
Código Delphi [-]
...
uses MMSystem;

procedure PlayAudioWithPause(aFileName: TFileName; Pause: Integer);
begin
  mciSendString(PChar('open ' + aFileName + ' alias MY_SOUND'),nil,0,0);
  mciSendString(PChar('play MY_SOUND'),nil,0,0); // reproducir
  Application.ProcessMessages;
  Sleep(Pause);
  mciSendString(PChar('pause MY_SOUND'),nil,0,0); // pausa
  Sleep(Pause);
  mciSendString(PChar('resume MY_SOUND'),nil,0,0); // continuar
  { mciSendString(PChar('stop MY_SOUND'),nil,0,0); // (detiene la reproduccion) }
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PlayAudioWithPause('C:\Users\Un_usuario\Music\Musica.wav', 5000); // 5000 = 5 segs.
end;

Pero me confunde el título con el comentario del código, ¿ El problema era con el audio no ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 17-09-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Pido disculpas por no leer inmediatamente, ando un poco complicado en estos dias.
Gracias ecfisa por siempre estar ahi y dar una mano, el titulo esta bien no mi caso es referente al presentar los videos PUNTO 3; pero como digo por ahi me gustaría no que es necesario. . por que lo he intentado y nada. Pero ahora revisare con el codigo que me diste a ver como anda.

Gracias muchas gracias por la ayuda.
Responder Con Cita
  #4  
Antiguo 17-09-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
He probado el codigo, no me da ningun tipo de error pero tampoco escucho nada, es decir; no se escucha la reproducion del sonido.
Responder Con Cita
  #5  
Antiguo 17-09-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
Cita:
Empezado por steelha Ver Mensaje
He probado el codigo, no me da ningun tipo de error pero tampoco escucho nada, es decir; no se escucha la reproducion del sonido.
Hola steelha.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip PlayWithPause.zip (290,2 KB, 4 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 19-09-2013
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Gracias ecfisa he probado el ejemplo y si funciona, voy a dar un vistaso a mi codigo a ver donde esta el problema
Responder Con Cita
  #7  
Antiguo 10-09-2014
steelha steelha is offline
Miembro
 
Registrado: mar 2012
Posts: 158
Poder: 13
steelha Va por buen camino
Buenas, retomo este hilo olvidado por mi ya que me dedique a otros proyectos

Poseo 3 pantallas
1 - Generador de Ticket : Este genera un numero para un determinado representante
2 - Llamar Ticket : Esta es utilizada por los representantes para llamar un numero de la cola el cual este asignado a el.
3 - Visualizador : Este presenta por pantalla/plasma el numero que se esta llamando en el momento y donde debe dirigirse. (Acá es donde esto estancado).

Como pueden ver en la imagen, poseo 3 listas la primera contiene una serie de vídeo y/o imágenes a ser presentadas en panel a fullscreen, la segunda los números que han sido llamados y aun no se atienden y el tercero a que representante deben ir.

El programa debería verificar si no hay numero para ser llamado y empezar la presentación de un vídeo o imagen según su orden en la lista, pero en el momento que sea llamado un numero debe hacer una pausa llamar el numero y luego continuar con su presentaciones. si hay mas de un numero los debe llamar a todos antes de continuar. los vídeo/imágenes son cargados en la lista dependiendo la fecha que tenga asignada, al menos que la casilla recurrente este marcada.

Si pueden ayudar o aportar algo con gusto acepto criticas, piropos, etc, etc, etc. cualquier cosa menos golpe.

dejo archivo adjunto para que vean codigo
Imágenes Adjuntas
Tipo de Archivo: jpg pantallavisualizador.JPG (37,5 KB, 6 visitas)
Archivos Adjuntos
Tipo de Archivo: rar Audio.rar (224,2 KB, 2 visitas)

Última edición por steelha fecha: 10-09-2014 a las 17:16:26.
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
Agregar múltiples Campo de una tabla a múltiples TEdit y TdbEdit novato_erick Varios 21 21-08-2011 01:18:58
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 02:52:21
Problemas con presentar imagen Yoana Varios 1 01-12-2010 20:47:44
Problemas con Consecutivos Yoana Varios 9 18-09-2010 01:17:17
Consulta de valores consecutivos Guillermosalva SQL 5 27-07-2007 08:49:15


La franja horaria es GMT +2. Ahora son las 09:16:32.


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