Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2011
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 104
Poder: 17
FENIXadr Va por buen camino
WheelScrollLines

Hola genete.. aqui estoy haciendo otra preguntita....
Estoy realizando una aplicación que, entre otras cosas, muestra una serie de imágenes JPG, la cosa es que el usuario puede avanzar y retroceder en la secuencia de imágenes con las téclas del cursor, le agregue el Whell del mouse y allí comenzaron mis problemas... o sea, en el evento FormMouseWheel del Form1 puedo incrementar o decrementar mi contador gracias a WheelDelta, hasta alli todo bien, la cosa es que entra al evento tantas veces com le indica WheelScrollLines, que es una propiedad de solo lectura o sea que apenas la rueda del mouse se mueve, pasa 3 imagenes o lo que diga WheelScrollLines...
Como hago para que solo entre al evento una sola vez??..

Desde ya muchas gracias...
Responder Con Cita
  #2  
Antiguo 10-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 FENIXadr.

Una posible solución es usar los eventos OnWheelDown y OnWheelUp.

Ejemplo:
Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
    procedure FormShow(Sender: TObject);
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
  private
    FWheelDeltaX: Integer;
    FWheelDeltaY: Integer;
  public
  end;
...
implementation 

procedure TForm1.FormShow(Sender: TObject);
begin
  (* Aca asignas los valores de desplazamiento horizontal o
     vertical por giro de rueda que gustes *)
  FWheeldeltaX:= 0;  // horiz.
  FWheelDeltaY:= 8; // vert.
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBy(-FWheelDeltaX, -FWheelDeltaY);
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBy(FWheelDeltaX, FWheelDeltaY);
end;
...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-04-2011 a las 00:36:01.
Responder Con Cita
  #3  
Antiguo 10-04-2011
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 104
Poder: 17
FENIXadr Va por buen camino
Muchas gracias por tu respuesta ecfisa.. lo que sucede es que de esta maner entra lo mismo 3 veces o lo que le diga WheelScrollLines, con lo cual sigue sumando el contador de las imagenes a mostrar...
No hago scroll, por lo tanto Scrollby no es usado.... pero he encontrado una manera (con la variable Handled) y la pongo aqui para que otra persona con el mismo problema la use :

Código Delphi [-]
........ 
......   
var       
  Movimiento, Posicion, PosMaxima : Integer; 
..... 
..... 
....  

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;   MousePos: TPoint; var Handled: Boolean); 
begin   
  Posicion := Posicion + Movimiento;   
  if Posicion < 0 then     
    Posicion := 0;   
  MostrarImagen (Posicion);   
  Handled := True;     // Asignando True a Handled no vuelve a entrar. 
end;  


procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;   MousePos: TPoint; var Handled: Boolean);  
begin   
  Posicion := Posicion + Movimiento;   
  if Posicion >= PosMaxima then     
    Posicion := PosMaxima-1;   
  MostrarImagen (Posicion);   
  Handled := True; 
end;  


procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);  
begin    
  Movimiento := WheelDelta div 120; 
end;

WheelDelta tiene un valor de 120 o -120 cuando se mueve apenas la ruedita hacia arriba o hacia abajo respectivamente por eso la variable Movimiento siempre se suma porque su signo cambia automáticamente, yo uso esta forma porque si se mueve la rueda despacio, Movimiento es 1 o -1 pero si movemos la rueda mas fuerte Movimiento puede ser mayor con lo cual incremenatmos o decrementamos de a más de uno, que es lo que el usuario supuestamente quiere, por mover la ruedita mas rápido...

Bueno espero que esto le sirva a alguien más.... saludos..

Última edición por FENIXadr fecha: 10-04-2011 a las 16:44:30. Razón: no se que pasó que me junto todo el codigo.. grrrrr
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 21:02:11.


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