Autor Beitrag
susi59
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 24.10.09 19:17 
Hallo,

ich entwickle eine neue Komonente, die ich von TPanel ableite. Damit ich die Umrandung besser hinkriege, möchte ich eine TShape-Komponente nutzen. Diese wird während der create-Procedure erstellt.

Leider wird sie nicht angezeigt!
Die eingeschaften lassen sich im OI bearbeiten, aber sehen kann ich den Rahmen nicht.

Was habe ich vergessen bzw. was ist da falsch ?

Der Source-Auszug:

type
TMyPanel = class(TPanel)
private
FBorder:TShape;

protected
{ Protected-Deklarationen }
procedure Notification(AComponent:TComponent; Operation:TOperation); override;

public
{ Public-Deklarationen }
Constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
property Border: TShape read FBorder write FBorder;

end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Zusätzlich', [TMyPanel]);
end;

{ TMyPanel}
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited;
Color:={clWhite}$00FFFFFF;
Ctl3D:=False;
ParentCtl3D:=False;
BevelOuter:=bvNone;
BevelKind:=bkFlat;
BevelInner:=bvNone;
TabStop:=True;
Font.Size:=Size Div 2;

FBorder:=TShape.Create(Self);
FBorder.Top:=2;
FBorder.Left:=2;
FBorder.Width:=20;
FBorder.Height:=20;
FBorder.BringToFront;
end;

destructor TMyPanel.Destroy;
begin
FBorder.Free;
inherited;
end;


end.



Gruß Susi
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 24.10.09 19:24 
Versuch mal noch ein FBorder.Parent := self;
Damit weist du deine Komponente als Parent des Shapes zu.

_________________
PROGRAMMER: A device for converting coffee into software.
susi59 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mo 26.10.09 08:19 
Hat funktioniert,

ich danke für die Hilfe.
Eigentlich dachte ich, daß nach TComponent.create(self) dann schon die Eigenschaft TComponent.Parent gesetzt wird. Aber offensichtlich nicht immer, wenn mans selbst zur Laufzeit macht. Je nun, es geht ja jetzt.

Vielen Dank.
Gruß Susi
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.10.09 08:25 
Der Parameter beim Konstruktor Create ist der Owner, also der Besitzer, der sich darum kümmert, dass die Komponente freigegeben wird, wenn der Owner zerstört wird. Deshalb brauchst / solltest du FBorder auch nicht selbst mit Free freigeben. Anders sieht das natürlich aus, wenn eine Klasse keinen Owner hat oder du diesen nicht setzt.

Der Parent, also die Komponente, die in der Hierarchie der Darstellung darüber kommt (auf dem also die Komponente liegt), ist etwas ganz anderes. Das wird deshalb auch davon (von Owner) nicht gesetzt.