Wie delphi Gruppenfelder zeichnen transparenten Hintergrund haben
-
03-07-2019 - |
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.
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.