如何在Delphi中捕获DBGrid中的滚动事件

时间:2009-11-12 16:40:50

标签: delphi events scrollbar dbgrid

我有一个DBGrid,每次使用水平滚动条时我都需要运行一些代码。我在DBGrid中找不到这样的事件。你能告诉一下吗?

4 个答案:

答案 0 :(得分:4)

也许这会有所帮助。它显示了捕获常规TStringGrid的滚动事件的示例。 Synchronize the Scrolling of two TStringgrids?

答案 1 :(得分:4)

TCustomGrid中有一个WMHScroll过程,但它是私有的。你不能在DBGrid中使用它 你必须创建自己的TDBGrid后代并自己做

procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;

或做一些严重的黑客攻击...

更新:技巧/黑客将您的代码隐藏在......

[...]
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, Grids, DBGrids;

    type
      // Hack to redeclare your TDBGrid here whitout the the form designer going mad
      TDBGrid = class(DBGrids.TDBGrid)
        procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
      end;

      TForm8 = class(TForm)
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        ADODataSet1: TADODataSet;
        ADOConnection1: TADOConnection;
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form8: TForm8;

    implementation

    {$R *.dfm}

    { TDBGrid }

    procedure TDBGrid.WMHScroll(var Msg: TWMHScroll);
    begin
      case Msg.ScrollCode of
        SB_ENDSCROLL: OutputDebugString('SB_ENDSCROLL') ;
        SB_LEFT:OutputDebugString('SB_LEFT');
        SB_RIGHT:OutputDebugString('SB_RIGHT');
        SB_LINELEFT:OutputDebugString('SB_LINELEFT');
        SB_LINERIGHT:OutputDebugString('SB_LINERIGHT');
        SB_PAGELEFT:OutputDebugString('SB_PAGELEFT');
        SB_PAGERIGHT:OutputDebugString('SB_PAGERIGHT');
        SB_THUMBPOSITION:OutputDebugString('SB_THUMBPOSITION');
      end;
      inherited; // to keep the expected behavior
    end;
[...]

Update2 :请注意,您可以将特殊的TDBGrid代码移动到一个单独的单元(推荐),只需确保将此单元名称后面的DBGrids放在Form的使用条款中

答案 2 :(得分:0)

我目前无法检查这一点,但如果我没记错那次事件就在那里,但没有公布。尝试创建一个从TDBGrid下降的控件并发布滚动条事件。

答案 3 :(得分:0)

编辑:错误答案,显然。它捕获垂直滚动条,但不捕获水平滚动条。

你没有在DBGrid级别捕获它。您可以在附加的TDataSet的BeforeScroll或AfterScroll中捕获它。它通过滚动条,向上和向下箭头键,页面向上触发 和DBGrid中发生的向下翻页键等。