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

时间:2020-03-06 14:56:23  来源:igfitidea点击:

我正在尝试使工作变得非常微妙,现在看起来非常糟糕。我正在尝试绘制TGroupBox的背景,而我已经重载了TGroupBox的绘制功能,以便将角显示到其父对象。我有一堆嵌套的分组框,如果没有XPThemes,它们看起来非常不错。

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

解决方案

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

1将主题设置为Windows XP默认

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

3在第一个中放入两个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;

哈,真是la脚,我只需要在我的构造函数中不要设置ParentBackground:= false并在适当的时候绘制组框的内部。

Ha, that was lame, I just needed to not set ParentBackground := false in my constructor and paint the interior of the group box when appropriate.

也许有些事情我不知道,但是根据我最近的经验,由于主题和确切地知道要绘画的区域,这并不像听起来那样简单。甚至TCanvas.FloodFill也无法可靠地完成此工作,这可能是因为有时OS不需要重新粉刷所有内容。