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:
- Si y se focaliza el ListBox y luego se realiza MouseWheel, la acción desencadena el scroll en ambos controles.
- Si el ScrollBox no tiene paneles, el scroll se realizará sobre el ListBox, aún estando situados sobre el ScrollBox.
Saludos.
