【问题标题】:DELPHI : String grid header background/font colorDELPHI:字符串网格标题背景/字体颜色
【发布时间】:2014-09-19 07:25:12
【问题描述】:

我创建了一个包含一定数量的列和行的字符串网格。我还在字符串网格上处理了一个右 clic 事件,当您单击右键时,它会显示一个弹出菜单。您在此弹出菜单中有一些选项。

我的问题是,当我从弹出菜单中选择一个选项时,如何更改单元格的背景或警察字体颜色。我知道我们可以使用stringGrid.Col 和相同的行来获取选定的列,而且我也知道我们可以在绘制单元格事件时更改颜色。但我只想更改用户操作的颜色。

例如,在我的表格中,我打开一个文件并将文件内容加载到字符串网格中(它是一个 CSV 文件)。该文件将在我的应用程序中从字符串网格进行修改,然后导出到数据库。用户可以使用正确的 clic 选择特定的列,然后按主键或外键或任何其他选项。例如,当他选择主键时,我想更改列标题的颜色,以便他可以知道哪个 clumn 是主键,哪个是外键等等。明白了吗?

PS:我使用的是delphi 2006,无法更改为其他版本。

PS:我在 stackoverflow/exchange 上搜索了一个 delphi 论坛,但我猜没有找到正确的论坛

【问题讨论】:

  • 将所需的列存储在数组或列表中,如果包含 aCol 并且 aRow=0,则检查 DrawCell。
  • 你在纠结什么?如何绘制不同颜色的不同单元格?
  • draw cell 的问题是它会在创建单元格时触发,我不希望这样。在整个字符串网格已经呈现后,我只想在用户操作时更改颜色

标签: delphi colors cells tstringgrid


【解决方案1】:
  1. 像现在一样在OnDrawCell 处理程序中以所需颜色绘制背景。
  2. 当您需要更改颜色时,响应用户操作,通过在网格上调用Invalidate 来强制绘制循环。

如果由于某种原因您不想使整个控件无效,请计算需要重新绘制的矩形并将其传递给InvalidateRect

【讨论】:

  • 你可以制作一个破解的TStringGrid,也可以调用protected InvalidateCell。
  • 我没有 invalidateRect 选项,我只有 Invalidate。另外,我只是尝试无效。我有一个布尔值,当我调用无效时,我的 drawcell 事件看起来像这样'如果 primaryKeySelected 然后开始 cell.text := sg.Celle[ACol, 0] sg.Canvas.brush.Color := clRed, sg. Canva.FillREct(Rect), textout .end' 但它仍然为整个网格着色,不知道为什么
  • 您可以致电InvalidateRect。这是一个 Windows API 函数。正如 LURD 所说,破解类调用 protectedInvalidateCell 可能是一个更好的选择。
  • 如何添加 IvalidateRect 或 Cell api?,它似乎比简单的绘制单元更好。我以前从未使用过 delphi。
  • 我以为你已经知道如何绘制单元格背景了?看来你还没有搞清楚。您了解绘画在 Windows 中的工作原理吗? WM_PAINT、InvalidateRect 等
猜你喜欢
  • 1970-01-01
  • 2015-07-07
  • 2015-04-29
  • 2015-03-25
  • 1970-01-01
  • 2014-12-18
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多