AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Erweiterte TreeNodes in TreeView-Komponente einfügen?
Thema durchsuchen
Ansicht
Themen-Optionen

Erweiterte TreeNodes in TreeView-Komponente einfügen?

Ein Thema von mjenke · begonnen am 6. Apr 2006 · letzter Beitrag vom 6. Apr 2006
Antwort Antwort
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 07:39
Guten Morgen, alle miteinander!


Ich habe gestern versucht, eine eigene TreeNode-Klasse in einer TreeView-Komponente zu nutzen, bin dabei aber auf Probleme gestoßen.

Nehmen wir einmal an, ich hätte meine TreeNode-Klasse folgendermaßen aufgebaut:

Delphi-Quellcode:
type

[...]

TTreeNodeErw = class ( TTreeNode )
  private
    FID: Integer;
  public
    constructor Create ( AOwner: TTreeNodes; ID: Integer );
    property ID: Integer read FID write FID;
end;

[...]

implementation

[...]

{ TTreeNodeErw }

constructor TTreeNodeErw.Create ( AOwner: TTreeNodes; ID: Integer );
begin
  inherited Create ( AOwner );
  FID := ID;
end;
(Ist jetzt aus dem Kopf geschrieben, also nicht zu ernst nehmen).

Sinn ist es in diesem speziellen Fall, in meiner TreeView-Komponente direkt eine Baumansicht von Datenbankeinträgen zu erzeugen, die eben über die ID (FID) eindeutig angesprochen werden können. Das Modell wäre selbstverständlich erweiterbar, so dass man noch mehr Informationen direkt in den Node mit hineinpackt.

Ich kann einen TreeNode dieser Klasse auch direkt in eine TreeView-Komponente einfügen:

TreeView.Items.Add ( TTreeNodeErw.Create ( TreeView.Items, 1 ), 'Knoten 1' ); Das funktioniert. Aber wenn ich den Knoten anwähle, um mir beispielsweise die ID anzeigen zu lassen:

ShowMessage ( IntToStr ( TTreeNodeErw ( TreeView.Selected ).ID ) ); wird mir ein Zufallswert angezeigt, der irgendwo im System herumfliegt. Der TreeView scheint also wirklich nur den TTreeNode-Teil meiner TTreeNodeErw-Klasse zu verwalten. Der Rest scheint verloren zu gehen.

Jetzt meine eigentliche Frage:

Kennt jemand eine Möglichkeit, eine solche erweiterte TTreeNode-Klasse direkt in einem TTreeView zu benutzen, ohne dass man auch diesen (und damit auch die TTreeNodes-Klasse und alles, was damit zusammenhängt), ebenfalls anpacken und erweitern zu müssen?




Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 07:54
Guten Morgen Matthias.

TTreeNode kapselt das Windows-interne Item eines TreeView-Controls, erweitern kannst du da nichts. Du musst die Eigenschaft Data benutzen um die Verbindung zwischen TreeNode und dem Datensatz nicht abreißen zu lassen. Oft reicht es, wenn du die RecordNo des DataSet dort ablegst.

Grüße vom marabu
  Mit Zitat antworten Zitat
mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#3

Re: Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 10:53
Hallo, Marabu!


Schade, dass es nicht funktioniert... Aber Dein Hinweis auf die Data-Eigenschaft hilft mir sehr! Vielen Dank für die schnelle Antwort!




Matthias
Matthias Jenke
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 13:49
Hi,

du könntest natürlich noch eine neue Klasse von TCustomTreeView ableiten, die dann deine speziellen TreeNodes verwendet.

Persönlich würde ich aber auch den Weg von marabu nehmen und die Eigenschaft Data benutzen.
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 14:28
So geht es :
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TTreeNodeEx = class(TTreeNode)
  private
    _Beschreibung: String;
  protected
  public
  published
    property Beschreibung: String read _Beschreibung write _Beschreibung;
  end;
  
  TForm1 = class(TForm)
    Button1: TButton;
    TreeView1: TTreeView;
    StatusBar1: TStatusBar;
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure FormCreate(Sender: TObject);
    procedure TreeView1CreateNodeClass(Sender: TCustomTreeView;
      var NodeClass: TTreeNodeClass);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
  var NodeClass: TTreeNodeClass);
begin
  NodeClass := TTreeNodeEx;
end;

procedure TForm1.FormCreate(Sender: TObject);
var lvTreeNodeEx: TTreeNodeEx;
begin
  lvTreeNodeEx := Self.TreeView1.Items.AddFirst(nil, 'Test 1') as TTreeNodeEx;
  lvTreeNodeEx.Beschreibung := 'Beschreibung 1';
  lvTreeNodeEx := Self.TreeView1.Items.AddFirst(nil, 'Test 2') as TTreeNodeEx;
  lvTreeNodeEx.Beschreibung := 'Beschreibung 2';
  lvTreeNodeEx := Self.TreeView1.Items.AddFirst(nil, 'Test 3') as TTreeNodeEx;
  lvTreeNodeEx.Beschreibung := 'Beschreibung 3';
  lvTreeNodeEx := Self.TreeView1.Items.AddFirst(nil, 'Test 4') as TTreeNodeEx;
  lvTreeNodeEx.Beschreibung := 'Beschreibung 4';
  lvTreeNodeEx := Self.TreeView1.Items.AddFirst(nil, 'Test 5') as TTreeNodeEx;
  lvTreeNodeEx.Beschreibung := 'Beschreibung 5';
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  if Self.TreeView1.Selected <> nil
    then StatusBar1.SimpleText := (Self.TreeView1.Selected as TTreeNodeEx).Beschreibung
    else StatusBar1.SimpleText :='';
end;

end.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Erweiterte TreeNodes in TreeView-Komponente einfügen?

  Alt 6. Apr 2006, 18:19
Jetzt bin ich platt und das ist selten. Diese Erweiterung wurde irgendwann nach D5 gemacht und ich habe sie nie bemerkt.

Vielen Dank, Heffalump.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:10 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