destroyComponents()和重绘c ++ builder

时间:2015-05-06 14:43:46

标签: windows c++builder

在c ++ Builder中,我有一个带有TPageControl的表单,里面有几个带有ScrollBox alClient的TTabSheet。在每个ScrollBox中动态绘制几个TStringGrid,并根据OpenDialog读取的二进制文件填充它们的信息。

对于动态创建组件,我编写了该函数     


    void __fastcall TForm1::DynamicDraw()
    
获取文件并在所有TTabSheet上绘制(带有依赖项)。

问题出现是因为用户可以在所有其他TTabSheet中删除/添加TStringGrid生成依赖性问题。

为了解决这个问题,我决定调用这个函数     


    ScrollBox->DestroyComponents();
    DynamicDraw();
    

每个TTabsheet。然而,这会产生一个"闪烁"即使DoubleBuffered已激活,也会在当前选项卡中显示。

有任何想法或信息可以避免这个问题吗?

1 个答案:

答案 0 :(得分:0)

在您进行更新时,将ScrollBox WM_SETREDRAW消息发送到临时禁用屏幕画面:

SendMessage(ScrollBox->Handle, WM_SETREDRAW, FALSE, 0);
try {
    ScrollBox->DestroyComponents();
    DynamicDraw();
}
__finally {
    SendMessage(ScrollBox->Handle, WM_SETREDRAW, TRUE, 0);
    ScrollBox->Update();
}
相关问题