Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ClientArea von TGroupBox modifizieren? (https://www.delphipraxis.net/191420-clientarea-von-tgroupbox-modifizieren.html)

Zacherl 13. Jan 2017 18:20

ClientArea von TGroupBox modifizieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

gelegentlich möchte ich gerne eine TGroupBox Komponente mit leerer Caption verwenden, um GUI Elemente zu gruppieren. Leider entsteht dann beim Enfügungen von Komponenten mit z.b.
Delphi-Quellcode:
Align
=
Delphi-Quellcode:
alClient
auf der Oberseite ein recht hässlicher Rand (siehe Screenshot), da trotzdem Platz für die Caption reserviert wird.

Gibt es eine einfache Möglichkeit die Client-Area der TGroupBox Komponente zu modifizieren?

Viele Grüße
Zacherl

HolgerX 13. Jan 2017 18:23

AW: ClientArea von TGroupBox modifizieren?
 
Hmm..

Ist die GroupBox nicht ein Panel mit zusätzlicher Textzeile im Kopf?

Würde sich da nicht die Verwendung von TPanel statt TGroupBox mit BevelInner := bvLowered anbieten?

Ansonsten müsstest Du Dir eine eigene GroupBox ableiten und das Paint überschreiben.

nahpets 13. Jan 2017 18:47

AW: ClientArea von TGroupBox modifizieren?
 
Zum Gruppieren nutze ich immer TPanel mit BevelInner und BevelOuter = bvNone.
Wenn ich 'nen kleinen, aber gleichmäßigen, Rand um die guppierten Elemente haben möchte, setze ich BorderWidth auf 2 oder 4.

Lässt man die BorderWidth auf 0, sieht man in der Oberfläche nicht, dass da ein Panel benutzt wird.

a.def 13. Jan 2017 19:03

AW: ClientArea von TGroupBox modifizieren?
 
Zitat:

Zitat von nahpets (Beitrag 1358825)
Zum Gruppieren nutze ich immer TPanel mit BevelInner und BevelOuter = bvNone.
Wenn ich 'nen kleinen, aber gleichmäßigen, Rand um die guppierten Elemente haben möchte, setze ich BorderWidth auf 2 oder 4.

Lässt man die BorderWidth auf 0, sieht man in der Oberfläche nicht, dass da ein Panel benutzt wird.

Ähnlich mache ich das auch.

Das Panel mit Rand zum Gruppieren von Komponenten hat aber den Nachteil, dass die Ecken nicht abgerundet sind wie bei der GroupBox.

nahpets 13. Jan 2017 19:14

AW: ClientArea von TGroupBox modifizieren?
 
Naja, vielleicht bin ich ja altmodisch, aber Ecken sind bei mir eckig ;-)

Quatsch: Die Panels sind immer so angeordnet, dass sie zwar die daraufliegenden Komponenten gruppieren, aber ansonsten unsichtbar sind.

Für den Anwender ist die technische Gruppierung mit Panels nicht erkennbar, sondern nur die funktionale / fachliche Gruppierung.

Für kleine Abstände zwischen den Gruppen sorge ich dann mit BorderWidth, sofern erforderlich.

a.def 13. Jan 2017 20:05

AW: ClientArea von TGroupBox modifizieren?
 
Zitat:

Zitat von nahpets (Beitrag 1358827)
Naja, vielleicht bin ich ja altmodisch, aber Ecken sind bei mir eckig ;-)

Du weißt doch was ich meine :P

EWeiss 14. Jan 2017 01:32

AW: ClientArea von TGroupBox modifizieren?
 
Zitat:

Gibt es eine einfache Möglichkeit die Client-Area der TGroupBox Komponente zu modifizieren?
Einfach (schnell) denke ich mal nicht.
Erfordert schon einigen Aufwand.

gruss

Zacherl 14. Jan 2017 01:39

AW: ClientArea von TGroupBox modifizieren?
 
Alles klar, danke euch!

Dann werde ich vorerst weiterhin meinen Workaround verwenden. Hierzu platziere ich in der GroupBox zuerst noch ein Panel ohne Rand, welches ich manuell positioniere und danach Right und Bottom zu den Anchors hinzufüge.

Uwe Raabe 14. Jan 2017 11:45

AW: ClientArea von TGroupBox modifizieren?
 
Du kannst es mit folgender Interposer-Class erreichen:

Delphi-Quellcode:
type
  TGroupBox = class(Vcl.StdCtrls.TGroupBox)
  protected
    procedure AdjustClientRect(var Rect: TRect); override;
  end;

procedure TGroupBox.AdjustClientRect(var Rect: TRect);
begin
  inherited AdjustClientRect(Rect);
  Canvas.Font := Font;
  Dec(Rect.Top, Canvas.TextHeight('0'));
end;

mensch72 14. Jan 2017 12:07

AW: ClientArea von TGroupBox modifizieren?
 
"Interposer-Class"

... das is cool und kannte ich bisher so noch nicht, da mache ich gleich ein paar Konzeptversuche mit Sachen die mich bei TMS noch nerven und ich bisher immer direkt in deren Source gepatcht habe, was aber viel Aufwand ist, denn ich muss es bei jeder neuen Version bisher immer manuell nachführen. Das könnte mir die Arbeit bei TMS Updates zukünftig erleichtern:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz