if PData.Caption='Pamięć RAM' then
Po pierwsze PData może być nil powinieneś to sprawdzić Assigned, po drugie jak dla mnie dziwna jest taka "zabawa" w porównywanie stringów... no i nawet nie wiesz co robiła pętla wzięta z mojego koduu ona sprawdzała się przy checkboxach po kolei pobierała zaznaczone pozycje a w ten sposób zadziałała (dziwny sposób zapamiętywania w labelu) tylko ostatnią.
EDIT//
type
PVirtualRec = ^TVirtualRec;
TVirtualRec = record
Caption: WideString;
TableName: string; //tu moze sobie dodawac pola na potrzebne dane np. nazwe tabeli
end;
Ale aby dobrze to działało muszą być oprogramowane zdarzenia OnGetNodeDataSize i OnFreeNode:
procedure TfrmMain.VirtualStringTree1GetNodeDataSize(
Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
NodeDataSize:= SizeOf(TVirtualRec);
end;
procedure TfrmMain.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
PData: PVirtualRec;
begin
PData:= VirtualStringTree1.GetNodeData(Node);
if Assigned(PData) then
begin
PData.Caption:= '';
PData.TableName:= '';
//gdyby byl przechowywany jakis obiekt nalezalo by go zwolnic
end;
end;
Oczywiście wartości pól dodatkowych (poza Caption) wypełniasz / modyfikujesz/ pobierasz w dowolnym momencie więc przypuśćmy że mamy w polu TableName nazwę tabeli z której będą pobierane dane gdy ktoś kliknie na pozycję z RadioButton (i go zaznaczy) chsz pobrac te dane 9po to aby coś zrobić):
procedure TfrmMain.VirtualStringTree1Checked(Sender: TBaseVirtualTree;
Node: PVirtualNode);
const
SELECT_SQL = 'Select * From ';
var
QueryStr: string;
var
PData: PVirtualRec;
begin
if Assigned(Node) then //to wlasciwie tylko aby dmucha na zimne...
begin
if (Node.CheckType = ctRadioButton) and //interesuja nas tylko pola RadioButton
(Node.CheckState = csCheckedNormal) then //i tylko gdy sa zaznaczone
begin
PData:= VirtualStringTree1.GetNodeData(Node);
if Assigned(PData) then
begin
QueryStr:= SELECT_SQL + PData.TableName;
//teraz w QueryStr masz cale zapytanie i robisz z nim co chcesz
ShowMessage(QueryStr); //ja je dla przykladu wyswietle
end;
end;
end;
end;