You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

问题截图:
ListBox重绘异常1
ListBox重绘异常2
奇怪的是,其他同类型的TTransparentGroupbox和TListBox控件没有出现这个问题。

问题2:子控件隐藏后画面残留

当把GroupBox上的子控件Visible设为false时,该控件原来的画面并没有被擦除,仍然留在界面上。

内容的提问来源于stack exchange,提问作者ZorgoZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:30:55