문제

나는 매우 미묘한 일을하려고 노력하고 있습니다. 지금은 꽤 끔찍해 보입니다. 나는 코너가 부모 객체로 표시되도록 페인트 기능을 과부하시키는 tgroupbox의 배경을 페인트하려고합니다. xpthemes없이 매우 괜찮아 보이는 중첩 그룹 상자가 많이 있습니다.

런타임에 투명한 배경의 일부를 페인트하는 방법이 있습니까? Delphi Design View를 사용하지 않고 Form Generator를 프로그래밍하고 있습니다.

도움이 되었습니까?

해결책

이 문제를 다음 단계로 복제하려고합니다.

1- 테마를 Windows XP 기본값으로 설정합니다

2- 빈 양식에 tgroupbox를 떨어 뜨립니다 (align = alnone)

3- 첫 번째 Tgroupbox를 첫 번째 Tgroupbox를 삭제하고 Align = albottom 및 align = alclient를 사용하여 두 개의 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를 설정할 필요가 없었습니다.

어쩌면 내가 모르는 것이있을 수도 있지만 최근의 경험에서는 테마와 페인트 영역을 정확히 아는 것만 큼 간단하지 않습니다. tcanvas.floodfill 조차도이 작업에 대해 안정적으로 작동하지 않을 것입니다. 아마도 OS는 모든 것을 다시 칠할 필요가 없기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top