![]() |
Was bestimmt denn die Größe von alClient?
Hi!
Wenn man z.B. 2 Panels ineinanderlegt, und dem innenliegenden Panel die Eigenschaft
Code:
gibt, dann passt sich das Panel automatisch IN das andere Panel ein. Die Größe wird dabei aber von 2 Faktoren zusätzlich beeinflusst: Bevel und Border. Je nachdem was und wieviel eingestellt ist, wird die Größe des innenliegenden Objektes verändert.
Align := alClient
Worauf ich hinaus möchte: Wenn man nun seine Eigene Klasse von TComponent ableitet (was z.B. auch das TPanel ist), wo lege ich denn fest wie groß das "Innere Rect" sein kann? In meinen Versuchen wird immer die ganze Größe meiner Komponente benutzt und somit bei alClient meine ganze Komponente überzeichnet. Ich weis noch nicht mal so richtig nach was ich in der Suche dabei suchen muss :roll: . |
Re: Was bestimmt denn die Größe von alClient?
Ich hab die Frage nicht so richtig versanden, aber eventuell ist TControl.ClientRect was für dich. Allerdings ist das dann von TControl, was allerdings auch von TComponent erbt.
|
Re: Was bestimmt denn die Größe von alClient?
Es passt sich der Größe (Restgrößre) des Parent an.
|
Re: Was bestimmt denn die Größe von alClient?
Genau es geht um die Restgröße. Evtl ist es das ClientRect? Es geht einfach darum, wenn ich z.B. ein eigenes Panel zeichnen möchte, mit anderen Rahmen als "der Standard" muss ich eine Klasse erzeugen und die Paint Routine überschreiben.
Delphi-Quellcode:
Wenn ich nun meinem Panel BevelWidth := 0 und allen Bevel-Typen bvNone zuweise, dann wird bei einem anderem Objekt das ich in mein Panel "lege" und mit alClient versehe, immer mein komplettes Panel benutzt. Ich möchte aber z.B. Rechts und Links 2 Pixel Rand und Oben keinen. Diese Größe muss ich dem Childobjekt irgendwo mitteilen.
TMyPanelExt = class(TCustomControl)
public constructor Create(AOwner: TComponent); override; destructor Destroy; override; protected procedure CreateParams(var Params: TCreateParams); override; procedure Paint; override; published property Caption; end; |
Re: Was bestimmt denn die Größe von alClient?
Ich denke ich habe es selbst herausgefunden. Man muss die protected Routine "AdjustClientRect" des eigenen Panels überschreiben. Dort kann man dann nach belieben die Ränder/Größe anpassen, die die Childs haben sollen.
Delphi-Quellcode:
Es macht genau das was ich will. :-D
...
protected procedure AdjustClientRect(var Rect: TRect); override; ... procedure TMyPanelExt.AdjustClientRect(var Rect: TRect); begin inherited AdjustClientRect(Rect); Dec(Rect.Right,1); //InflateRect(Rect, -2, -4); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz