Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Sigo con problemas de dbgrid... (https://www.clubdelphi.com/foros/showthread.php?t=69116)

valeria 27-07-2010 18:03:35

Sigo con problemas de dbgrid...
 
Chicos disculpen que los siga molestando y muchas gracias por contestarme siempre....bien sigo con el problema de scroll del mousse,y seleccion en un dbgrid,bien esta casi solucionado,logro llevar el movimiento del scroll del mousse y que puedan seleccionar la fila que se quiere atraves de el siguiente codigo (que de paso si a alguien le sirve lo posteo),bien el unico problema que existe es que el foco queda en la primer fila...y si un usuario quiere usar de entrada el scroll del mousse este queda congelado...no funciona en la primer fila del dbgrid....hasta que el usuario no seleccione alguna fila...y ahy si recien se activa la rueda del scroll..bueno desde ya muchisimas gracias!!


Código Delphi [-]
 
procedure TFrm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if gdSelected in State then
    DbGrid1.Canvas.Brush.Color := clSilver;
    self.DBGrid1.Canvas.Font.Color:= clNavy;
  if gdFocused in State then
    DbGrid1.Canvas.Font.Color := clBlue;
    DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 end;
 
procedure TFrm.DBGrid1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
   gc: TGridCoord;
 begin
   gc := DBGrid1.MouseCoord(x, y) ;
   MouseOverRow := gc.Y;
 end;

procedure TFrm.DBGrid1PillaLaRueda(var Message: TMessage);
 var
   Cuanto : short;
 begin
   if (Message.Msg = WM_MOUSEWHEEL) then begin
     Cuanto:=HIWORD(Message.WParam);
     Cuanto:=Cuanto div 120;
     DbGrid1.DataSource.DataSet.MoveBy(-Cuanto);
   end
   else TomaInvento(DBGrid1).WndProc(Message);
 end;
 
procedure TTareasPendientesFrm.FormCreate(Sender: TObject);
begin
  DBGrid1.WindowProc := DBGrid1PillaLaRueda;
end;

ecfisa 28-07-2010 00:09:42

Hola Valeria.

Eliminá o desactivá la línea :
Código:

{ DBGrid1.WindowProc := DBGrid1PillaLaRueda; }
y reemplazala en el form principal por:
Código:

  Application.OnMessage := MouseWheel;
El procedimiento MouseWheel es:
Código:

procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  x: SmallInt;
begin
  if Msg.Message = WM_MOUSEWHEEL then
  begin
    Msg.Message := WM_KEYDOWN;
    Msg.lParam := 0;
    x := HiWord(Msg.wParam);
    if x > 0 then
      Msg.wParam := VK_UP
    else
      Msg.wParam := VK_DOWN;
    Handled:= false;
  end;
end;


Saludos.


La franja horaria es GMT +2. Ahora son las 21:51:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi