Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   WheelScrollLines (https://www.clubdelphi.com/foros/showthread.php?t=73233)

FENIXadr 09-04-2011 21:26:20

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...

ecfisa 10-04-2011 00:02:10

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.

FENIXadr 10-04-2011 16:40:50

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..


La franja horaria es GMT +2. Ahora son las 00:49:50.

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