3

我试图让一些非常微妙的东西起作用,它现在看起来很糟糕。我正在尝试绘制 TGroupBox 的背景,我已经重载了它的绘制函数,以便角落显示到它们的父对象。我有一堆嵌套的组合框,如果没有 XPThemes,它们看起来很不错。

有没有办法在运行时绘制透明背景的一部分。我正在编写表单生成器,而不是使用 Delphi 设计视图。

4

4 回答 4

2

当我遇到这样的情况时,我最初使用 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;
于 2008-09-30T20:21:54.860 回答
1

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

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

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

3 - 将两个 TGroupBoxes 放在第一个内,其中 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
于 2008-09-30T19:02:02.167 回答
1

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

于 2008-10-02T14:21:36.177 回答
1

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

也许有些事情我不知道,但在我最近的经验中,它并不像听起来那么简单,因为主题和确切地知道要画什么区域。甚至 TCanvas.FloodFill 也不能可靠地完成这项工作,可能是因为有时操作系统不需要重新绘制所有内容。

于 2008-10-02T15:50:35.307 回答