在c ++ Builder中,我有一个带有TPageControl的表单,里面有几个带有ScrollBox alClient的TTabSheet。在每个ScrollBox中动态绘制几个TStringGrid,并根据OpenDialog读取的二进制文件填充它们的信息。
对于动态创建组件,我编写了该函数
void __fastcall TForm1::DynamicDraw()
获取文件并在所有TTabSheet上绘制(带有依赖项)。
问题出现是因为用户可以在所有其他TTabSheet中删除/添加TStringGrid生成依赖性问题。
为了解决这个问题,我决定调用这个函数
ScrollBox->DestroyComponents();
DynamicDraw();
每个TTabsheet。然而,这会产生一个"闪烁"即使DoubleBuffered已激活,也会在当前选项卡中显示。
有任何想法或信息可以避免这个问题吗?
答案 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();
}