Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2005
Jan_polero Jan_polero is offline
Miembro
 
Registrado: may 2004
Posts: 62
Poder: 21
Jan_polero Va por buen camino
Ayuda acerca de WM_MOUSEFIRST/WM_MOUSELAST

Hola a todos. Estoy realizando una aplicación que muestra cuestionarios en un terminal con pantalla táctil. Utilizo unos Timers para mostrar avisos cada cierto tiempo si no se pulsa nada( no hay teclado en el terminal, por lo que sólo se debería tener en cuenta las pulsaciones del ratón). En este foro me dieron una solución. En principio funciona bien pero hay ocasiones en que falla y no se muestran los avisos.Pienso que tal vez sea pq los valores que hay entre WM_MOUSEFIRST y WM_MOUSELAST incluyan el movimiento del ratón o algún otro evento que se produzca en mi máquina aquí en la oficina.Tampoco sé si una pantalla táctil detecta el movimiento del ratón. Aquí pongo el código:

Código Delphi [-]
{aclaraciones}
// Tfbaseven es un frame con una pregunta del cuestionario
// TFMaencven es el formulario que alberga todas las preguntas(TFbaseven)
 
procedure Tfbaseven.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
// puse esta condición para reiniciar los timers sólo al detectar clicks del ratón
if (Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST) then
  begin
  {Reseteamos el timer de la pregunta}
  //Deshabilitamos el timer 
  TimerOut.Enabled := False;
  //volvemos a asignar el timeout 
  TimerOut.Interval := Pregunta.TimeOut * 1000;
 //Activamos el timer de nuevo
  TimerOut.Enabled := True;
 {lo mismo pero con el timer del cuestionario}
  //Reiniciamos el tiempo de espera del cuestionario
  TFMaencven(Owner).TimerCuest.Enabled := False;
  TFMaencven(Owner).TimerCuest.Interval :=  FCuestionario.TiempoMaxExpera  * 1000;
  TFMaencven(Owner).TimerCuest.Enabled := True;
  end;
end;
 
/////////EVENTO DEL TIMER DE LA PREGUNTA ////////////
procedure Tfbaseven.TimerOutTimer(Sender: TObject);
var
  Estado: TEstado;
begin
  //deshabilito el timer
  TimerOut.Enabled := False;
  TimerOut.Interval := Pregunta.TimeOut * 1000;
  try
  ...

  Estado := TEstado(FCuestionario.GrafoNavegacion.EstadoActual);
    //realizo comprobaciones previas
    if TFBaseven(Estado.Frame).Pregunta.ID =  Estado.id then
      if TFBaseven(Estado.Frame).Pregunta.Aviso <> nil then
        if not Assigned(FAviso) then
          try
            //creao el aviso y lo muestro            
            FAviso := TFAviso.Create(Self,Pregunta.Aviso);
            FAviso.ShowModal;
          Finally
            FreeAndNil(FAviso);
          end;
  finally
    //vuelvo a habilitar el timer
    TimerOut.Enabled := True;
  end;
end;
Esto me produce que en ocasiones no se muestren los avisos.Si alguien me puede dar información de hacerlo de una manera mejor o de explicarme por qué puede fallar estaría muy agradecido. Un saludo y gracias por adelantado.

Última edición por Jan_polero fecha: 09-02-2005 a las 12:22:46.
Responder Con Cita
  #2  
Antiguo 09-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Jan_polero
Pienso que tal vez sea pq los valores que hay entre WM_MOUSEFIRST y WM_MOUSELAST incluyan el movimiento del ratón
Así es. Podrías incluir en elcondicional la condición Msg.message <> WM_MOUSEMOVE. De cualquier forma lo mejor es que consultes la ayuda del SDK de Windows (incluida con Delphi) para ver exactamente cuáles son los mensajes que quieres incluir.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-02-2005
Jan_polero Jan_polero is offline
Miembro
 
Registrado: may 2004
Posts: 62
Poder: 21
Jan_polero Va por buen camino
Gracias,Román.Era justamente eso, que en mi máquina no funcionaba correctamente porque tb detectaba el movimiento del ratón. Un saludo.
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


La franja horaria es GMT +2. Ahora son las 02:04:15.


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