我可以在不调用OnDrawCell的情况下在StringGrid单元格中绘制形状吗?

时间:2012-02-20 03:39:48

标签: delphi

我知道如何在StringGrid.OnDrawCell事件中绘制形状(通过调用TCanvas对象的方法)。然而,当我这样做时,我的UI不断闪烁并消耗内存,因为绘制事件一次又一次地触发。

引起闪烁的行说出'if [condition1 for a given cell = true]然后[在单元格中画一个红色圆圈]。 (如果需要,我可以发布实际代码。)

那么,自定义方法是否可以做同样的事情 - 如果语句解析为true,告诉网格在单元格中绘制一个圆圈?

2 个答案:

答案 0 :(得分:5)

绘图的实际行为不是导致闪烁的原因。当窗口反复刷新时会发生闪烁。这通常意味着您没有正确管理窗口,例如,如果您在绘图条件发生变化时调用Refresh()而不是Invalidate()。将DoubleBuffer属性设置为true就像在上面放一个创可贴一样。它隐藏了这个问题,但没有真正解决根本问题。

答案 1 :(得分:2)

如果您还没有,请将DoubleBuffered设置为true。这会导致所有绘图都在离屏位图上完成,然后立即绘制整个位图。它通常可以消除闪烁。

对于进行单元格绘制的自定义方法,OnDrawCell 自定义方法。 :)