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