Главная страница
    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.041 c
2-1251099283
abhtr
2009-08-24 11:34
2009.10.25
CreateProcess


2-1251128921
Deltas
2009-08-24 19:48
2009.10.25
TNMSMTP & прокси-сервер


2-1251711555
Franzy
2009-08-31 13:39
2009.10.25
Как передать в dll адрес процедуры?..


2-1251446645
TarenoKostanay
2009-08-28 12:04
2009.10.25
Дескриптор окна


15-1250985135
DillerXX
2009-08-23 03:52
2009.10.25
Не пойму с поведением SQL





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