Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];

Вниз

очистка StringList   Найти похожие ветки 

 
Crusader   (2013-01-09 10:32) [0]

в StringList1 добавляются объекты (AddObject) из StringList2. Как очистить StringList1 не освобождая (Objects[I].Free) содержащиеся в нем объекты.


 
Crusader   (2013-01-09 10:39) [1]

у меня есть список TStringList который содержит строки и объекты. В определенный момент из него выбираются item"ы и добавляются в компонент TListBox (AddObject). Как перед добавлением item"ов правильно очистить компонент TListBox, чтобы не освободить объекты из списка TStringList.


 
RWolf ©   (2013-01-09 10:41) [2]

очистка TListBox не освобождает связанные с ним объекты.


 
RWolf ©   (2013-01-09 10:42) [3]

равно как и очистка TStringList.


 
sniknik ©   (2013-01-09 10:51) [4]

параллельно сохраняй объекты в ObjectList, при необходимости очистить (clear) уничтожить (free) StringList тут же делай аналогичное, общее для ObjectList.

ну, или для удобства (убирания дублирующихся действий) можно перекрыть методы и и добавь нехитрое в общем то действие в сам StringList (или отказаться от него, и строку названия включить внутрь обьекта, и перейти полностью на объектный список)


 
DVM ©   (2013-01-09 11:08) [5]


> Crusader

Лучше использовать так называемый виртуальный режим, когда контрол не хранит данные непосредственно, а запрашивает их для рисования из внешнего списка. А уж внешний список может быть организован как угодно. Может подойдет?


 
sniknik ©   (2013-01-09 11:12) [6]

> добавь нехитрое в общем то действие в сам 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;


 
Crusader   (2013-01-09 11:33) [7]


> Лучше использовать так называемый виртуальный режим, когда
> контрол не хранит данные непосредственно, а запрашивает
> их для рисования из внешнего списка. А уж внешний список
> может быть организован как угодно. Может подойдет?


то что надо, спасибо за совет


 
sniknik ©   (2013-01-09 11:42) [8]

вообще то, в объектах тоже не данные хранятся, а ссылки. вот строки, в стринглисте, их можно считать данными.
тут разделение даст лишний "геморрой", ИМХО, и вообще, опять ИМХО, DVM давая совет спутал со StringList с StringGrid-ом.


 
DVM ©   (2013-01-09 11:50) [9]


> sniknik ©   (09.01.13 11:42) [8]


> DVM давая совет спутал со StringList с StringGrid-ом.

Я TListBox упомянутый выше имел в виду.


> тут разделение даст лишний "геморрой", ИМХО

Ну как сказать, писать кода придется больше, да. Но как только возникнет необходимость данные списка использовать еще где либо или изменить интерфейс или вообще убрать интерфейс - переделок/доработок будет меньше. Разделение данных и представления опять же. Не всегда оправдано конечно, смотря что за список и что с данными потом надо делать.


 
Ega23 ©   (2013-01-09 11:51) [10]


> sniknik ©   (09.01.13 11:12) [6]


Опа. Слушайте, а в TStrings Delete и Clear всегда виртуальными были? Или я с TList путаю?
Просто помню, что там Notify надо было перекрывать, а публичные, вроде, статичными были...


 
sniknik ©   (2013-01-09 12:06) [11]

> или вообще убрать интерфейс
"авторский" TStringList и так не визуальный, а TListBox это от RWolf  путаница...

> а в TStrings Delete и Clear всегда виртуальными были?
ну, в D7 уже точно.


 
sniknik ©   (2013-01-09 12:10) [12]

и в TStringList, в TStrings они вообще абстрактные.


 
Ega23 ©   (2013-01-09 13:43) [13]


> и в TStringList, в TStrings они вообще абстрактные.

Ну это понятно. Я просто с TList и его Notify спутал.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
8-1232828242
Vemer
2009-01-24 23:17
2013.09.22
Как быстро нарисовать точки из массива в Canvas/DC?


15-1365732861
Kilkennycat
2013-04-12 06:14
2013.09.22
С днем космонавтики нас всех!


15-1365770544
O'ShinW
2013-04-12 16:42
2013.09.22
Oracle. Почему так заводится юзер?


15-1364221417
alexdn
2013-03-25 18:23
2013.09.22
Народ на ucoz


1-1266331114
sniknik
2010-02-16 17:38
2013.09.22
Печать RTF (RichView ? другое ?)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский