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 Wie baue ich eine Klasse die zwei Listviews enthält? (https://www.delphipraxis.net/67313-wie-baue-ich-eine-klasse-die-zwei-listviews-enthaelt.html)

backdraft 12. Apr 2006 22:29


Wie baue ich eine Klasse die zwei Listviews enthält?
 
Hallo,

ich brauche eine Klasse die zwei Listviews enthält. Wie kann ich verhindern, das man die beiden Listviews im Designer auswählen kann. vlt ist mein Ansatz ja auch ganz falsch.

Ich habe bis jetzt folgendes:

Delphi-Quellcode:
type
  TTestListView = class(TWinControl)
  private
   lv1: TListView;
   lv2: TListView;
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
    procedure CreateWnd; override;
  public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TTestListView]);
end;

constructor TTestListView.Create(AOwner: TComponent);
begin
  inherited;
  lv1 := TListView.Create(AOwner);
  lv1.Tag := 0;
  lv2 := TListView.Create(AOwner);
  lv2.Tag := 0;
end;

procedure TTestListView.CreateWnd;
begin
  inherited;

  IF lv1.Tag = 0 THEN BEGIN
    lv1.Parent := Self;
   END;

  IF lv2.Tag = 0 THEN BEGIN
    lv2.Parent := Self;
  END;

end;

destructor TKDRListViewCards.Destroy;
begin
  IF lv1 <> nil THEN lv1.Free;
  IF lv2 <> nil THEN lv2.Free;
  inherited;
end;

mkinzler 13. Apr 2006 05:52

Re: Wie baue ich eine Klasse die zwei Listviews enthält?
 
Im Kontruktor:
Zitat:

Delphi-Quellcode:
lv1 := TListView.Create(AOwner);

durch
Delphi-Quellcode:
lv1 := TListView.Create(self);
und sychron für lv2.

den Destruktor kannst du weglassen. Da das Bereinigen ja vom Owner erledigt wird.

Corpsman 13. Apr 2006 06:51

Re: Wie baue ich eine Klasse die zwei Listviews enthält?
 
Bin mir net ganz sicher, aber so wie du das momentan hast müste es stimmen.

Soviel ich weis must du ne Variable unter Public bzw. Published eintragen das man sie von ausen überhaupt sieht.

Du hast sie Als Privat deklariert dann sieht man die eh net.


Variablen die in Published eingetragen werden kann glaubig der Objectinspector nachher anzeigen.

backdraft 13. Apr 2006 07:29

Re: Wie baue ich eine Klasse die zwei Listviews enthält?
 
JO es war der Create(Self) :-)
Danke,
aber das mit dem Destroy hab ich nicht verstanden. Wieso brauche ich den nicht?

JasonDX 13. Apr 2006 07:40

Re: Wie baue ich eine Klasse die zwei Listviews enthält?
 
Zitat:

Zitat von backdraft
aber das mit dem Destroy hab ich nicht verstanden. Wieso brauche ich den nicht?

Delphi ist da mit der VCL etwas entgegenkomment. Beim Erstellen des Objektes gibt man einen Owner, Besitzer an. D.h. jede Klasse (ab TComponent) hat eine Liste mit den Objekten, die "ihr gehoeren". Guckt man sich nun den Destruktor von TComponent an, so werden alle Objekte in dieser Liste freigegeben.
So passiert es auch mit deinen Listviews: Sie werden in die Liste der Komponenten eingetragen, die deine Klasse besizt (und unter Delphi-Referenz durchsuchenComponents zu erreichen ist). Im Destruktor deiner Klasse wird dann auch der Destruktor von TComponent ausgefuehrt, und dort werden die Komponenten dann freigegeben.

greetz
Mike

Sascha L 13. Apr 2006 08:35

Re: Wie baue ich eine Klasse die zwei Listviews enthält?
 
Einfach ausgedrückt: Wenn du die ListViews auf's Formular packst, ist der Owner das Formular. Wenn das Formular zerstört wird, wird auch somit alles, was auf ihm ist, wieder freigegeben. Somit auch deine ListViews.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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