Einzelnen Beitrag anzeigen

berndn

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

VirtualStringTree Spalten und Gruppierung

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