AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parent Problem bei eigener Komponente

Ein Thema von Stegi · begonnen am 11. Mär 2015 · letzter Beitrag vom 23. Mär 2015
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.202 Beiträge
 
Delphi 12 Athens
 
#15

AW: Parent Problem bei eigener Komponente

  Alt 18. Mär 2015, 07:27
Und so hast du dir eine wunderschöne Endlosschleife gebastelt.

MyPanel hat Panel1 als Owner
und Panel1 hat das MyPanel als Owner.

Als Ergebnis halten sich beide gegenseitig im Speicher und am Ende hat man ein Speicherleck,
genauso, als wenn MyPanel garkeinen Owner hätte und es Panel1 nicht gäbe.

Außerdem wird/kann CreateWnd mehrmals zur Laufzeit aufgerufen werden, womit es mehrere Panel1 geben könnte.




Die Variable Panel1 wird sonst nirgendwo anders verwendet und kann auch gut und gern einfach nur eine Lokale in CreateWnd sein.
Wozu das Create hier im Beispiel sein soll, weiß wohl keiner.

Delphi-Quellcode:
unit PanelUnit;

interface

uses ExtCtrls, Classes;

type
  TMyPanel = class(TPanel)
  private
    { private-Deklarationen }
  protected
    { protected-Deklarationen }
    //procedure CreateWnd(); override;
  public
    { public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { published-Deklarationen }
  end;

  procedure Register();

implementation

procedure Register();
begin
  RegisterComponents('oki', [TMyPanel]);
end;

{ TMyPanel }

//procedure TMyPanel.CreateWnd;
constructor TMyPanel.Create(AOwner: TComponent);
var
  Panel1: TPanel;
begin
  inherited;
  Panel1 := TPanel.Create(self);
  Panel1.Parent := self;
  if Assigned(Owner) then
    Owner.InsertComponent(Panel1);
end;

end.
Hab den Thread jetzt nicht mehr so ganz im Kopf, aber wozu soll das Panel1 jetzt eigentlich dienen?
Delphi-Quellcode:
unit PanelUnit;

interface

uses ExtCtrls, Classes;

type
  TMyPanel = class(TPanel)
  private
    { private-Deklarationen }
  protected
    { protected-Deklarationen }
    //procedure CreateWnd(); override;
  public
    { public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { published-Deklarationen }
  end;

  procedure Register();

implementation

procedure Register();
begin
  RegisterComponents('oki', [TMyPanel]);
end;

{ TMyPanel }

//procedure TMyPanel.CreateWnd;
constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  if Assigned(Owner) then
    Owner.RemoveComponent(Panel1);
end;

end.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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