unit VstDemo;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Vcl.ExtCtrls,
VirtualTrees, System.Generics.Collections, System.DateUtils;
type
TMyData =
class
private
FCreationTime: TDateTime;
public
constructor Create(
const ATime: TDateTime);
property CreationTime: TDateTime
read FCreationTime
write FCreationTime;
end;
TfrmVstDemo =
class(TForm)
vstEntries: TVirtualStringTree;
btnAdd: TButton;
tmrDelete: TTimer;
procedure btnAddClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure vstEntriesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText:
string);
procedure tmrDeleteTimer(Sender: TObject);
private
FEntries: TList<TMyData>;
procedure UpdateTree;
public
end;
var
frmVstDemo: TfrmVstDemo;
implementation
{$R *.dfm}
{ TfrmVstDemo }
procedure TfrmVstDemo.btnAddClick(Sender: TObject);
begin
// Eintrag hinzufügen
FEntries.Add(TMyData.Create(Now));
UpdateTree;
end;
procedure TfrmVstDemo.FormCreate(Sender: TObject);
begin
// Liste erzeugen
FEntries := TObjectList<TMyData>.Create;
end;
procedure TfrmVstDemo.FormDestroy(Sender: TObject);
begin
// Liste freigeben
FEntries.Free;
end;
procedure TfrmVstDemo.tmrDeleteTimer(Sender: TObject);
var
i: Integer;
begin
// Alle Einträge durchgehen und nach 5 Sekunden herauswerfen
for i := FEntries.Count - 1
downto 0
do
if SecondsBetween(FEntries[i].CreationTime, Now) >= 5
then
FEntries.Delete(i);
// Baumanzeige aktualisieren
UpdateTree;
end;
procedure TfrmVstDemo.UpdateTree;
begin
// Anzahl der Einträge setzen und Anzeige aktualisieren
vstEntries.ChildCount[vstEntries.RootNode] := FEntries.Count;
vstEntries.Invalidate;
end;
procedure TfrmVstDemo.vstEntriesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText:
string);
begin
// Text, der für den Eintrag angezeigt werden soll, liefern indem man diesen in CellText schreibt
CellText := '
Eintrag von ' + DateTimeToStr(FEntries[Node.
Index].CreationTime);
end;
{ TMyData }
constructor TMyData.Create(
const ATime: TDateTime);
begin
FCreationTime := ATime;
end;
end.