C ++ Builder - TShape组件的问题

我有这段代码:
TShape* T[256];

/* Other code ... */

for (int i = 255; i > 0; i--) {
     T[i]->Brush->Color = T[i - 1]->Brush->Color;
     T[i]->Pen->Color = T[i - 1]->Pen->Color;
};
周期由TTimer每100毫秒执行一次,第一个TShape的颜色每100毫秒改变一次。 在这个循环中,我看到一条闪烁的白色水平线,因为在接收另一个TShape的颜色之前,每个TShape都会失效并变为白色。 有没有办法避免这种行为? 也许,我必须覆盖一些方法?     
已邀请:
我认为双缓冲是你问题的关键。如果您正在使用C ++ Builder 2009或更新版本可能为您当前的帧设置属性Controls :: TWinControl :: DoubleBuffered就足够了。     
每次更改其Brush和Pen属性时,TShape都会使自身无效,因此您的循环会使每个TShape双重无效。作为一种解决方法,请尝试暂时删除TShape内部分配的OnChange事件处理程序,然后在完成更新后仅对TShape进行一次Invalidate()。例如:
for (int i = 255; i > 0; i--)
{ 
    TNotifyEvent OldBrushChange = T[i]->Brush->OnChange;
    T[i]->Brush->OnChange = NULL;

    TNotifyEvent OldPenChange = T[i]->Pen->OnChange;
    T[i]->Pen->OnChange = NULL;

    T[i]->Brush->Color = T[i - 1]->Brush->Color; 
    T[i]->Pen->Color = T[i - 1]->Pen->Color; 

    T[i]->Brush->OnChange = OldBrushChange;
    T[i]->Pen->OnChange = OldPenChange;
    T[i]->Invalidate();
}; 
    

要回复问题请先登录注册