【问题标题】:How to draw delphi group boxes to have transparent backgrounds如何绘制delphi组框以具有透明背景
【发布时间】:2008-09-30 18:43:02
【问题描述】:

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

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

【问题讨论】:

    标签: winforms delphi transparency vcl


    【解决方案1】:

    当我遇到这种情况时,我最初使用 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;
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

      • 感谢您的回复,我想我必须澄清我的问题,我不是在设计模式下绘制它们,它们是在运行时按照我们应用程序用户的设计创建的。所以没有 DFM,也不一定有任何能力来对齐这些组框,因为它们是绝对定位的。
      • 啊,我明白了。这会有所不同。这些看起来很有希望;我仍在四处寻找,试图弄清楚这一点。 torry.net/pages.php?id=152
      • 谢谢,我尝试了透明框,这导致我尝试 canvas.copyrect 父 tgroupbox,这导致我最终得到明显的答案,该答案在您的 DFM 中默认。
      • 我真的很高兴你知道了。我为这个获得“已回答”状态感到有点内疚;充其量我只是给出了一些有用信息的指针,你就明白了。恭喜……
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-07-07
          相关资源
          最近更新 更多