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

标签 delphi events scrollbar dbgrid

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

最佳答案

TCustomGrid 中有一个 WMHScroll 过程,但它是私有(private)的。您不能在 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;
[...]

更新2:请注意,您可以将特殊的 TDBGrid 代码移动到单独的单元(推荐),只需确保将此单元名称放在表单的使用子句中的 DBGrids 之后.

关于delphi - 如何在Delphi中捕获DBGrid中的滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723598/

相关文章:

delphi - 绘制空行

c# 需要在 LOCK 范围内引发事件

javascript计算滚动条高度

delphi - IP黑名单TcpServer

delphi - 从 Delphi 程序终止 java 应用程序

multithreading - 从非主线程绘制到主窗体 Canvas

Javascript removeEventListener 不工作 - 事件监听器仍然存在

javascript - 内部 div 的事件累积外部 div 的事件数

javascript - window.print() 打印所有div内容,不带滚动条

android - 将滚动条添加到自定义 ViewGroup?