AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree Spalten und Gruppierung

Ein Thema von berndn · begonnen am 1. Dez 2008 · letzter Beitrag vom 1. Dez 2008
Antwort Antwort
berndn

Registriert seit: 4. Nov 2008
Ort: Duisburg
18 Beiträge
 
Delphi 2007 Professional
 
#1

VirtualStringTree Spalten und Gruppierung

  Alt 1. Dez 2008, 10:31
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.
Miniaturansicht angehängter Grafiken
classwithoutmarkenname_907.jpg  
  Mit Zitat antworten Zitat
berndn

Registriert seit: 4. Nov 2008
Ort: Duisburg
18 Beiträge
 
Delphi 2007 Professional
 
#2

Re: VirtualStringTree Spalten und Gruppierung

  Alt 1. Dez 2008, 10:47
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:
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;
Schmeisse ich hier die 0 raus habe ich in der 1. Spalte ( column[0] ) nur noch node als Eintrag was irgendwie auch Sinn macht
  Mit Zitat antworten Zitat
itashadow

Registriert seit: 22. Apr 2008
Ort: Hattingen
86 Beiträge
 
#3

Re: VirtualStringTree Spalten und Gruppierung

  Alt 1. Dez 2008, 10:58
Zitat von berndn:
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:
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;
Schmeisse ich hier die 0 raus habe ich in der 1. Spalte ( column[0] ) nur noch node als Eintrag was irgendwie auch Sinn macht
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: if vst.GetNodeLevel(node) = 0 then celltext:=daten.MarkenName;
    1: celltext:=daten.Modell;
    2: celltext:=daten.Farbe;
  end;

end;
dürfte funktionieren
  Mit Zitat antworten Zitat
berndn

Registriert seit: 4. Nov 2008
Ort: Duisburg
18 Beiträge
 
Delphi 2007 Professional
 
#4

Re: VirtualStringTree Spalten und Gruppierung

  Alt 1. Dez 2008, 11:12
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;
  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 00:30 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