У меня проблема с вертикальной прокруткой DBGrid. Когда я прокручиваю его вертикально с помощью колесика мыши или вертикальной полосы прокрутки, он перемещает выбранную строку вверх и вниз. Я хочу, чтобы он прокручивал не выбранную строку, а всю сетку. Так же, как это работает в Microsoft Excel, например (просто чтобы вы знали, что я имею в виду). Какие-либо предложения?Страница прокрутки DBGrid вместо строки
ответ
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.
Этот код фактически прокручивает выбранную строку, но она не остановится в нижней части страницы, позволяя вам прокрутите до самого нижней части сетки. – Vlad
Я не думаю, что это возможно, так как мне кажется, что прокрутка на DBGrids больше похожа на индикатор прогресса, а не на свиток. Он ведет себя иначе, чем свитки в ListViews, где вы просматриваете «страницы», в элементах управления db, даже если вы перемещаетесь вверх или вниз по одной строке, полоса прокрутки изменяется, чтобы отражать фракцию «текущая строка»/«всего строк»
Я использую Delphi 6 – Vlad