【问题标题】:Smooth scroll string grid平滑滚动字符串网格
【发布时间】:2012-08-17 00:11:30
【问题描述】:

我需要一个可以平滑滚动的字符串网格,而不是锁定在顶行/左列位置。当您滚动 TStringGrid 时,左侧可见列和顶部可见行沿顶部/左侧边缘对齐。我需要用户能够平滑滚动,而不是将这些边缘锁定到位。

我认为这不可能在 VCL TStringGrid(或TCustomGrid)中进行修改,因为它依赖于诸如TopRowLeftColVisibleRowCount 等属性。我很确定我需要第三方控件,但如果可能的话,我很想使用TStringGrid,因为我已经有很多代码围绕着它。如果我确实需要第三方网格,那么我希望它可以像 TStringGrid 一样紧密地工作。

【问题讨论】:

  • 我不知道你在这里要求什么。你是在说水平。还是垂直滚动? “卡入到位”或“将这些边缘锁定到位”是什么意思?我已经广泛使用TStringGrid,但不知道你反对什么行为或你想在这里问什么。
  • 当您垂直或水平滚动时,它一次移动一列/行。
  • 但这就是网格的工作方式,例如 Excel 中使用的网格。网格中的部分数据行没有用处。如果您不希望出现这种行为,则说明您使用了错误的控件。
  • FMX 网格有一个“动画”属性,它与您似乎正在寻找的内容相匹配……但它不是 VCL……
  • @KenWhite 这取决于您打算如何使用它。当然,如果它只是显示文本,那么第一行就没用了。但是如果列是控件宽度的 3/4 呢?当我滚动过去时,它会逐个单元格而不是逐个像素地跳跃,而宽单元格会导致大跳跃。

标签: delphi delphi-xe2 tstringgrid


【解决方案1】:

简短的回答是不,你不能像素滚动TStringGrid。您可以使用TScrollBox 模拟网格。您可以在TScrollBox 中放置一个网格,使网格足够大以适合所有行和列,并关闭其滚动条,但某些操作(如键盘导航)将不起作用。

其他替代方法是在网格模式下使用TVirtualTreeTListView。两者都有你想要的像素滚动。

【讨论】:

  • 在滚动框中放置一个字符串网格时,您需要 3 个字符串网格;一个用于行标题,一个用于列标题,一个用于数据区域。
  • 为什么不使用和学习像 devexpress devexpress.com/Products/VCL/ExQuantumGrid 这样的专业网格。
  • 我会试一试TVirtualTree,但是TListView 太重了(我没有提到我从TListView 移动到TStringGrid,因为在数百数以千计的项目)。 ExQuantumGrid 看起来也很有希望,值得另一个答案。
  • 如果性能是一个问题,并且鉴于您最初的问题,学习使用 TVirtualTree 确实值得。这是一个范式的机会,但一旦你“得到”它,它就会有很大的回报。
【解决方案2】:

我正在寻找类似的东西。不幸的是,你不能用 Borland 的代码做到这一点,但 Lazarus 可以做到 Scrolling the TStringGrid pixel by pixel
你可能想看看他们的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多