Пишу небольшую систему управления файлами на основе DBTreeView и DBListView – делаю небольшую подсказку для себя и тех, кто идет по моим следам.
В данном посте узнаем как добавить колонки, итемы и сохранить ID записи базы данных в TListItem.Data? Тут пример без самой БД, но с иллюстрацией того, как хранить id записей в TListItem.Data.
Как добавить колонки и итемы?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
procedure TfListViewExperiments.AddItemsClick(Sender: TObject); var Item:TListItem; Col:TListColumn; i:integer; id:^integer; begin for i := 0 to 10 do begin Col:=ListView1.Columns.Add; Col.Caption:='Col1'; Col.Width:=100; end; for i := 0 to 50 do begin new(id); id^:=i; Item := ListView1.Items.Add; Item.Caption := 'Первая колонка'; Item.SubItems.Add('Вторая колонка'); Item.SubItems.Add('Третья колонка'); Item.StateIndex:=0; Item.Data:=id; { Item := ListView1.Items.Add; Item.Caption := 'Первая колонка'; Item.SubItems.Add('Вторая колонка'); Item.SubItems.Add('Третья колонка'); Item.StateIndex:=0; } end; end; |
После такого добавления в памяти висят выделенные участки памяти под указателями и их перед уничтожением объекта нужно очистить, например так…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure TfListViewExperiments.ClearPointers; var I: Integer; begin for I := 0 to ListView1.Items.Count-1 do begin if ListView1.Items[i].Data<>nil then Dispose(ListView1.Items[i].Data); end; end; |
1 2 3 4 5 |
procedure TfListViewExperiments.FormDestroy(Sender: TObject); begin ClearPointers; ReportMemoryLeaksOnShutdown:=true; end; |
Как прочитать ID из под указателя итема?
1 2 3 4 5 6 7 8 9 10 |
procedure TfListViewExperiments.ListView1Click(Sender: TObject); var id:integer; begin id:=integer(ListView1.ItemFocused.Data^); showmessage('someid = '+id.ToString); end; |