(CodeLib-Manager)
Registriert seit: 10. Jun 2002
4.648 Beiträge
Delphi XE Professional
|
Re: Treeview mit Spalten
21. Sep 2004, 13:47
Hi,
Konnte den Thread mal weitgehend aus dem Cache wiederherstellen:
Akut-Programming:
Zitat:
Wenn du einen Verzeichnisbaum darstellen willst, gibts unter D7 eigentlich Komponenten dafür. Weiß jetzt nur leider den Namen nicht. Bin z.Z. auf Arbeit und hier nutze ich (leider) D5. - D7 liegt zuhause. Schau doch einfach mal deine Komponentenpaletten durch, da solltes eigentlich was geben.
Igotcha :
Zitat:
Da kann ich nur den VirtualTreeview empfehlen!
Braucht zwar etwas, bis man die Methodik verstanden hat, aber wenn es dann soweit ist, möchtest Du das Ding nicht mehr missen - und super schnell ist er...
http://www.delphi-gems.com
Wenn Du Fragen hast, kannst Du Dich gerne an mich wenden, da ich mich selbst von vorne bis hinten durch das Teil durchgeackert habe. Das war nötig, da es die einzige Komponente war, die es mir erlaubte, meine "Vision" zu visualisieren
Gruß Igotcha
Alex_ITA01:
Zitat:
danke schön @Igotcha.
das ist genau das, was ich suchte.gefällt mir gut und wenn ich fragen hab,meld ich mich
MFG Alex
Zitat:
@igotcha...
ich habe mir das grade mal angeguckt.das ist schon eine ziemlich große Kompo
als anhang schicke ich mal ein programm mit, wie "meins" dann auch mal ungefähr aussehen soll.zumindest die funktionen sollten so sein.Weißt du wie das geht?denn die ganze virtual treeview kompo benötige ich nicht ganz.Ich will meine XML-Datei in einem Treeview darstellen und die Werte rechts ausgeben...
Gibts da ne "kleinere" Version der Kompo oder eine andere oder sollte ich doch lieber die VirtualTreeView nehmen?
MFG Alex
toms:
Zitat:
Bernhard Geyer:
Zitat:
Oder falls ein paar € kosten darf, kannst Du auch den Tree vom ElPack ausprobieren.
Ist ähnlicher dem normalen TTree von Delphi.
Igotcha :
Zitat:
Also die VTV-Komponente ist erstmal nicht groß, ganz im Gegenteil. Denn was "groß" aussieht, ist nur die "Visualisierungsfähigkeit" von VTV, denn vielmehr macht der nämlich fast gar nicht
Der methodische "Trick" beim Umgang mit VTV ist nämlich, dass der VTV gar nichts über die Daten weiss, die er verwendet. Er kennt nur die Abhängigkeiten der einzelnen Nodes voneinander in Form einer verketteten Liste - deshalb gibt es auch keinen IDE-Editor wie z.B. beim normalen TreeView.
Die Daten, die Du in Deinem Programm darstellen willst, musst Du in eine Record-Struktur packen. Vereinfacht gesagt teilst Du dem VTV dann beim "Aufbauen" des Trees nur mit
- erstelle mir einen Root-Node, verlinkt auf diesen Recordeintrag oder
- erstelle mir einen CHild-Node zum Root-NodeXY, verlinkt auf diesen Recordeintrag
Das ist u.a. auch ein Grund, warum das Teil so verdammt schnell ist, denn die Daten selbst verwaltest Du.
Mal ein ganz rudimentäres Beispiel (keine Funktionalität garantiert ):
Delphi-Quellcode:
type
PDataRecord= ^TDataRecord;
TDataRecord= record
strFilename: String;
iFilesize: double;
end;
...
procedure BuildTree(aTree: TVirtualStringTree);
var
aktueller_knoten, position : PVirtualNode;
myData: pDataRecord;
begin
aTree.Clear;
aTree.NodeDataSize:=sizeof(TDataRecord);
atree.BeginUpdate;
aktueller_knoten:=atree.AddChild(nil);
myData:=atree.GetNodeData(aktueller_knoten);
myData.strFileName:='Test'; // Wo Du jetzt diese Daten her bekommst, ist Dein Problem ;-)
myData.iFilesize:=10000;
atree.EndUpdate;
end;
Dann benötigst Du noch das Ereignis "onGetText", in dem Du die anzuzeigenden Daten formatieren kannst:
procedure TfrmMain.MYVTVGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
myData : pRecordData;
begin
myData:=MYVTV.GetNodeData(node);
if TextType=ttNormal then
begin
case Column of
0: CellText:=myData.strFilename;
1: CellText:=format('8.0n',[myData.iFileSize]);
end;
end;
Zitat:
Das ist kurz umrissen die grundsätzliche Funktionsweise des VTVs. Wie gesagt, im Vergleich zum normalen TreeView eine völlig andere Methodik, dafür aber unbeschreiblich mächtiger.
Gruß Igotcha
Thomas
|
|
Zitat
|