如何在水平滚动时刷新网格

How to make grid refresh on horizontal scroll

几小时后,我无法在此处或其他地方找到有关此问题的任何参考资料。 Android 和 Windows 的多设备应用程序(因此 FMX 而不是 VCL)都出现了问题(我不知道 iOS)。

设置: 在表单上放置网格(TGridTStringGrid)。 通过添加列使网格大于表单,确保需要水平滚动。 在网格选项中,选择绘制 ColLinesRowLinesAlternatingRowBackgroundRowSelect 也可以为 True,一次突出显示整行。

问题:水平滚动时,之前隐藏的部分grid不显示任何RowLines或背景(ColLines画得很好) ,或突出显示 RowSelect。 无论列限制如何,都会剪切着色和绘图。当调整 window 以适应网格时(在 Windows OS 上),颜色和线条在先前隐藏的列上绘制得很好。

我已经尝试过 OnDrawColumnCellOnHScrollChange 事件:

拜托,有谁知道如何在水平滚动时按预期显示网格?


2016 年 8 月 12 日编辑:Delphi 10.1(柏林)不关心

好的,我找到了。终于。

为了在选择时突出显示整个行(甚至是隐藏部分),必须使用 Styles.

我没有深入了解样式编辑,但这里是要看的内容:

  • 在表单上使用网格组件 (TGridTStringGrid),右键单击网格并选择 编辑默认样式编辑自定义样式打开FireMonkey Style Designerwindow(详见DocWiki
  • 结构视图中转到:gridstyle > background > content > selection
  • Object Inspector 中,selectionAlign 属性 默认为 None这就是为什么突出显示不会分布在整行的原因!
  • 将值更改为 Horizontal,您就完成了。其他值将无法解决问题。 (Contents, Client : 整个网格高亮显示) (Fit, Center : 高亮显示在网格中心)

令人惊讶的是,在 Delphi 10.1 中,默认配置是相同的,但如果需要,选择会正确地分布在整行中...

注意:gridstyleTLayoutbackgroundTRectanglecontentTLayoutselectionTRectangle