Delphi 5透明GroupBox重绘异常及子控件隐藏残留问题求助
Delphi 5透明GroupBox控件重绘问题
参考相关实现,我在Delphi 5中编写了如下透明GroupBox控件代码:
type TTransparentGroupbox = class(TGroupBox) protected procedure CreateParams(var params: TCreateParams); override; procedure WMEraseBkGnd(var msg: TWMEraseBkGnd); message WM_ERASEBKGND; end; ..... procedure TTransparentGroupbox.CreateParams(var params: TCreateParams); begin inherited CreateParams(params); params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT; end; procedure TTransparentGroupbox.WMEraseBkGnd(var msg: TWMEraseBkGnd); begin SetBkMode(msg.DC, TRANSPARENT); msg.result := 1; end;
问题1:子控件ListBox重绘异常
将ListBox放在该透明GroupBox上时,ListBox无法完全重绘,仿佛背景模式被传递给了子控件。我尝试重载PaintWindow方法并设置SetBkMode为OPAQUE,但没有效果:
procedure TTransparentGroupbox.PaintWindow(DC: HDC); begin SetBkMode(DC, OPAQUE); inherited; end;
问题截图:

奇怪的是,其他同类型的TTransparentGroupbox和TListBox控件没有出现这个问题。
问题2:子控件隐藏后画面残留
当把GroupBox上的子控件Visible设为false时,该控件原来的画面并没有被擦除,仍然留在界面上。
内容的提问来源于stack exchange,提问作者ZorgoZ
相关产品推荐
相关产品推荐

