Hi,
ich verwende den VT fast ausschließlich mit Objekten. Dazu ein wenig Beispielcode:
Delphi-Quellcode:
procedure TfrmMain.AddNode( LogItem: TLogItem;
vst: TVirtualStringTree );
var
_LogItem: TLogItem;
begin
if ( ( Assigned( LogItem ) ) AND
( Assigned( vst ) ) ) then
begin
vst.NodeDataSize := SizeOf( TLogItem );
vst.AddChild( nil, LogItem );
end;
end;
Mein LogItem (das Objekt) ist so aufgebaut:
Delphi-Quellcode:
TLogItem = class(TObject)
private
FLogLevel: ELogLevel;
FLogStyle: ELogStyle;
FText: WideString;
FDateTime: TDateTime;
public
constructor Create( DateTime: TDateTime;
LogLevel: ELogLevel;
LogStyle: ELogStyle;
Text: WideString );
destructor Destroy(); override;
published
property LogLevel: ELogLevel read FLogLevel write FLogLevel;
property LogStyle: ELogStyle read FLogStyle write FLogStyle;
property Text: WideString read FText write FText;
property DateTime: TDateTime read FDateTime write FDateTime;
end;
Und nun möchte ich natürlich, dass auch im Tree die Daten angezeigt werden:
Delphi-Quellcode:
procedure TfrmMain.vst_logGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
Data: TLogItem;
begin
Data := TLogItem( Sender.GetNodeData( Node )^ );
case Column of
1: CellText := FormatDateTime(
ShortDateFormat + ' ' + LongTimeFormat + '.zzz', Data.DateTime );
2: CellText := Data.Text;
end;
end;
Ich verwalte alle meine Objekte wiederrum in einer "TObjectList", die bei Löschung eines Objekts auch dessen Speicher freigibt.
Viele Grüße.