Hallo, ich habe ein Treeview und einige einträge haben Informationen in der Data eigenschaft :
Delphi-Quellcode:
Type
PMyData = ^TMyData;
TMyData = Record
IntVal : Integer;
End;
procedure TMainForm.ComboBox1Change(Sender: TObject);
var z,i : Integer;
ReNode : TTreeNode;
RaNode : TTreeNode;
s : String;
Str1: String;
pData : PMyData;
begin
Button1.Enabled := False;
TreeView1.Items.BeginUpdate;
TreeView1.Items.Clear;
NewListBox3.Clear;
for z := 0 to DKStringGrid4.RowCount - 2 do
begin
If StrToInt(DKStringGrid4.Cells[0,z]) = ComboBox1.ItemIndex+ 1 then
begin
i := 2;
For i := 2 to StrToInt(DKStringGrid4.Cells[1,z]) do
begin
CityTable.Locate('Index', DKStringGrid4.Cells[i,z] ,[]);
Str1 := CityTable.FieldByName('City').AsString;
Str1 := Str1 +' ('+CityTable.FieldByName('Station').AsString+')';
s := s + Str1+ #09;
Application.ProcessMessages;
end;
AddTreeNodePathDupIgnore(TreeView1,s,#09,ReNode);
CityTable.Locate('Index', DKStringGrid4.Cells[StrToInt(DKStringGrid4.Cells[1,z])+1, z] ,[]);
Str1 := CityTable.FieldByName('City').AsString;
s := Str1 +' ('+CityTable.FieldByName('Station').AsString+')';
ReNode := TreeView1.Items.AddChild(ReNode, s);
pData := New(PMyData); // Tu aloues de la mémoire
pData^.IntVal := z+1;
ReNode.Data := pData;
s := '';
TreeView1.Items.EndUpdate;
Application.ProcessMessages;
end;
end;
Button1.Enabled := True;
end;
Zum auslesen der Pointer hab ich folgendes :
Delphi-Quellcode:
procedure TMainForm.TreeView1Click(Sender: TObject);
Var
pData : PMyData;
begin
If Assigned(TreeView1.Selected.Data) Then
Begin
pData := PMyData(TreeView1.Selected.Data);
ShowMessage(IntToStr(pData^.IntVal));
end;
end;
Wie kann ich den benutzten speicherplatz wieder freigeben?