![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
очистка StringList
Crusader © (2013-01-09 10:32:00)в StringList1 добавляются объекты (AddObject) из StringList2. Как очистить StringList1 не освобождая (Objects[I].Free) содержащиеся в нем объекты.
Ega23 (2013-01-09 13:43:00) [1]
> и в TStringList, в TStrings они вообще абстрактные.
Ну это понятно. Я просто с TList и его Notify спутал.
sniknik (2013-01-09 12:10:00) [2]и в TStringList, в TStrings они вообще абстрактные.
sniknik (2013-01-09 12:06:00) [3]> или вообще убрать интерфейс
"авторский" TStringList и так не визуальный, а TListBox это от RWolf путаница...
> а в TStrings Delete и Clear всегда виртуальными были?
ну, в D7 уже точно.
Ega23 (2013-01-09 11:51:00) [4]
> sniknik © (09.01.13 11:12) [6]
Опа. Слушайте, а в TStrings Delete и Clear всегда виртуальными были? Или я с TList путаю?
Просто помню, что там Notify надо было перекрывать, а публичные, вроде, статичными были...
DVM (2013-01-09 11:50:00) [5]
> sniknik © (09.01.13 11:42) [8]
> DVM давая совет спутал со StringList с StringGrid-ом.
Я TListBox упомянутый выше имел в виду.
> тут разделение даст лишний "геморрой", ИМХО
Ну как сказать, писать кода придется больше, да. Но как только возникнет необходимость данные списка использовать еще где либо или изменить интерфейс или вообще убрать интерфейс - переделок/доработок будет меньше. Разделение данных и представления опять же. Не всегда оправдано конечно, смотря что за список и что с данными потом надо делать.
sniknik (2013-01-09 11:42:00) [6]вообще то, в объектах тоже не данные хранятся, а ссылки. вот строки, в стринглисте, их можно считать данными.
тут разделение даст лишний "геморрой", ИМХО, и вообще, опять ИМХО, DVM давая совет спутал со StringList с StringGrid-ом.
Crusader (2013-01-09 11:33:00) [7]
> Лучше использовать так называемый виртуальный режим, когда
> контрол не хранит данные непосредственно, а запрашивает
> их для рисования из внешнего списка. А уж внешний список
> может быть организован как угодно. Может подойдет?
то что надо, спасибо за совет
sniknik (2013-01-09 11:12:00) [8]> добавь нехитрое в общем то действие в сам StringList
если не мудрить особо то -
type
TMyStringList = class(TStringList)
procedure Delete(Index: Integer); override;
procedure Clear; override;
destructor Destroy; override;
end;
procedure TMyStringList.Delete(Index: Integer);
begin
Objects[Index].Free;
inherited;
end;
procedure TMyStringList.Clear;
var
i: integer;
begin
for i:= 0 to Count - 1 do Objects[i].Free;
inherited;
end;
destructor TMyStringList.Destroy;
var i: integer;
begin
for i:= 0 to Count - 1 do Objects[i].Free;
inherited;
end;
DVM (2013-01-09 11:08:00) [9]
> Crusader
Лучше использовать так называемый виртуальный режим, когда контрол не хранит данные непосредственно, а запрашивает их для рисования из внешнего списка. А уж внешний список может быть организован как угодно. Может подойдет?
sniknik (2013-01-09 10:51:00) [10]параллельно сохраняй объекты в ObjectList, при необходимости очистить (clear) уничтожить (free) StringList тут же делай аналогичное, общее для ObjectList.
ну, или для удобства (убирания дублирующихся действий) можно перекрыть методы и и добавь нехитрое в общем то действие в сам StringList (или отказаться от него, и строку названия включить внутрь обьекта, и перейти полностью на объектный список)
RWolf (2013-01-09 10:42:00) [11]равно как и очистка TStringList.
RWolf (2013-01-09 10:41:00) [12]очистка TListBox не освобождает связанные с ним объекты.
Crusader (2013-01-09 10:39:00) [13]у меня есть список TStringList который содержит строки и объекты. В определенный момент из него выбираются item'ы и добавляются в компонент TListBox (AddObject). Как перед добавлением item'ов правильно очистить компонент TListBox, чтобы не освободить объекты из списка TStringList.