Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.25;
Скачать: CL | DM;

Вниз

Удаление элемента из динамического массива   Найти похожие ветки 

 
Alexey   (2009-08-26 16:55) [0]

Господа, добрый день!
Подскажите пожалуйста, как правильно удалить элемент из динамического массива?

Спасибо!


 
Anatoly Podgoretsky ©   (2009-08-26 17:04) [1]

> Alexey  (26.08.2009 16:55:00)  [0]

Удалить нельзя, можно только укоротить массив.


 
clickmaker ©   (2009-08-26 17:17) [2]

присвоить что-то, что будет означать недействительность элемента.
Если это невозможно, тогда только укорачивание со сдвигом остальных элементов


 
KSergey ©   (2009-08-26 17:27) [3]

можно использовать TList и наследников.


 
Alexey   (2009-08-26 19:34) [4]


> Если это невозможно, тогда только укорачивание со сдвигом
> остальных элементов
>

да вот я только так пока и думал, честно говоря


> можно использовать TList и наследников.

хм...
задумался, спасибо!


 
Alexey   (2009-08-26 19:52) [5]


> KSergey ©

А можно маленькую подсказочку, как мне в TList добавить элемент своего типа?


 
Ruzzz   (2009-08-26 20:20) [6]

Можно поискать в папке исходников, которые идут с Delphi, строку " = class(TList)" по маске "*.pas", и посмотреть примеры


 
Anatoly Podgoretsky ©   (2009-08-26 20:23) [7]

> Alexey  (26.08.2009 19:52:05)  [5]

TList - это список нетипизированых указателей


 
Ruzzz   (2009-08-26 20:40) [8]

Тут стоит обратить внимание на:
procedure Notify(Ptr: Pointer; Action: TListNotification); virtual

Clear, вызывает SetCount(0), который вызывает Delete, Remove также вызывет Delete, сам Delete вызывает Notify, т.е. все предусмотрено для корректного удаления.
Переопределять можно примерно так:
procedure Notify(Ptr: Pointer; Action: TListNotification); override;

procedure TMyList.Notify(Ptr: Pointer; Action: TListNotification);
begin
 if Action = lnDeleted then begin
   TMyListElement(Ptr).Free // или если у нас не класс а структура то
   SetLength(PMyListElement(Ptr)^.Str, 0); // не забываем удалять строки и дин. массивы в структуре
   Dispose(Ptr);
 end;
 inherited Notify(Ptr, Action);
end;


 
Alexey   (2009-08-26 23:09) [9]

Спасибо!


 
Alexey   (2009-08-26 23:10) [10]

Можно тему закрывать.



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

Текущий архив: 2009.10.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
2-1251465886
stas
2009-08-28 17:24
2009.10.25
Сообщение о успешной установке сервиса


15-1250530727
Юрий Зотов
2009-08-17 21:38
2009.10.25
Супер-пупер-мега-сплэш


1-1221818257
Jolik
2008-09-19 13:57
2009.10.25
Как передать форму по сети :)


15-1251132830
Igor5
2009-08-24 20:53
2009.10.25
переход по формам в случайном порядке


6-1208844661
berlio
2008-04-22 10:11
2009.10.25
IdSNTP от Indy10 не хочет работать через прокси