![]() |
VirtualStringTree Spalten und Gruppierung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
da ich mich ja mit dem VirtualStringTree beschäftige ist es klar das nun die ganzen Anfänger Fragen kommen. Ich habe jetzt hier mal den Sourcecode von einem einfachem Beispiel eingefügt sowie einen Screenshot wie es aussieht nach dem man das VirtualStringTree mit dem Button1 gefüllt hat. Die VW Rubrik zeigt wie es schön wäre jedoch erhalte ich natürlich nicht den Markennamen da er im Abschnitt der daten nicht zugwiesen wird. Bei Ford klappt es natürlich aber ich möchte vermeiden das in der 1. Spalte der Gruppenname pro Zeile wiederholt wird. Ideen ?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, VirtualTrees; type TOAutos = class(TObject) public MarkenName: string; Modell: string; Farbe: string; end; TOAutoMarken = class(TOAutos) public end; TForm1 = class(TForm) vst: TVirtualStringTree; Button1: TButton; procedure Button1Click(Sender: TObject); procedure vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); procedure FormCreate(Sender: TObject); procedure vstDblClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var daten : TOAutos; gruppe : TOAutoMarken; node: PVirtualNode; begin gruppe := TOAutoMarken.Create; gruppe.MarkenName := 'VW'; node:=vst.AddChild(nil, gruppe); daten := TOAutos.Create; with daten do begin // MarkenName := 'VW'; Modell := 'Käfer'; Farbe := 'schwarz'; end; vst.AddChild(node, daten); daten := TOAutos.Create; with daten do begin // MarkenName := 'VW'; Modell := 'Golf'; Farbe := 'rot'; end; vst.AddChild(node, daten); daten := TOAutos.Create; with daten do begin // MarkenName := 'VW'; Modell := 'Polo'; Farbe := 'grün'; end; vst.AddChild(node, daten); gruppe := TOAutoMarken.Create; gruppe.MarkenName := 'Ford'; node:=vst.AddChild(nil, gruppe); daten := TOAutos.Create; with daten do begin MarkenName := 'Ford'; Modell := 'Cabri'; Farbe := 'orange'; end; vst.AddChild(node, daten); daten := TOAutos.Create; with daten do begin MarkenName := 'Ford'; Modell := 'Taunus'; Farbe := 'grau'; end; vst.AddChild(node, daten); daten := TOAutos.Create; with daten do begin MarkenName := 'Ford'; Modell := 'Fiesta'; Farbe := 'pink'; end; vst.AddChild(node, daten); end; procedure TForm1.FormCreate(Sender: TObject); begin vst.NodeDataSize:=sizeof(TOAutos); end; procedure TForm1.vstDblClick(Sender: TObject); var FocusedNode : PVirtualNode; daten : TOAutos; begin FocusedNode := vst.FocusedNode; if FocusedNode <> nil then begin daten := TOAutos(vst.GetNodeData(FocusedNode)^); if daten.Modell<> '' then begin showmessage('Sie haben die Marke: ' + daten.MarkenName + ' Modell: ' + daten.Modell + ' mit der Farbe ' + daten.Farbe + ' gewählt.'); end; end else begin ShowMessage('Bitte vorher einen Eintrag auswählen.'); end; end; procedure TForm1.vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var daten : TOAutos; begin daten:=TOAutos(vst.GetNodeData(node)^); daten.free; end; procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var daten: TOAutos; begin daten := TOAutos(vst.GetNodeData(node)^); case Column of 0: celltext:=daten.MarkenName; 1: celltext:=daten.Modell; 2: celltext:=daten.Farbe; end; end; end. |
Re: VirtualStringTree Spalten und Gruppierung
Es geht natürlich in dem ich in der Klasse TOAutos einfach einen Eintrag subMarkenName verwende. Aber eigentlich liegt der 'Fehler' ja hier:
Delphi-Quellcode:
Schmeisse ich hier die 0 raus habe ich in der 1. Spalte ( column[0] ) nur noch node als Eintrag was irgendwie auch Sinn macht :wink:
procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var daten: TOAutos; begin daten := TOAutos(vst.GetNodeData(node)^); case Column of 0: celltext:=daten.MarkenName; 1: celltext:=daten.Modell; 2: celltext:=daten.Farbe; end; end; |
Re: VirtualStringTree Spalten und Gruppierung
Zitat:
Delphi-Quellcode:
dürfte funktionieren
procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var daten: TOAutos; begin daten := TOAutos(vst.GetNodeData(node)^); case Column of 0: if vst.GetNodeLevel(node) = 0 then celltext:=daten.MarkenName; 1: celltext:=daten.Modell; 2: celltext:=daten.Farbe; end; end; |
Re: VirtualStringTree Spalten und Gruppierung
Danke. Die Idee war richtig aber musste ich noch ergänzen um natürlich die Beschriftung 'node' für die Subitems zu unterdrücken:
Delphi-Quellcode:
procedure TForm1.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var daten: TOAutos; begin daten := TOAutos(vst.GetNodeData(node)^); case Column of { 0: celltext:=daten.MarkenName; } 0: if vst.GetNodeLevel(node) = 0 then celltext:=daten.MarkenName else celltext:=''; 1: celltext:=daten.Modell; 2: celltext:=daten.Farbe; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz