2009-08-09 9 views
2

Eh bien, j'ai un problème avec le défilement vertical DBGrid. Quand je le fais défiler verticalement avec la roulette de la souris ou la barre de défilement verticale, il déplace la rangée sélectionnée vers le haut et vers le bas. Je veux faire défiler la ligne non sélectionnée mais la grille entière. Tout comme cela fonctionne dans Microsoft Excel par exemple (juste pour vous faire savoir ce que je veux dire). Aucune suggestion?DBGrid page de défilement au lieu de ligne

+0

J'utilise Delphi 6 – Vlad

Répondre

0

Bien , presque ce que j'aimerais voir. Trouvé le poste de hanuleye sur swissdelhicenter.ch. Ce code vous permet de faire défiler librement DBGrid avec la molette de la souris.

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. 
+0

Ce code défile en fait la ligne sélectionnée, mais il ne cesserai pas au bas de la page, qui vous permet de faire défiler jusqu'à ce que le fond de la grille. – Vlad

0

Je ne pense pas que ce soit possible, car il me semble que la barre de défilement sur DBGrids ressemble plus à un indicateur de progression qu'à un parchemin. Il se comporte différemment des parchemins dans ListViews où vous faites défiler les pages, dans les contrôles db même si vous montez ou descendez une seule ligne la barre de défilement change pour refléter la fraction "ligne courante"/"lignes totales"

Questions connexes