Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Presentar Multiples videos consecutivos (https://www.clubdelphi.com/foros/showthread.php?t=84138)

steelha 13-09-2013 17:42:59

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

ecfisa 13-09-2013 19:20:49

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 :)

steelha 17-09-2013 17:36:32

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.

steelha 17-09-2013 18:05:46

He probado el codigo, no me da ningun tipo de error pero tampoco escucho nada, es decir; no se escucha la reproducion del sonido.

ecfisa 17-09-2013 18:27:01

1 Archivos Adjunto(s)
Cita:

Empezado por steelha (Mensaje 467038)
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 :)

steelha 19-09-2013 16:26:30

Gracias ecfisa he probado el ejemplo y si funciona, voy a dar un vistaso a mi codigo a ver donde esta el problema

steelha 10-09-2014 17:12:06

2 Archivos Adjunto(s)
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


La franja horaria es GMT +2. Ahora son las 05:16:08.

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