【问题标题】:Odd drawing issue (black cells) in TStringGridTStringGrid 中的奇怪绘图问题(黑色单元格)
【发布时间】:2014-06-11 13:07:17
【问题描述】:

我在使用 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

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 我可以用给定的信息复制它。
  • 花了 2 个小时来追踪这个问题。我认为这是我的自定义 TStringGrid 库中的一个问题(尤其是“绘制”方法)。
  • @SertacAkyuz-哪个德尔福?
  • 使用 XE。 XE2 似乎不会发生这种情况。
  • 选项goEditinggoRowSelect 是互斥的。如果您选择了整行,您将如何编辑网格?

标签: delphi delphi-xe tstringgrid


【解决方案1】:

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

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

【讨论】:

  • 设置 ParentDoubleBuffered 将覆盖 DoubleBuffered(更准确地说,Grid 将使用父级的 DoubleBuffered)。因此,当您将 ParentDoubleBuffered 设置为 true 但您没有告诉我们您的父母的 DoubleBuffered 值是什么时,这是没有意义的。我们只能猜测父级的 DoubleBuffered 是 False(因为发生了一些变化)。
  • 很高兴在延迟两年后听到您的回复;-) 我不记得确切的原因。我想我的意思是表单实际上将DoubleBuffered 设置为True。无需将所有内容都设置为双缓冲。
  • “没有必要将所有内容都设置为双缓冲” - 这是个人意见还是可以解释?我认为 Borland 把那个财产放在那里是有目的的……
  • 所以,基本上你的意思是这是一个 Delphi 错误('未记录的功能':))。问题只能通过禁用 DoubleBuffered 来解决?
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多