unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, VirtualTrees, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
PData = ^TData;
TData = record
Fnombre: String;
Fapellido: String;
Fedad: String;
Ftrabajando: String;
FImageIndex: Integer;
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
ImageList1: TImageList;
VST: TVirtualStringTree;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
var ImageIndex: Integer);
procedure VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
procedure VSTLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
procedure VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
private
{ private declarations }
public
{ public declarations }
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
procedure TForm1.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean;
var ImageIndex: Integer);
var
Data: PData;
begin
if Column = 0 then
begin
Data := VST.GetNodeData(Node);
ImageIndex := Data^.FImageIndex;
procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: String);
var
Data: PData;
begin
// si no existen estos codes, el resultado sera el texto "NODE"
Data := VST.GetNodeData(Node);
case Column of
//0: CellText := '';
0: CellText := Data^.Fnombre;
1: CellText := Data^.Fapellido;
2: CellText := Data^.Fedad;
3: CellText := Data^.Ftrabajando;
//4: CellText := Data^.FImageIndex;
procedure TForm1.VSTLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
Data: Pdata;
Len: Integer;
begin
Data := VST.GetNodeData(Node);
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fnombre, Len);
Stream
.Read
(PChar
(Data^
.Fnombre
)^
, Len
* SizeOf(Data^
.Fnombre
[1]));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fapellido, Len);
Stream
.Read
(PChar
(Data^
.Fapellido
)^
, Len
* SizeOf(Data^
.Fapellido
[1]));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fedad, Len);
Stream
.Read
(PChar
(Data^
.Fedad
)^
, Len
* SizeOf(Data^
.Fedad
[1]));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Ftrabajando, Len);
Stream
.Read
(PChar
(Data^
.Ftrabajando
)^
, Len
* SizeOf(Data^
.Ftrabajando
[1]));
// SEGUNDO INTENTO, Obtenido de buscar en la web
{Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fnombre, Len);
Stream
.Read
(PChar
(Data^
.Fnombre
)^
, Len
* SizeOf(Char
));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fapellido, Len);
Stream
.Read
(PChar
(Data^
.Fapellido
)^
, Len
* SizeOf(Char
));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Fedad, Len);
Stream
.Read
(PChar
(Data^
.Fedad
)^
, Len
* SizeOf(Char
));
Stream
.Read
(Len
, SizeOf(Len
)); SetLength(Data^.Ftrabajando, Len);
Stream
.Read
(PChar
(Data^
.Ftrabajando
)^
, Len
* SizeOf(Char
));}
// PRIMER INTENTO, SACADO DE http://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus
{Stream
.read
(Len
, SizeOf(Len
)); SetLength(Data^.Fnombre, Len);
Stream.read(PChar(Data^.Fnombre)^, Len);
Stream
.read
(Len
, SizeOf(Len
)); SetLength(Data^.Fapellido, Len);
Stream.read(PChar(Data^.Fapellido)^, Len);
Stream
.read
(Len
, SizeOf(Len
)); SetLength(Data^.Fedad, Len);
Stream.read(PChar(Data^.Fedad)^, Len);
Stream
.read
(Len
, SizeOf(Len
)); SetLength(Data^.Ftrabajando, Len);
Stream.read(PChar(Data^.Ftrabajando)^, Len);}
procedure TForm1.VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
data: Pdata;
len: Integer;
begin
Data := VST.GetNodeData(Node);
Len := Length(Data^.Fnombre);
Stream
.Write
(Len
, SizeOf(Len
));Stream
.Write
(PChar
(Data^
.Fnombre
)^
, Length
(Data^
.Fnombre
) * SizeOf(Data^
.Fnombre
[1]));
Len := Length(Data^.Fapellido);
Stream
.Write
(Len
, SizeOf(Len
));Stream
.Write
(PChar
(Data^
.Fapellido
)^
, Length
(Data^
.Fapellido
) * SizeOf(Data^
.Fapellido
[1]));
Len := Length(Data^.Fedad);
Stream
.Write
(Len
, SizeOf(Len
));Stream
.Write
(PChar
(Data^
.Fedad
)^
, Length
(Data^
.Fedad
) * SizeOf(Data^
.Fedad
[1]));
Len := Length(Data^.Ftrabajando);
Stream
.Write
(Len
, SizeOf(Len
));Stream
.Write
(PChar
(Data^
.Ftrabajando
)^
, Length
(Data^
.Ftrabajando
) * SizeOf(Data^
.Ftrabajando
[1]));
// SEGUNDO INTENTO, Obtenido de buscar en la web
{Len := Length(Data^.Fnombre);
Stream
.Write
(Len
, SizeOf(Len
)); Stream
.Write
(PChar
(Data^
.Fnombre
)^
, Length
(Data^
.Fnombre
) * SizeOf(Char
));
Len := Length(Data^.Fapellido);
Stream
.Write
(Len
, SizeOf(Len
)); Stream
.Write
(PChar
(Data^
.Fapellido
)^
, Length
(Data^
.Fapellido
) * SizeOf(Char
));
Len := Length(Data^.Fedad);
Stream
.Write
(Len
, SizeOf(Len
)); Stream
.Write
(PChar
(Data^
.Fedad
)^
, Length
(Data^
.Fedad
) * SizeOf(Char
));
Len := Length(Data^.Ftrabajando);
Stream
.Write
(Len
, SizeOf(Len
)); Stream
.Write
(PChar
(Data^
.Ftrabajando
)^
, Length
(Data^
.Ftrabajando
) * SizeOf(Char
));}
// PRIMER INTENTO, SACADO DE http://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus
{Len := Length(Data^.Fnombre);
Stream
.write
(Len
, SizeOf(Len
)); Stream.write(PChar(Data^.Fnombre)^, Len);
Len := Length(Data^.Fapellido);
Stream
.write
(Len
, SizeOf(Len
)); Stream.write(PChar(Data^.Fapellido)^, Len);
Len := Length(Data^.Fedad);
Stream
.write
(Len
, SizeOf(Len
)); Stream.write(PChar(Data^.Fedad)^, Len);
Len := Length(Data^.Ftrabajando);
Stream
.write
(Len
, SizeOf(Len
)); Stream.write(PChar(Data^.Ftrabajando)^, Len); }
procedure TForm1.Button1Click(Sender: TObject); // botón para agregar datos
var
Data: PData;
Node: PVirtualNode;
begin
VST.Clear;
VST
.NodeDataSize
:= SizeOf(TData
);
Node := VST.AddChild(nil);
Data := VST.GetNodeData(Node);
Data^.Fnombre := 'erick';
Data^.Fapellido := 'student';
Data^.Fedad := '18';
Data^.Ftrabajando := 'si';
Data^.FImageIndex := 0;
Node := VST.AddChild(nil);
Data := VST.GetNodeData(Node);
Data^.Fnombre := 'magui';
Data^.Fapellido := 'enfermera';
Data^.Fedad := '25';
Data^.Ftrabajando := 'no';
Data^.FImageIndex := 1;
Node := VST.AddChild(nil);
Data := VST.GetNodeData(Node);
Data^.Fnombre := 'leo';
Data^.Fapellido := 'ingenier';
Data^.Fedad := '30';
Data^.Ftrabajando := 'si';
Data^.FImageIndex := 2;
procedure TForm1.Button2Click(Sender: TObject); // botón para guardar
begin
VST.SaveToFile('filename.dat');
procedure TForm1.Button3Click(Sender: TObject); // botón para abrir
begin
VST.LoadFromFile('filename.dat');
procedure TForm1.Button4Click(Sender: TObject);
begin
VST.Clear;