背景を透明にするためにデルファイグループボックスを描画する方法

StackOverflow https://stackoverflow.com/questions/154387

質問

非常に微妙な動作をさせようとしていますが、今はかなりひどいようです。ペイント機能をオーバーロードしたTGroupBoxの背景をペイントして、角が親オブジェクトに透けて見えるようにします。 XPThemesがなくても非常にまともな外観のネストされたグループボックスがたくさんあります。

実行時に背景の一部を透明にペイントする方法はありますか。 Delphiデザインビューを使用せずにフォームジェネレーターをプログラミングしています。

役に立ちましたか?

解決

次の手順でこの問題を再現しようとしています:

1-テーマをWindows XPのデフォルトに設定

2-空のフォームにTGroupBoxをドロップします(align = alNone)

3-align = alBottomおよびalign = alClientを使用して、最初のTGroupBox内に2つのTGroupBoxをドロップします

しかし、視覚的には私には問題ありません。

フォームの設計方法に関する詳細情報を提供できますか? .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;

ハ、それはラメでした。ただ、コンストラクターで ParentBackground:= false を設定せず、必要に応じてグループボックスの内部をペイントする必要がありました。

  

はい、それは不十分でした。コンストラクタでParentBackground:= falseを設定せず、必要に応じてグループボックスの内部をペイントする必要がありました。

わからないことがあるかもしれませんが、最近の経験では、テーマとアンプのために聞こえるほど単純ではありません。ペイントする領域を正確に知る。 TCanvas.FloodFillでさえ、この作業で確実に動作しません。おそらく、OSがすべてを再描画する必要がないためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top