AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Komponente TStringTree (=TVirtualStringTree komfortabel)
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente TStringTree (=TVirtualStringTree komfortabel)

Ein Thema von Lemmy1 · begonnen am 29. Apr 2008 · letzter Beitrag vom 5. Mai 2008
Antwort Antwort
Benutzerbild von Lemmy1
Lemmy1
Registriert seit: 28. Nov 2004
Hi,

ich wollte gerne einmal eine Komponente vorstellen, die in den letzten Monaten als "Abfallprodukt" entstanden ist. Ziel des Ganzen war, die Komponente TVirtualStringTree komfortabler zu machen.

TVirtualStringTree ist eine Tree-List-Komponente, die extrem leistungsfähig und schnell ist. Nachteil allerdings ist (meiner Meinung nach), dass die virtuelle Programmierung leider total ätzend ist, da man immer so viel housekeeping selbst machen muss. Da man aber in den seltensten Fällen einen Tree mit Millionen Einträgen hat, wäre doch meistens eine OOP Komponente schöner. Daher habe ich diese Adapterkomponente geschrieben, die nach aussen eine schönes Objektmodell bietet und nach innen die Virtual Tree View benutzt.

Ich führ im Folgenden ein paar Beispiele vor, wie sie benutzt wird. Ich möchte aber anmerken, dass die Komponente NICHT fertig ist sondern genau die Funktionen spendiert bekommen hat, die ich gebraucht hab. Weitere Funktionenalitäten hinzu zu fügen ist allerdings meist trivial, da man nur die entsprechenden Funktionen des inneren Trees publizieren muss.

Anlegen von Spalten (habe noch keinen Designer geschrieben, aber das manuelle Anlegen hat eh den Vorteil, dass man später Objektinstanzen weiter verwenden kann):
Delphi-Quellcode:
FTreeColumns.ID := StringTree.Columns.Add('ID', 80);
FTreeColumns.Name := StringTree.Columns.Add('Name', 120);
FTreeColumns.Rand := StringTree.Columns.Add('Random', 100);
(FTreeColumns bezeichnet hier eine Membervariable des Form, die alle Spalten in einem Record hält)

Anlegen von Wurzelknoten:
Delphi-Quellcode:
var Node: TStringTreeNode;
...
Node := StringTree.Nodes.Add;
Node[FTreeColumns.ID] := IntToStr(I);
Node[FTreeColumns.Name] := 'Knoten mit Nummer ' + IntToStr(I);
Node[FTreeColumns.Rand] := IntToStr(Random(I));
Anlegen von Unterknoten:
Delphi-Quellcode:
var SubNode: TStringTreeNode;
...
SubNode := Node.Nodes.Add;
SubNode[FTreeColumns.ID] := IntToStr(J);
Ermitteln der markierten Knoten der ersten Ebene:
Delphi-Quellcode:
var Node1: TStringTreeNode;
...
Selected := '';
for Node1 in StringTree.Nodes do
begin
  if Node1.Selected then
  begin
    Selected := Selected + Node1[FTreeColumns.ID] + ', ';
  end;
end;

Ich wollte das hier einmal posten, da ich gerne wissen würde, ob es einen Bedarf an einer solchen Open-Source Komponente gibt (oder bin ich der einzige, der den Virtual Tree unkomfortabel findet ) Wenn der Bedarf da ist, dann könnte man ein SourceForge-Projekt dazu einrichten und das dann gemeinsam weiterentwickeln.

Angehängt habe ich den Quellcode der Komponente (einfach in einem Package registrieren) sowie ein Demoprojekt, das einige der Features zeigt.

Achja: Das ganze ist für Delphi 2006 native entwickelt und hat ausser dem Virtual Tree keine weiteren Abhängigkeiten. Ich verwende ausschließlich Unicodestrings, von daher sollte Delphi 2008 einen kleinen Performancesprung bringen (wenn es denn einmal kommt).

Freue mich auf Feedback.
Angehängte Dateien
Dateityp: zip stringtreeexample_127.zip (421,1 KB, 73x aufgerufen)
Dateityp: pas stringtree_107.pas (46,0 KB, 61x aufgerufen)
www.nemu.com - The N64 Emulator
 
Benutzerbild von uligerhardt
uligerhardt

 
Delphi 2007 Professional
 
#2
  Alt 29. Apr 2008, 11:55
Zitat von Lemmy1:
Ich wollte das hier einmal posten, da ich gerne wissen würde, ob es einen Bedarf an einer solchen Open-Source Komponente gibt (oder bin ich der einzige, der den Virtual Tree unkomfortabel findet )
Den Wunsch nach einer einfacher zu bedienenden VT-Variante hatte ich auch schon gelegentlich. Ich war bloß immer zu faul, endlich mal etwas Generisches zu stricken.
Uli Gerhardt
  Mit Zitat antworten Zitat
Nuclear-Ping
 
#3
  Alt 29. Apr 2008, 12:15
Keine Ahnung, arbeite schon seit Jahren mit dem VST und fand da noch nie was umständliches oder schweres dran, wenn man das Konzept verinnerlicht hat. Kann dem daher auf den ersten Blick erstmal nichts abgewinnen. Mal so von der Contra-Seite ...
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

 
Delphi 2007 Professional
 
#4
  Alt 29. Apr 2008, 12:49
Zitat von Nuclear-Ping:
Keine Ahnung, arbeite schon seit Jahren mit dem VST und fand da noch nie was umständliches oder schweres dran, wenn man das Konzept verinnerlicht hat. Kann dem daher auf den ersten Blick erstmal nichts abgewinnen. Mal so von der Contra-Seite ...
Manchmal hat man (habe ich ) halt Fälle, wo man den VST z.B. wegen seiner Konfigurierbarkeit braucht, aber trotzdem völlig "unvirtuell" 17 Knoten mit je 3 Strings anzeigen will. Da dann immer mit TNodeData, OnGetText und OnInitNode rumzuhantieren ist schon mit Kanonen auf Spatzen geschossen.
Uli Gerhardt
  Mit Zitat antworten Zitat
generic

 
Delphi XE5 Professional
 
#5
  Alt 29. Apr 2008, 13:03
Ich denke das Stammtischvideo zeigt sehr gut, dass der VST nicht kompliziert ist.
Vor allem wenn man dann nur noch mit Objekten arbeitet.
Diese liegen in den Anwendungen eh vor.
  Mit Zitat antworten Zitat
Benutzerbild von Lemmy1
Lemmy1

 
Delphi 2006 Professional
 
#6
  Alt 29. Apr 2008, 19:36
Zitat von generic:
Ich denke das Stammtischvideo zeigt sehr gut, dass der VST nicht kompliziert ist.
Finde halt, dass da nicht gerade der sauberste Code bei rauskommt. Aber ist wohl Geschmackssache
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#7
  Alt 29. Apr 2008, 21:29
Die Idee der Vereinfachung finde ich gut
Nur schade, dass die Komponente unter älteren Delphi Versionen nicht installierbar ist.
Könntest du sie nicht mit $IFDEF zu älteren Versionen kompatibel machen?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Lemmy1
Lemmy1

 
Delphi 2006 Professional
 
#8
  Alt 2. Mai 2008, 12:44
Hrm ich hab noch Delphi 2005 (würg) und Delphi 6 rumliegen....aber irgendwie fehlt mir dazu ehrlich gesagt etwas die Motivation

Aber vielleicht komm ich ja mal dazu
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#9
  Alt 5. Mai 2008, 22:08
Zitat von Lemmy1:
Aber vielleicht komm ich ja mal dazu
Wäre super!
Thomas
  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 07:49 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