我知道如何在StringGrid.OnDrawCell事件中绘制形状(通过调用TCanvas对象的方法)。然而,当我这样做时,我的UI不断闪烁并消耗内存,因为绘制事件一次又一次地触发。
引起闪烁的行说出'if [condition1 for a given cell = true]然后[在单元格中画一个红色圆圈]。 (如果需要,我可以发布实际代码。)
那么,自定义方法是否可以做同样的事情 - 如果语句解析为true,告诉网格在单元格中绘制一个圆圈?
答案 0 :(得分:5)
绘图的实际行为不是导致闪烁的原因。当窗口反复刷新时会发生闪烁。这通常意味着您没有正确管理窗口,例如,如果您在绘图条件发生变化时调用Refresh()
而不是Invalidate()
。将DoubleBuffer
属性设置为true就像在上面放一个创可贴一样。它隐藏了这个问题,但没有真正解决根本问题。
答案 1 :(得分:2)
如果您还没有,请将DoubleBuffered
设置为true。这会导致所有绘图都在离屏位图上完成,然后立即绘制整个位图。它通常可以消除闪烁。
对于进行单元格绘制的自定义方法,OnDrawCell
是自定义方法。 :)