I use the Zarko Gajic Store More (user) data in the Node tree from the tree> to add additional rows for each Node element, but I found that if my application has been idle for a long time, the values that I saved in the custom nodes of the tree disappear.
This is what my custom treenode looked like when I left yesterday

Here's what it looks like this morning (note that fMyProperty is now empty)

, , 1 . . , , , 30 .
, , , , , , . , FItemId , , , "" Treeview , , Tree node.
, .
, , Treenode, , , .
, ?
unit Test04Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls;
type
TMyTreeNode = class(TTreeNode)
private
fMyProperty : string;
public
property MyProperty : string read fMyProperty write fMyProperty;
end;
TForm1 = class(TForm)
TreeView1: TTreeView;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
fTreeView1_Selected: TMyTreeNode;
property TreeView1_Selected : TMyTreeNode read fTreeView1_Selected;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
tn : TTreeNode;
cnt : integer;
begin
//fill some items
TreeView1.Items.Clear;
for cnt := 0 to 9 do
begin
tn := TreeView1.Items.AddChild(nil, IntToStr(cnt));
//add default MyProperty values
TMyTreeNode(tn).MyProperty := 'this is node ' + IntToStr(cnt);
end;
end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
fTreeView1_Selected := TMyTreeNode(Node);
StatusBar1.Panels[0].Text := TreeView1_Selected.MyProperty;
end;
procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView; var NodeClass: TTreeNodeClass);
begin
NodeClass := TMyTreeNode;
end;
end.
Delphi XE6 Windows 2012 R2, Debug Win32 build, Win64.