|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.09.2011, 17:40 | #1 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
Сместить значения массива
Доброго времени суток.
У меня есть массив и TabControl с вкладками, которые создаются динамически. Суть задачи - привязать вкладку к массиву. Код:
Код:
Все это работает отлично. Но у меня есть вопрос: когда мы удаляем вкладку, все позиции (Index) после удаленной смещаются на 1. Т.е., если мы удаляем вкладку у которой был индекс 8, то последующая вкладка (которая до удаления была девятой) становится восьмой. И так далее со следующими, которые стояли после удаленной. Как по такому же принципу сместить массив? Я привязываю адреса файлов к вкладкам через тип, описанный в начале. Когда происходит удаление не последней вкладки, то тип сбивается, т.к. в значении array[значение] индекс остается прежним. Еще один пример: К вкладке под номером 3 закреплено имя файла C:\example.txt, к вкладке под номером 4 - F:\boots.xml. Удаляем третью вкладку, на ее место (индекс) становится четвертая (но уже под индексом 3). И тебе по клику на третью мы имеем путь C:\example.txt, а не F:\boots.xml. Это логично, т.к. именно под таким индексом записан путь в массиве. Всячески пытался объяснить проблему. Буду признателен за помощь. |
24.09.2011, 17:45 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
вмесо массива используй TObjectList облегчишь себе жизнь и гемороя меньше.
|
24.09.2011, 17:51 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
TabIndex нумеруется с 0. Массив тоже с 0 сделать лучше будет
При удалении вкладки с индексом i все элементы массива от i+1 и до конца перемещаем на одну позицию к началу массива
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
24.09.2011, 18:11 | #4 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
|
24.09.2011, 18:26 | #5 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
Решил проблему. Извините, что создал новую тему, нужно было использовать поиск.
|
24.09.2011, 18:27 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
for k:=i+1 to 1000 do TabArray[k-1]:=TabArray[k];
Вместо 1000 лучше кол-во TabControl без 1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
24.09.2011, 18:56 | #7 |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
|
24.09.2011, 19:59 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
ТС, странный вы=) Чесно. Пишите свои грабли. А ведь за вас такие грабли уже придумали ещё в 2002 году. И называются они Tlist(Classes.pas) и его наследник TObjectList(Contrs.pas). Эти классы создают динам. массив указателей. Это значит, что Tlist может хранить в себе все, что вы в него запихаете. А TobjectList может ещё и автоматически убивать(вызывть Free у обьектов) при вызове TobjectList.Destroy.
Очень удобные классы. Особенно при вашей задаче. Последний раз редактировалось Человек_Борща; 24.09.2011 в 20:02. |
25.09.2011, 11:17 | #9 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Код:
Код приведённые Вами будет маслать несколько миллисеунд. A : array of TRecord; SetLenGth(A,200); записываем элементы ---------- удаляем 102 элемент Код:
Так же можно и вставить элемент, зхаранее расширив размерность массива и сместив элементы командой Move
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
25.09.2011, 11:27 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Для динамического массива да. А где вы его увидели в вопросе ТС?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Присвоение значения елементу массива. | Демик | Общие вопросы C/C++ | 2 | 26.05.2011 21:26 |
Значения массива | Serebah | Общие вопросы Delphi | 7 | 09.02.2011 17:37 |
Присвоение переменной значения из массива | Maxx | Microsoft Office Excel | 4 | 21.07.2010 13:53 |
Как сместить указатель мыши (с щелчком) на последний символ в Edit1 ??? | newprog12 | Общие вопросы Delphi | 2 | 24.01.2010 12:12 |
Помогите сместить большую картинку на кнопке SpeedButton1 | DemonXT | Компоненты Delphi | 4 | 19.11.2009 15:28 |