Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2014, 17:47   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос Как удалить строку из ListView (в режиме OwnerDraw) ?

Имеется такая структура:

Код:
...
 type
  TSimpleRec = record
      _1: string;
      _2: string;
      _3: string;
      ImageIndex: integer;
  end;
    TSimpleArr = array of TSimpleRec;
...
var
 arr: TSimpleArr;
В ней хранятся строки для ListView (OwnerDraw).
Как из нее удалить элемент по индексу?

Последний раз редактировалось garuna; 28.12.2014 в 18:04.
garuna вне форума Ответить с цитированием
Старый 28.12.2014, 18:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Удалить только перезаписав в новый массив.
Сделай как делают СУБД: Добавь некое поле deleted:boolean. Пиши туда True, если считаешь этот элемент удаленным, а в циклах проходов или просто выражениях учитывай это поле. Т.е. сама запись будет существовать, но считаться исключенной из данных, обрабатываемых в программе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.12.2014, 19:05   #3
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Удалить только перезаписав в новый массив.
не обязательно. Можно сдвинуть все записи после удаляемой на единицу влево
Код:
for I := (Index + 1) to High(arr) do
  arr[I - 1] := arr[I];
и изменить длину массива на -1.
Код:
SetLength(arr, Length(arr) - 1);
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 19:08   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
SetLength
Фактически это и есть перепись в новый массив. Можно не массив, а, например, TList, там и метод Delete есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.12.2014 в 19:10.
Аватар вне форума Ответить с цитированием
Старый 28.12.2014, 19:09   #5
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Аватар Так зачем делать то, что уже сделали до Вас?
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 19:11   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Так зачем делать то, что уже сделали до Вас?
Это о чем, больно загадочно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.12.2014, 19:13   #7
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Не поверите. О массивах.
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 19:19   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Понятно, я думал о птичках
Было:
Цитата:
Удалить только перезаписав в новый массив.
Реплика из зала:
Цитата:
не обязательно
Реплика с галерки:
Цитата:
Фактически это и есть перепись в новый массив
Что не так?
Цитата:
Так зачем делать то, что уже сделали до Вас?
В огороде бузина, а в Киеве - дядька
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.12.2014, 19:25   #9
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Реплика с галёрки:
Цитата:
по тому что гладиолус
Что не так?
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 19:42   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WinCoder
Флудим? Ну ну.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку tarasman11 Паскаль, Turbo Pascal, PascalABC.NET 4 05.07.2012 20:27
OwnerDraw ListView with Checkboxes t2skler Общие вопросы C/C++ 0 05.06.2012 19:32
ListView как узнать последнюю строку? Кольша Мультимедиа в Delphi 10 22.08.2011 17:02
Удалить пустую строку из ListView Shouldercannon Общие вопросы Delphi 2 28.04.2010 16:02
как работать с новыми CheckBox в ListView в режиме vsReport cybopob90 Компоненты Delphi 2 24.03.2009 13:02