简单实现一个可视控件
TMyControl = class(TCustomControl) end;
会发现连续改变尺寸(缩放窗口)时,创建在TMyControl这个控件的子控件出现闪烁问题。其实是被大量重绘导致问题。解决问题的方法,当然是减少重绘。
有2中情况会出现重绘(除自己要求重绘)
- 父窗体重绘,要求子窗体重绘
- 窗体被遮挡区域改变时
Windows提供这确定是否需要重绘的参数:
WS_CLIPCHILDREN --- 父窗体重绘子窗体不处理
WS_CLIPSIBLINGS --- 同级窗体遮挡不处理
具体可以看相关帮助!
procedure TMyControl.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do Style := Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS; end;
开发环境:
- DelphiXE3
- Win7