You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现鼠标滚轮滚动DBGridEh内容而非切换记录?无需MemTableEh

实现DBGridEh无MemTableEh时的鼠标滚轮滚动功能

一、正确使用DBGridEhCenter.TryUseViewScroll

你之前设置DBGridEhCenter.TryUseViewScroll := False没效果,是因为搞反了这个属性的作用逻辑:

  • 该属性的核心是控制DBGridEh是否启用视图级滚动——也就是不依赖数据集的游标移动,直接滚动网格的显示内容,这正是你需要的无MemTableEh场景的滚动方式。
  • 正确的设置是将其设为True,并且要在程序初始化阶段(比如主窗体的OnCreate事件,或者单元的initialization块)配置,才能全局作用于所有DBGridEh:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  // 开启全局视图级滚动
  DBGridEhCenter.TryUseViewScroll := True;
  // 确保DBGridEh本身启用了滚轮支持(默认开启,可手动确认)
  DBGridEh1.OptionsEh := DBGridEh1.OptionsEh + [dghWheelScroll];
end;

二、手动绑定鼠标滚轮事件(兜底方案)

如果全局配置不生效,可以给单个DBGridEh添加OnMouseWheel事件,直接控制滚动行为:

procedure TYourForm.DBGridEh1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  ScrollStep: Integer;
begin
  Handled := True;
  // 滚轮每滚动一格,WheelDelta变化±120,对应滚动一行
  ScrollStep := WheelDelta div 120;
  // 反向计算滚动偏移(WheelDelta为正向上滚,需减少垂直偏移)
  DBGridEh1.ScrollBy(0, -ScrollStep * DBGridEh1.DefaultRowHeight);
end;

这种方式完全不依赖数据集类型,直接操作网格的显示视图,兼容性更强。

三、额外检查项

  • 确认DBGridEh的OptionsEh中未禁用dghWheelScroll,这是滚轮功能的基础开关;
  • 如果绑定了其他数据集(如TADOQuery),确保数据集处于打开状态,且未被其他逻辑锁定滚动;
  • 排查是否有第三方组件或全局钩子拦截了鼠标滚轮事件,导致DBGridEh无法响应。

内容的提问来源于stack exchange,提问作者Dekmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:51:09