如何绘制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不需要重新粉刷所有内容。

