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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.09 c
15-1251233498
Германн
2009-08-26 00:51
2009.10.25
Какую туеву хучу документов


15-1250850838
Медвежонок Пятачок
2009-08-21 14:33
2009.10.25
перечень нехорошего


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


2-1251128591
Danco
2009-08-24 19:43
2009.10.25
Массивы


15-1250800206
Юрий
2009-08-21 00:30
2009.10.25
С днем рождения ! 21 августа 2009 пятница





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский