Ver Mensaje Individual
  #15  
Antiguo 21-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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.

A, pero eso es distinto a lo que había entendido que solicitabas en el título del mensaje (#4) "sobre el scroll con la rueda del raton"... De ese modo no funciona sobre el scrollbar.

De todos modos la modificación que hiciste se puede optimizar bastante:
Código Delphi [-]
procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  FControl: TWinControl;
  i       : SmallInt;
begin
  FControl := FindVCLWindow(Mouse.CursorPos);
  i := HiWord(Msg.wParam);
  if Assigned(FControl) and (Msg.message = WM_MOUSEWHEEL) then
  begin
    if (FControl.Parent is TScrollBox) then
    begin
      with TScrollingWinControl(ScrollBox1).VertScrollBar do
      begin
        if i > 0 then
          Position:= Position - Increment
        else
          Position:= Position + Increment;
      end;
    end;
    Next;
  end;
end;

Pero es bueno aclarar que tanto el código del mensaje (#14) como este, debido al uso del procedimiento Next pueden presentar un comportamiento poco deseable.

Por ejemplo, si en un mismo form conviven un TListBox y el TScrollBox del que hemos venido hablando pude apreciar dos de ellos:
  1. Si y se focaliza el ListBox y luego se realiza MouseWheel, la acción desencadena el scroll en ambos controles.
  2. Si el ScrollBox no tiene paneles, el scroll se realizará sobre el ListBox, aún estando situados sobre el ScrollBox.

Saludos.
__________________
Daniel Didriksen

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