2009-08-09 7 views
2

У меня проблема с вертикальной прокруткой DBGrid. Когда я прокручиваю его вертикально с помощью колесика мыши или вертикальной полосы прокрутки, он перемещает выбранную строку вверх и вниз. Я хочу, чтобы он прокручивал не выбранную строку, а всю сетку. Так же, как это работает в Microsoft Excel, например (просто чтобы вы знали, что я имею в виду). Какие-либо предложения?Страница прокрутки DBGrid вместо строки

+0

Я использую Delphi 6 – Vlad

ответ

0

Well , почти то, что я хотел бы видеть. Найден пост hanuleye на swissdelhicenter.ch. Этот код позволит вам свободно прокручивать DBGrid с помощью колеса мыши.

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

Этот код фактически прокручивает выбранную строку, но она не остановится в нижней части страницы, позволяя вам прокрутите до самого нижней части сетки. – Vlad

0

Я не думаю, что это возможно, так как мне кажется, что прокрутка на DBGrids больше похожа на индикатор прогресса, а не на свиток. Он ведет себя иначе, чем свитки в ListViews, где вы просматриваете «страницы», в элементах управления db, даже если вы перемещаетесь вверх или вниз по одной строке, полоса прокрутки изменяется, чтобы отражать фракцию «текущая строка»/«всего строк» ​​