【发布时间】:2008-09-30 18:43:02
【问题描述】:
我正在尝试一些非常微妙的工作,它现在看起来很糟糕。我正在尝试绘制一个 TGroupBox 的背景,我已经重载了它的绘制函数,以便角落显示到它们的父对象。我有一堆嵌套的组合框,如果没有 XPThemes,它们看起来很不错。
有没有办法在运行时绘制透明背景的一部分。我正在编写表单生成器,而不是使用 Delphi 设计视图。
【问题讨论】:
标签: winforms delphi transparency vcl
我正在尝试一些非常微妙的工作,它现在看起来很糟糕。我正在尝试绘制一个 TGroupBox 的背景,我已经重载了它的绘制函数,以便角落显示到它们的父对象。我有一堆嵌套的组合框,如果没有 XPThemes,它们看起来很不错。
有没有办法在运行时绘制透明背景的一部分。我正在编写表单生成器,而不是使用 Delphi 设计视图。
【问题讨论】:
标签: winforms delphi transparency vcl
当我遇到这种情况时,我最初使用 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;
【讨论】:
我正在尝试通过以下步骤复制此问题:
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
【讨论】:
哈,那太蹩脚了,我只需要不在我的构造函数中设置ParentBackground := false 并在适当的时候绘制组框的内部。
【讨论】:
哈,那太蹩脚了,我只需要不在我的构造函数中设置 ParentBackground := false 并在适当的时候绘制组框的内部。
也许有些事情我不知道,但根据我最近的经验,这并不像听起来那么简单,因为主题和确切地知道要绘制的区域。即使是 TCanvas.FloodFill 也不能可靠地完成这项工作,可能是因为有时操作系统不需要重新绘制所有内容。
【讨论】: