TStringGrid中的奇怪绘图问题(黑色单元格)

时间:2014-06-11 13:07:17

标签: delphi delphi-xe tstringgrid

我在使用TStringGrid(Delphi XE)时遇到了一些非常奇怪的东西。我已经看到,有时当我点击网格中的第一行时,它会变黑(或显示乱码画布'被盗的'来自其他形式的控件)。 当网格获得焦点时,它仅在某些配置中发生。一旦你点击网格中的另一个区域,一切都看起来没问题,直到焦点移动到另一个TStringGrid。

如何重现:

  • 在表单上放置两个字符串网格
  • 如下所示设置它们(更新:我意识到goRowSelect和goEditing必须是' true')
  • 点击一个网格中的第一个单元格 - >没有任何反应
  • 点击第二个网格中的第一个单元格 - >第一个细胞变黑(见截图)

问题也出现在其他情况下(不需要在表单上有2个网格),但只有当我有2个网格时才设法重现它。

object grid1: TStringGrid <------- same for Grid2
  Left = 2
  Top = 8
  Width = 422
  Height = 381
  BevelEdges = [beLeft, beTop]
  DefaultColWidth = 80
  DefaultRowHeight = 15
  DoubleBuffered = True
  FixedCols = 0
  Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goColSizing, goEditing, goRowSelect, goFixedHotTrack]
  ParentDoubleBuffered = False
  TabOrder = 1
end

有关如何解决此问题的任何想法?

enter image description here

1 个答案:

答案 0 :(得分:3)

我也可以用XE3重现你的问题。将ParentDoubleBuffered重置为True后,问题就消失了。

一般来说,当我在控件中看到奇怪的黑色矩形时,我将首先检查ParentDoubleBuffered设置。我看到你为这两个网格启用了双缓冲。你有什么特别的理由吗?如果您打算在调整大小或单元格更新期间避免闪烁,则some techniques会有所帮助。