Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.08.2011, 12:46
TotKtoNado TotKtoNado вне форума
Начинающий
 
Регистрация: 28.12.2010
Адрес: Сургут
Сообщения: 103
Версия Delphi: 2010
Репутация: -3238
По умолчанию удаление индексов массива

как удалить индекс массива так чтоб стало на 1 индекс меньше а номера индексов были по порядку?
Код:
  i:=ListViewRashod.itemindex;
  ListViewRashod.Items.Delete(i);
  ItemList[i].AllDateArray:=0;
  ItemList[i].Statya:='';
  ItemList[i].Summa:=0;
  ItemList[i].skidka:=0;
  ItemList[i].schet:='';
  ItemList[i].val:='';
  ItemList[i].com:='';
  setLength(ItemList,i-1);
ругаеться
---------------------------
Financialadvisor
---------------------------
Range check error.
---------------------------
ОК
---------------------------
Ответить с цитированием
  #2  
Старый 04.08.2011, 12:52
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Скорее всего у тебя i за пределами длины ItemList
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 04.08.2011, 12:54
TotKtoNado TotKtoNado вне форума
Начинающий
 
Регистрация: 28.12.2010
Адрес: Сургут
Сообщения: 103
Версия Delphi: 2010
Репутация: -3238
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Скорее всего у тебя i за пределами длины ItemList
ругаеться
---------------------------
Financialadvisor
---------------------------
Access violation at address 0047A1E7 in module 'FinancialAdvisor.exe'. Read of address 00000024.
---------------------------
ОК
---------------------------
Код:
  i:=ListViewRashod.itemindex;
  //индексу i присваиваеться выделенная строка ListViewRashod
  ListViewRashod.Items.Delete(i-1);
  ItemList[i].AllDateArray:=0;
  ItemList[i].Statya:='';
  ItemList[i].Summa:=0;
  ItemList[i].skidka:=0;
  ItemList[i].schet:='';
  ItemList[i].val:='';
  ItemList[i].com:='';
  setLength(ItemList,i-1);
Ответить с цитированием
  #4  
Старый 04.08.2011, 13:07
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я логики работы понять не могу:
1. Получили индекс выделенной строки в визуальном объекте.
2. Удалили предыдущую строку в визуальном обхекте (если выделена первая строка - весело упали)
3. Некий невизуальный объект (скорее всего динамический массив записей) инициализируется по индексу визуального из п.1. Если длина массива (если это конечно массив, а все говорит об этом) меньше чем i+1 то опять же весело упали.
4. Устанавливаем длину массива на 1 меньшую чем полученный в п.1 индекс. Это вообще не понятно зачем, предыдущая инициализация (п.3) тогда вообще теряет смысл, ибо элемент этот остаётся "за бортом" причем не просто "за бортом", а уверенно так, ибо его индекс после операции по изменению длины стал бы Hihg(ItemList)+2.
Короче код очень труден для понимания.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 04.08.2011, 13:48
TotKtoNado TotKtoNado вне форума
Начинающий
 
Регистрация: 28.12.2010
Адрес: Сургут
Сообщения: 103
Версия Delphi: 2010
Репутация: -3238
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Я логики работы понять не могу:
1. Получили индекс выделенной строки в визуальном объекте.
2. Удалили предыдущую строку в визуальном обхекте (если выделена первая строка - весело упали)
3. Некий невизуальный объект (скорее всего динамический массив записей) инициализируется по индексу визуального из п.1. Если длина массива (если это конечно массив, а все говорит об этом) меньше чем i+1 то опять же весело упали.
4. Устанавливаем длину массива на 1 меньшую чем полученный в п.1 индекс. Это вообще не понятно зачем, предыдущая инициализация (п.3) тогда вообще теряет смысл, ибо элемент этот остаётся "за бортом" причем не просто "за бортом", а уверенно так, ибо его индекс после операции по изменению длины стал бы Hihg(ItemList)+2.
Короче код очень труден для понимания.
ну ты мне сказал что Скорее всего у тебя i за пределами длины ItemList
а на счет пункта 4 то я его взял на примере кода
Код:
i := Length(ItemList);
      //Узнаем сколько осталось строк в массиве
      SetLength(ItemList, i + 1);
      //создается новая строка в массиве
Если этот код создает строку то мне надо на оборот удалить строку
Код:
i := Length(ItemList);
      //Узнаем сколько осталось строк в массиве
      SetLength(ItemList, i - 1);
      //создается новая строка в массиве
Ответить с цитированием
  #6  
Старый 04.08.2011, 13:57
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

дык i у тебя не общая длина, а индек текущего элемента
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter