[Delphi]TreeView.AddChildObject

0

tak jak w temacie, mam swoj rekord

type Tprodukt = record
  id : integer;
  id_grupa_towarowa : string;
  name : string;
end;

potem tworze tablice tych rekordow

var
  produkty : array of Tprodukt;

dodaje do treeview za pomoca

      setlength(produkty, length(produkty)+1);
      produkty[length(produkty)-1].id:=LCDS.FieldByName('id').AsInteger;
      produkty[length(produkty)-1].id_grupa_towarowa:=LCDS.FieldByName('id_grupa_towarowa').AsString;
      produkty[length(produkty)-1].name:=LCDS.FieldByName('name').AsString;
      nowa:=TreeView1.Items.AddChildObject(gdzie, produkty[length(produkty)-1].name, @produkty[length(produkty)-1]);

i nie mam zielonego pojecia jak to cholerstwo odczytac, domyslam sie ze chodzi o TreeView.Selected.Data ale co i jak to juz pustka... HELP ;-( ;-( ;-(

0
Lardux napisał(a)
      nowa:=TreeView1.Items.AddChildObject(gdzie, produkty[length(produkty)-1].name, @produkty[length(produkty)-1]);

i nie mam zielonego pojecia jak to cholerstwo odczytac, domyslam sie ze chodzi o TreeView.Selected.Data ale co i jak to juz pustka... HELP ;-( ;-( ;-(

Źle robisz dodając jako obiekt wskaźnik na element tablicy dynamicznej. Przy którymś z kolei wywołaniu SetLength może nie być miejsca w danym obszarze pamięci i cała tablica zostanie przeniesiona w inne miejsce - ergo wszystkie wcześniej dodane wskaźniki będą wskazywały w kosmos. Jako obiekt dodawaj po prostu numer indeksu danego elementu:

      nowa:=TreeView1.Items.AddChildObject(gdzie, produkty[length(produkty)-1].name, TObject(length(produkty)-1));

A potem przy odczycie zrobisz coś na kształt:

      rekord := produkty[Integer(TreeView1.Items[0].Data)]

1 użytkowników online, w tym zalogowanych: 0, gości: 1