type
{ TTreeData -- an object }
TTreeData = class
Field0: String;
Field1: String;
Field2: String;
Field3: String;
Field4: String;
Field5: String;
Field6: String;
public
constructor Create(AValue:integer);
end;
{ HVStr }
HVStr = class helper for TLazVirtualStringTree
procedure GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; // want to make this procedure as default,
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
end;
{ Tfrvst }
Tfrvst = class(TFrame)
vst: TLazVirtualStringTree;
procedure vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; var Allowed: Boolean);
procedure vstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure vstGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
procedure vstNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; const NewText: String);
end;
implementation
{$R *.lfm}
{ TTreeData }
constructor TTreeData.Create(AValue: integer);
begin
inherited Create;
Field0 := IntToStr(AValue);
Field1 := 'Col 1 ' + IntToStr(Avalue);
Field2 := 'Col 2 ' + IntToStr(Avalue);
Field3 := '(col 3)';
Field4 := '(col 4)';
Field5 := '(col 5)';
Field6 := '(col 6)';
end;
{ HVStr }
// like following way
procedure HVStr.GetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
begin
with TTreeData(Sender.GetNodeData(Node)^) do begin
case Column of
0: CellText := Field0;
1: CellText := Field1;
......
6: CellText := Field6;
end;
end;
end;
{ Tfrvst }
{ -------- mapping text & column --------------- }
// ---------- current this is fine, but must be assigned to OnGetText event.
procedure Tfrvst.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
begin
with TTreeData(Sender.GetNodeData(Node)^) do begin
case Column of
0: CellText := Field0;
1: CellText := Field1;
......
6: CellText := Field6;
end;
end;
end;
// -------- }
procedure Tfrvst.vstNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; const NewText: String);
var
Data: TTreeData;
begin
with TTreeData(Sender.GetNodeData(Node)^) do begin
case Column of
0: Data.Field0 := NewText;
1: Data.Field1 := NewText;
.....
6: Data.Field6 := NewText;
end;
end;
end;