Winforms 如何绘制具有透明背景的delphi组框

Winforms 如何绘制具有透明背景的delphi组框,winforms,delphi,transparency,vcl,Winforms,Delphi,Transparency,Vcl,我正试着做一些非常微妙的事情,现在看起来很糟糕。我正在尝试绘制一个TGroupBox的背景,我已经重载了它的paint函数,以便将角点显示到其父对象。我有一堆嵌套的分组框,没有XPThemes看起来很不错 有没有一种方法可以在运行时将背景的一部分绘制为透明的。我正在编程表单生成器,而不是使用Delphi design view。我正在尝试通过以下步骤复制此问题: 1-将主题设置为Windows XP默认值 2-将TGroupBox放到空表单上(align=alNone) 3-将两个tgroupb

我正试着做一些非常微妙的事情,现在看起来很糟糕。我正在尝试绘制一个TGroupBox的背景,我已经重载了它的paint函数,以便将角点显示到其父对象。我有一堆嵌套的分组框,没有XPThemes看起来很不错


有没有一种方法可以在运行时将背景的一部分绘制为透明的。我正在编程表单生成器,而不是使用Delphi design view。

我正在尝试通过以下步骤复制此问题:

1-将主题设置为Windows XP默认值

2-将TGroupBox放到空表单上(align=alNone)

3-将两个tgroupbox放入第一个tgroupbox中,其中align=alBottom和align=alClient

但从视觉上看,我觉得还不错

你能提供更多关于你是如何设计表单的信息吗?从.DFM粘贴一些代码就可以了

以下是我的DFM的相关部分:

  object GroupBox1: TGroupBox
    Left = 64
    Top = 56
    Width = 481
    Height = 361
    Margins.Left = 10
    Caption = 'GroupBox1'
    ParentBackground = False
    TabOrder = 0
    object GroupBox2: TGroupBox
      Left = 2
      Top = 254
      Width = 477
      Height = 105
      Align = alBottom
      Caption = 'GroupBox2'
      TabOrder = 0
    end
    object GroupBox3: TGroupBox
      Left = 2
      Top = 15
      Width = 477
      Height = 239
      Align = alClient
      Caption = 'GroupBox3'
      TabOrder = 1
    end
  end

当我遇到这样的情况时,我最初使用TGroupBox,但后来决定使用TPaintBox(在本示例中称为pb),并模拟TGroupBox的图形部分

procedure TfraNewRTMDisplay.pbPaint(Sender: TObject);
const
  icMarginPixels=0;
  icCornerElipsisDiameterPixels=10;
begin
  pb.Canvas.Pen.Color:=clDkGray;
  pb.Canvas.Pen.Width:=1;
  pb.Canvas.Pen.Style:=psSolid;
  pb.Canvas.Brush.Color:=m_iDisplayColor;
  pb.Canvas.Brush.Style:=bsSolid;
  pb.Canvas.RoundRect(icMarginPixels,
                      icMarginPixels,
                      pb.Width-icMarginPixels*2,
                      pb.Height-icMarginPixels*2,
                      icCornerElipsisDiameterPixels,
                      icCornerElipsisDiameterPixels);
end;

哈,这太差劲了,我只需要不在构造函数中设置
ParentBackground:=false
,并在适当的时候绘制组框的内部


哈,这太差劲了,我只需要在构造函数中不设置ParentBackground:=false,并在适当的时候绘制组框的内部


也许有些东西我不知道,但在我最近的经历中,它并不像听起来那么简单,因为它的主题&确切地知道要画什么区域。即使是TCanvas.FloodFill也不能可靠地用于此工作,可能是因为有时操作系统不需要重新绘制所有内容。

感谢您的回复,我想我必须澄清我的问题,我不是在设计模式下绘制它们,它们是在运行时创建的,由我们应用程序的用户设计。所以没有DFM,也不一定有能力对齐这些分组框,因为它们是绝对定位的。啊,我明白了。这就不同了。这些看起来很有希望;我还在四处摸索,想弄清楚这件事。谢谢,我尝试了透明框,这让我尝试canvas.copyrect父项tgroupbox,这让我最终找到了在DFM中默认的明显答案。我真的很高兴你找到了答案。我对这一次得到“回答”的状态感到有点内疚;充其量我只是给了一个指向一些有用信息的指针,你就明白了。恭喜。。。。