Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualListView / VirtualStringTree - Knoten benötigt Klasse (https://www.delphipraxis.net/104707-virtuallistview-virtualstringtree-knoten-benoetigt-klasse.html)

MrKnogge 9. Dez 2007 17:39


VirtualListView / VirtualStringTree - Knoten benötigt Klasse
 
Hallo,

ich benötige bei einem VirtualStringTree eine Stringlist für jeden einzelnen Knoten. Nun dachte ich, ich könnes es ganz einfach lösen:

Delphi-Quellcode:
type
  PTreeData = ^TTreeData;
  TTreeData = record
    fCaption: string;
    fStringList: TStrings;
  end;

...

function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
  ARecord: TTreeData): PVirtualNode;
var
  Data: PTreeData;
begin
  result := AVST.AddChild(ANode);
  Data := AVST.GetNodeData(result);
  Avst.ValidateNode(result, false);
  Data^.fCaption:= ARecord.fCaption;
  Data^.fStringList:= ARecord.fStringList;
end;

procedure TForm1.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
var
  Data: PTreeData;
begin
  Data := VirtualStringTree1.GetNodeData(Node);
  if Assigned(Data) then begin
    Data.fCaption := '';
    Data.fStringList.Free;
  end;
end;

...

// Beispiel aufruf zum Erzeugen eines neuen Eintrags:
procedure TForm1.FormCreate(Sender: TObject);
var
  TreeData: TTreeData;
  pvnode: PVirtualNode;
begin
  pvnode := VirtualStringTree1.RootNode;
  TreeData.fCaption:= 'Test';
  if not Assigned(TreeData.fStringList) then
    TreeData.fStringList:= TStringlist.Create;
  TreeData.fStringList.Add('Test1');
  AddVSTStructure(VirtualStringTree1, pvnode, TreeData);
end;
Doch diese Variante funktioniert nicht, wo liegt mein Fehler ?

stifflersmom 9. Dez 2007 17:42

Re: VirtualListView / VirtualStringTree - Knoten benötigt Kl
 
Vielleicht fStringList als TStringList deklarieren?

Moin

MrKnogge 9. Dez 2007 17:47

Re: VirtualListView / VirtualStringTree - Knoten benötigt Kl
 
Das ändert auch nichts, in der Regel deklariert man Stringlisten ja immer als TStrings.

generic 9. Dez 2007 17:58

Re: VirtualListView / VirtualStringTree - Knoten benötigt Kl
 
nodedatasize nicht gesetzt?

Delphi-Quellcode:
VirtualStringTree1.NodeDataSize:=SizeOf(TTreeData);
Delphi-Quellcode:
TreeData.fStringList:= TStringlist.Create;
wird bei mir nicht aufgerufen. ggf. mal das if entfernen.

Hawkeye219 9. Dez 2007 17:59

Re: VirtualListView / VirtualStringTree - Knoten benötigt Kl
 
Hallo Christian,

der lokale Record TreeData in der FormCreate-Methode dürfte - abgesehen vom String-Element - nicht initialisiert sein und Zufallswerte enthalten. Die nachfolgende Abfrage mit Assigned() könnte somit fehlschlagen und keine Stringliste erzeugen. Lasse die Abfrage weg, dann sollte es funktionieren.

Gruß Hawkeye

MrKnogge 9. Dez 2007 18:12

Re: VirtualListView / VirtualStringTree - Knoten benötigt Kl
 
@generic
Doch NodeDataSize habe ich gesetzt.

@Hawkeye
Das wars ! Ohne Assigned funktioniert es einwandfrei (oder eben mit nil initialiseren).


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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