AGB  ·  Datenschutz  ·  Impressum  







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

TVirtualStringTree mit TObjectList

Ein Thema von lowmax_5 · begonnen am 28. Feb 2019 · letzter Beitrag vom 1. Mär 2019
Antwort Antwort
bcvs

Registriert seit: 16. Jun 2011
736 Beiträge
 
Delphi 12 Athens
 
#1

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 07:24
Jeder Node des Vst sollte sein eigenes Data-Objekt haben.

Dann kannst du auch auf die Unterscheidung Detail1 und Detail2 verzeichten und hast einfach nur noch Detail.

Im GetText kannst du dann bei NodeLevel = 1 einfach die Werte des Data-Objekts des jeweiligen Nodes ausgeben und musst nicht auf AbsoluteIndex prüfen. Das funktioniert hier nämlich nicht so, wie du dir das vorgestellt hast. Die beiden letzten Detailzeiten wären AbsoluteIndex 4 und 5.
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 08:50
Vielen Dank für die Hilfe!

Zitat:
Im GetText kannst du dann bei NodeLevel = 1 einfach die Werte des Data-Objekts des jeweiligen Nodes ausgeben und musst nicht auf AbsoluteIndex prüfen. Das funktioniert hier nämlich nicht so, wie du dir das vorgestellt hast. Die beiden letzten Detailzeiten wären AbsoluteIndex 4 und 5.
Hier hatte ich einen Gedankenfehler. Ist nun natürlich logisch...


Aktuell hakt es nur beim zweiten Child. Wie bekomme ich da unterschiedliche Daten im zweiten Child angezeigt?
Ich hatte bereits auf ein Detail zurückgebaut und AbsoluteIndex entfernt...
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 09:03
Vllt hakt es noch am Verständnis, wie GetText aufgerufen wird? Nämlich für jeden Node extra. Es ist nicht notwendig, alle Nodes in der Funktion abzuarbeiten...
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 09:29
Aktuell fülle ich die Struktur mit:


Code:
  Data := TDataClass.Create;
  DataLst.Add(Data);
  Data.Zeitraum := '01/2019';
  vnHead:= AddVSTStructureHeadClass(vstSP, nil, TDataClass(DataLst[0]));

  Data.Detail.Caption:='Zeile1:';
  Data.Detail.Wert1 := 'Det1 - Wert1';
  Data.Detail.Wert2 := 'Det1 - Wert2';
  Data.Detail.Wert3 := 'Det1 - Wert3';
  AddVSTStructureDetailClass(vstSP, vnHead, DataLst[0].Detail);

  Data.Detail.Caption:='Zeile2:';
  Data.Detail.Wert1 := 'Det2 - Wert1';
  Data.Detail.Wert2 := 'Det2 - Wert2';
  Data.Detail.Wert3 := 'Det2 - Wert3';
  AddVSTStructureDetailClass(vstSP, vnHead, DataLst[0].Detail);

GetText:

Code:
procedure TForm5.vstSPGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
  Data: PDataClass;
  Detail : PDetailClass;

begin
      Detail := vstSP.GetNodeData(Node);

  if vstSP.GetNodeLevel(Node)=0 then
  begin
    Data := vstSP.GetNodeData(Node);
     Data := vstSP.GetNodeData(Node);
    case Column of
      0: begin
           CellText := Data.Zeitraum;
         end;
      1: CellText := '';
      2: CellText := '';
      3: CellText := '';
    end;
  end;

 if vstSP.GetNodeLevel(Node)=1 then
 begin
      case Column of
        0: CellText := Detail.Caption;
        1: CellText := Detail.Wert1;
        2: CellText := Detail.Wert2;
        3: CellText := Detail.Wert3;
      end;

    end;
end;


Im Ergebnis wird für beide Childs nur Zeile 2 angezeigt
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
736 Beiträge
 
Delphi 12 Athens
 
#5

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 09:42
Du musst für jeden Node eine eigene Instanz von TDataClass erzeugen und die auch in der DataLst speichern:
Delphi-Quellcode:
  Data := TDataClass.Create;
  DataLst.Add(Data);
  Data.Zeitraum := '01/2019';
  vnHead:= AddVSTStructureHeadClass(vstSP, nil, Data);

  Data := TDataClass.Create;
  DataLst.Add(Data);
  Data.Detail.Caption:='Zeile1:';
  Data.Detail.Wert1 := 'Det1 - Wert1';
  Data.Detail.Wert2 := 'Det1 - Wert2';
  Data.Detail.Wert3 := 'Det1 - Wert3';
  AddVSTStructureDetailClass(vstSP, vnHead, Data.Detail);

  Data := TDataClass.Create;
  DataLst.Add(Data);
  Data.Detail.Caption:='Zeile2:';
  Data.Detail.Wert1 := 'Det2 - Wert1';
  Data.Detail.Wert2 := 'Det2 - Wert2';
  Data.Detail.Wert3 := 'Det2 - Wert3';
  AddVSTStructureDetailClass(vstSP, vnHead, Data.Detail);
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 09:53
Argh , dass war es!
Kann im Nachgang auch nicht anders funktionieren...

Vielen Dank!!!
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
736 Beiträge
 
Delphi 12 Athens
 
#7

AW: TVirtualStringTree mit TObjectList

  Alt 1. Mär 2019, 09:59
Was mir noch aufgefallen ist: Das FreeNode des vst brauchst du nicht. Deine Data-Objekte werden ja von der DataLst verwaltet und freigegeben. Da ist es nicht gut, wenn der vst diese Objekte auf nil setzt.
  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 11:01 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