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 Treeview zur Laufzeit auf einem Panel erzeugen (https://www.delphipraxis.net/47096-treeview-zur-laufzeit-auf-einem-panel-erzeugen.html)

Zerolith 6. Jun 2005 17:57


Treeview zur Laufzeit auf einem Panel erzeugen
 
Morgen!

verkopf mich jetzt schon seit 3 Stunden damit. Wenn ich das Treeview direkt auf dem Formular erzeuge gehts - aber auf dem Panel nicht. Kann mir jemand helfen?

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls;

Type myPanel = Class(TPanel)
  PRIVATE
    FTreeView: TTreeView;
  PUBLIC
    Constructor Create(AOwner: TComponent); OVERRIDE;
  End;

Type
  TForm1 = Class(TForm)
    Procedure FormCreate(Sender: TObject);
  PRIVATE
    FMyPanel: myPanel;
  PUBLIC

  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  FMyPanel := myPanel.Create(Self);
End;

{ myPanel }

Constructor myPanel.Create(AOwner: TComponent);
Begin
  Inherited;
  FTreeView := TTreeView.Create(Self);
  FTreeView.Parent := Self;
  FTreeView.Align := alClient;
  FTreeView.Items.AddNode(Nil, Nil, 'test', Nil, naAdd);
End;

End.
DAnke, Daniel

Kroko1999 6. Jun 2005 17:59

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
Delphi-Quellcode:
Constructor myPanel.Create(AOwner: TComponent);
Begin
  Inherited;
  FTreeView := TTreeView.Create(AOwner); //Hier ändern
  FTreeView.Parent := Self;
  FTreeView.Align := alClient;
  FTreeView.Items.AddNode(Nil, Nil, 'test', Nil, naAdd);
End;

Zerolith 6. Jun 2005 18:20

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
klappt leider nicht - hab i au scho probiert

SirThornberry 6. Jun 2005 18:43

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
das klappt schon, nur siehst du davon nix weil du deinem panel (FMyPanel) im Create deines Forms keinen Parent zuordnest. Damit liegt zwar das Tree auf dem Panel aber das Panel nicht auf dem Form...

alcaeus 6. Jun 2005 19:02

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
Zitat:

Zitat von Kroko1999
Delphi-Quellcode:
FTreeView := TTreeView.Create(AOwner); //Hier ändern

Nicht unbedingt. Wenn ich will, dass die TreeView beim Zerstoeren des Owners des Panels zerstoert wird, dann lasse ich AOwner drin. Der Owner einer Komponente hat nichts mit dem Parent zu tun. Owner bestimmt nur, ob beim Zerstoeren einer bestimmten Komponente (also dem Owner) auch die eigene Komponente zerstoert werden soll. Der Parent bestimmt hingegen, auf welchem Control die Komponente gezeichnet wird.
Setze also den Parent des Panels auf Form1, und das Panel wird auf dem Form liegen. Nun das Panel als Parent der Treeview angeben, und die TV wird auf dem Panel gezeichnet werden ;)

Greetz
alcaeus

Zerolith 6. Jun 2005 19:32

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
hmm - also irgendwie hab ich immer noch den Fehler:

Zitat:

---------------------------
Project1
---------------------------
Element '' hat kein übergeordnetes Fenster.
---------------------------
OK
---------------------------
hab ich was von euch überlesen?

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls;

Type myPanel = Class(TPanel)
  PRIVATE
    FTreeView: TTreeView;
  PUBLIC
    Constructor Create(AOwner: TComponent); OVERRIDE;
  End;

Type
  TForm1 = Class(TForm)
    Procedure FormCreate(Sender: TObject);
  PRIVATE
    FMyPanel: myPanel;
  PUBLIC

  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  FMyPanel := myPanel.Create(Self);
  FMyPanel.Parent := Self;
End;

{ myPanel }

Constructor myPanel.Create(AOwner: TComponent);
Begin
  Inherited;
  FTreeView := TTreeView.Create(Self);
  FTreeView.Parent := Self;
  FTreeView.Align := alClient;
  FTreeView.Items.AddNode(Nil, Nil, 'test', Nil, naAdd);
End;

End.

Christian Seehase 6. Jun 2005 19:51

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
Moin Daniel,

Du darfst den Parent erst setzen, wenn das Panel erzeugt wurde.
Such' hier mal nach Hier im Forum suchenCreateWnd.
In dieser Methode sollte das gehen. Du musst es Dir allerdings am Besten so einbauen, dass diese Zuweisung nur einmal erfolgt. CreateWnd wird mehrfach aufgerufen.

Zerolith 6. Jun 2005 20:01

Re: Treeview zur Laufzeit auf einem Panel erzeugen
 
ok - da muss man erst mal draufkommen...

habs jetzt etwas anders gelöst: eine weitere Procedure in MyPanel die das TreeView füllt - geht jetzt einwandfrei

Danke an alle


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