Delphi-PRAXiS

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 Was bestimmt denn die Größe von alClient? (https://www.delphipraxis.net/134890-bestimmt-denn-die-groesse-von-alclient.html)

hronny 31. Mai 2009 18:16


Was bestimmt denn die Größe von alClient?
 
Hi!

Wenn man z.B. 2 Panels ineinanderlegt, und dem innenliegenden Panel die Eigenschaft
Code:
Align := alClient
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.

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: .

Cyf 31. Mai 2009 18:29

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.

mkinzler 31. Mai 2009 18:30

Re: Was bestimmt denn die Größe von alClient?
 
Es passt sich der Größe (Restgrößre) des Parent an.

hronny 31. Mai 2009 18:42

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:
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;
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.

hronny 31. Mai 2009 18:59

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:
...
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;
Es macht genau das was ich will. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.

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