title: Access Violation when assigning string in InitNode event of TVirtualStringTree
body: <p>The given code which works without any problems in Delphi 2007. However in Delphi 2009 I am getting an exception. </p>
  
  <blockquote>
    <p>Access violation shows read of address $00000000.</p>
  </blockquote>
  
  <p>The problem exists only when assigning string, it works for numbers.</p>
  
  <p>Also, when I am assigning <code>Data.Text</code> manually via the debugger options I am getting no AV - it works.</p>
  
  <p>Honestly I am lost, anyone could help me with this please?</p>
  
  <pre><code>unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, VirtualTrees, StdCtrls;
  
  type
    TTest = record
      Text: String;
      Number: Integer;
    end;
    PTest = ^TTest;
  
  type
    TTestArray = array of TTest;
  
  type
    TForm1 = class(TForm)
      VirtualStringTree1: TVirtualStringTree;
      Button1: TButton;
      procedure FormCreate(Sender: TObject);
      procedure VirtualStringTree1InitNode(Sender: TBaseVirtualTree; ParentNode,
        Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
      procedure Button1Click(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
    TestArray: array of TTest;
  
  implementation
  
  {$R *.dfm}
  
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    SetLength(TestArray, 1);
    TestArray[0].Text := 'test';
    TestArray[0].Number := 12345;
    VirtualStringTree1.AddChild(VirtualStringTree1.RootNode, @TestArray[0]);
  
  end;
  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    VirtualStringTree1.NodeDataSize := SizeOf(TTest);
  
  end;
  
  procedure TForm1.VirtualStringTree1InitNode(Sender: TBaseVirtualTree;
    ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
  var
    Data: PTest;
    NodeData: PPointer;
  begin
    Data := Sender.GetNodeData(Node);
    NodeData := Sender.GetNodeData(Node);
    Data.Number := PTest(NodeData^)^.Number;
    Data.Text := PTest(NodeData^)^.Text; //crash here!
  end;
  
  end.
  </code></pre>