Frage

Ich versuche, etwas sehr subtil zur Arbeit zu kommen, sieht es ziemlich gerade jetzt schrecklich. Ich versuche, den Hintergrund eines TGroupBox zu malen, die ich die Farbe Funktion überlastet, so dass die Ecken an ihre Mutter Objekt durchscheinen werden. Ich habe eine Reihe von verschachtelten Gruppenfeldern bekommt, die ohne XPThemes sehr anständig aussehen.

Gibt es eine Möglichkeit Teil eines Hintergrund transparent zur Laufzeit zu malen. Ich programmiere den Formular-Generator, nicht Delphi Design-Ansicht.

War es hilfreich?

Lösung

Ich versuche, dieses Problem mit den folgenden Schritten zu kopieren:

1 - Set Thema auf Windows XP default

2 - Drop ein TGroupBox auf ein leeres Formular (align = alNone)

3 - Drop zwei TGroupBoxes innerhalb der ersten, mit align = alBottom und align = alClient

Aber optisch sieht es ganz gut für mich.

Können Sie einige weitere Informationen über genau das, wie Sie das Formular entworfen haben? Einige Code aus dem .DFM eingefügt wären in Ordnung.

Hier ist der relevante Teil meiner 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

Andere Tipps

, wenn ich so eine Situation hatte, arbeitete ich mit TGroupBox zunächst aber dann entschieden TPaintBox (genannt pb in dieser Probe) und simuliert den grafischen Teil des TGroupBox stattdessen zu verwenden.

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;

Ha, das war lahm, ich muß nur nicht gesetzt ParentBackground := false in meinem Konstruktor und malen das Innere des Gruppenfelds, wenn angemessen.

  

Ha, das war lahm, ich muß nur nicht Parent gesetzt. = False in meinem Konstruktor und male das Innere des Gruppenfelds bei Bedarf

Vielleicht ist es etwas, ich weiß nicht, aber in meiner letzten Erfahrung, es ist nicht so einfach, wie es wegen der Themen klingt und genau zu wissen, was Bereich zu malen. auch TCanvas.FloodFill nicht zuverlässig für diese Arbeit wahrscheinlich arbeiten, weil manchmal das Betriebssystem nicht alles neu streichen muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top