Цитата(Frees @ 4.3.2010, 23:09 ) | | массив не нужен ссылку на запись можно хранить в ListBox1.Items |
У этого способа есть маленький недостаток, в случае очистки (или удаления одной строки) ListBox необходимо самому освободить память от New(fize);, т.е. нельзя делать так
будет утечка памяти а надо так
| Код | for j:=0 to ListBox1.Items.Count-1 do Dispose(Pfizrozh(ListBox1.Items.Objects[j])); ListBox1.Items.Clear;
|
Отображение дин.массива я делаю по другому - перевожу ListBox в виртуальный режим, в этом случае в самом ListBox ничего не хранится, надо только указать длинну ListBox, а данные выводятся через событие OnData. При добавлении в массив новых данных, только изменяю длину ListBox. Для больших списков это намного бысрее, чем простой ListBox.Items.Add()
| Код | procedure TForm1.FormCreate(Sender: TObject); begin // виртуальный режим ListBox1.Style := lbVirtual; ListBox1.Count := 0; end.
// событие OnData procedure TForm1.ListBox1Data(Control: TWinControl; Index: Integer; var Data: string); begin if (0<=Index) and (Index<Length(fiz)) then Data := fiz[Index].xxx + ' ' + fiz[Index].yyy else Data := '???????' end;
procedure AddItem(); var l: Integer; begin // добвить запись l := Length(fiz); SetLength(fiz, l+1); with fiz[l] do begin {запись полей} end; ListBox1.Count := l; // обновить размер ListBox end;
|
|