Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Scroll con rueda del ratón en DBCtrlGrid (https://www.clubdelphi.com/foros/showthread.php?t=43775)

Chandra 19-05-2007 22:36:21

Scroll con rueda del ratón en DBCtrlGrid
 
Estaba trabajando con un DBCtrlGrid y me he dado cuenta de que no tiene implementada la respuesta a la rueda del ratón (es decir, los eventos OnMouseWheel, OnMouseWheelDown y OnMouseWheelUp). Total, que he pensado que debía capturar esos eventos desde el form (que sí que los tiene), comprobar si el control DBCtrlGrid tiene el foco, y hacerle scroll "a mano". Lo que no termino de ver es cómo hacer yo ese scroll, porque la propiedad DBCtrlGrid.ScrollBy hace un scroll muy raro...

He estado mirando por Google y, efectivamente, hay muchos artículos en los que la gente se queja de que no viene implementado el evento MouseWheel en el componente DBCtrlGrid, pero la solución que dan es innecesariamente complicada, con punteros, etc... (creo que lo que yo propongo es más sencillo y limpio).

En fin, que si alguien es tan amable de decirme cómo conecto el evento OnMouseWheel del Form al scroll de mi DBCtrlGrid, se lo agradeceré ;)

Y a ver si estos de CodeGear terminan de una vez los componentes, que siempre les falta algo o tienen bugs sin solucionar desde la versión 2:p

Chandra 19-05-2007 23:41:40

Solucionado
 
Lo he solucionado haciendo Next o Prior en la tabla, en respuesta a los eventos OnMouseWheelDown y OnMouseWheelUp del Form, respectivamente. De esta manera se simula un scroll con la rueda del ratón :)

Ahora el único problemilla es que tengo que comprobar por cada evento
OnMouseWheelDown y OnMouseWheelUp del Form si el foco lo tiene el DBCtrlGrid o (y aquí viene lo pesado del tema) todos y cada uno de los componentes que contiene ese DBCtrlGrid (DBEdits, etc...).

cocute 04-08-2015 23:03:36

Aunque llegue con unos cuantos años de retraso pongo la solución por si le sirve a alguien que lo busque:

Pon un TApplicationEvents y en el OnMessage pon esto:
Código Delphi [-]
procedure TForm1.ApplicationEvents1Message
   (var Msg: TMsg; var Handled: Boolean) ;
var
   i: SmallInt;
begin
   if Msg.message = WM_MOUSEWHEEL then
   begin
     Msg.message := WM_KEYDOWN;
     Msg.lParam := 0;
     i := HiWord(Msg.wParam) ;
     if i > 0 then
       Msg.wParam := VK_UP
     else
       Msg.wParam := VK_DOWN;

     Handled := False;
   end;
end;


La franja horaria es GMT +2. Ahora son las 03:20:09.

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