Создаю дочерний класс TMyTree от TVirtualDrawTree. Элементом данных является PTMyTreeNode. При обращении и попытках что-то изменить в массиве MyRule выдает ошибку Access violation. Почти уверен, что ошибка какая-то пустяковая, но найти и понять откуда она возникает не могу.
| Код | unit uMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, VirtualTrees, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; VirtualDrawTree1: TVirtualDrawTree; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
type TMyRule = record Name: string; Value: single; end;
type PTMyTreeNode = ^TMyTreeNode; TMyTreeNode = record MyRule : array of TMyRule; // ... end;
type TMyTree = class(TVirtualDrawTree) private public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TMyTree }
constructor TMyTree.Create(AOwner: TComponent); begin inherited; end;
destructor TMyTree.Destroy; begin
inherited; end;
procedure TForm1.Button1Click(Sender: TObject); var Tree: TMyTree; TreeNode: PVirtualNode; Data: PTMyTreeNode; begin Tree := TMyTree.Create(nil); TreeNode := Tree.AddChild(nil); Tree.NodeDataSize := SizeOf(Data); Data := Tree.GetNodeData(TreeNode);
SetLength(Data^.MyRule, 1); // <-- вот тут выдает ошибку Access violation Data^.MyRule[0].Name := 'MyName'; Data^.MyRule[0].Value := 6.52;
end;
end.
|
|