Pregunta

Bueno, tengo un problema con DBGrid de desplazamiento vertical. Cuando me desplazo en posición vertical con la rueda del ratón o la barra de desplazamiento vertical que se mueve fila seleccionada hacia arriba y abajo. Quiero hacer que desplazarse fila no seleccionado, pero toda la rejilla. Al igual que funciona en Microsoft Excel por ejemplo (sólo para hacerle saber lo que me refiero). ¿Alguna sugerencia?

¿Fue útil?

Solución 2

Bueno, casi lo que me gustaría ver. Encontrado el puesto de hanuleye en swissdelhicenter.ch. Este código de le permiten desplazarse libremente DBGrid con la rueda del ratón.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TWheelDBGrid = class(TDBGrid)
  public
    property OnMouseWheel;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TWheelDBGrid(DBGrid1).OnMouseWheel := DBGridMouseWheel;
end;

function GetNumScrollLines: Integer;
begin
  SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @Result, 0);
end;

procedure TForm1.DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  Direction: Shortint;
begin
  Direction := 1;
  if WheelDelta = 0 then
    Exit
  else if WheelDelta > 0 then
    Direction := -1;

  with TDBGrid(Sender) do
  begin
    if Assigned(DataSource) and Assigned(DataSource.DataSet) then
      DataSource.DataSet.MoveBy(Direction * GetNumScrollLines);
    Invalidate;
  end;
end;

end.

Otros consejos

No creo que eso sea posible, ya que me parece que la barra de desplazamiento en DBGrids son más como un indicador de progreso en lugar de un pergamino. Se comporta de manera diferente de los rollos en listviews donde se desplaza "páginas", en el PP controla incluso si se mueve hacia arriba o hacia abajo una sola fila los cambios de barra de desplazamiento para reflejar la "fila actual" / "el total de filas" fracción

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top