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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2009, 17:56   #11
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от SibBear Посмотреть сообщение
Последовательность следующая:

Браузер(1):= Браузер(2)
Вкладка(1):=Вкладка(2)
Браузер(2):= Браузер(3)
Вкладка(2):=Вкладка(3)

Браузер(3) стоп
Браузер(3) удаляем
Вкладка(3) удаляем
Т.е. WebBrowser[2] указывает на Браузер(3) который ты уничтожил.

было
Браузеры (1,2,3), потом Браузеры (2,3,3)
s.Creator вне форума Ответить с цитированием
Старый 17.03.2009, 18:19   #12
SibBear
Пользователь
 
Регистрация: 11.05.2008
Сообщений: 62
По умолчанию

ага.. вот как.. Т.е. это мое непонимание в работе с динамическими массивами элементов. Ок.
А как тогда быть? Как Удалить эту вкладку со всем содержимым и не портить порядок массивов? У меня ведь по номеру элемента идет обращение к ниму во всей программе...
Если я хочу удалить 2й элемент и оставить 1й и 3й, то как это сделать в данном случае? Подскажите код?
SibBear вне форума Ответить с цитированием
Старый 17.03.2009, 18:44   #13
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Так мой код не работает?
s.Creator вне форума Ответить с цитированием
Старый 17.03.2009, 18:49   #14
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

В моем.
(при i = 2)
сперва (в скобках браузер как обект):
0 = (0)
1 = (1)
2 = (2)
3 = (3)
4 = (4)
уничтожаем (2)
0 = (0)
1 = (1)
2 = ()
3 = (3)
4 = (4)
сдвигаем
0 = (0)
1 = (1)
2 = (3)
3 = (4)
4 = (4)
обрезаем
0 = (0)
1 = (1)
2 = (3)
3 = (4)

(Т.е. индексы 0..3)
s.Creator вне форума Ответить с цитированием
Старый 17.03.2009, 19:13   #15
SibBear
Пользователь
 
Регистрация: 11.05.2008
Сообщений: 62
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
Так мой код не работает?
Вылетает сразу с ошибкой 0000000000000
Вы уничтажаете элемент раньше, чем обращаетесь к ниму в цикле.
Если Free поставить после цикла, то вылетает не сразу но Вылетает если удалить 2й элемент, а потом снова 2й(тот который раньше был 3м). Хотя массив вроде обрезан, и индексы нормально считаются (проверил по выводу на label"ы)

Не могу понять в каком месте вылетает индекс...
и что всетаки означает строчка WebBrowser=(D1:0;D2:0;D3:0;D4: (0,0,0,0,0,0,0,0)). Я так понимаю это содержимое массива, но элементов изначально 7, почему я вижу только D4?
SibBear вне форума Ответить с цитированием
Старый 17.03.2009, 19:14   #16
SibBear
Пользователь
 
Регистрация: 11.05.2008
Сообщений: 62
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
В моем.
(при i = 2)
сперва (в скобках браузер как обект):
А слева что?
SibBear вне форума Ответить с цитированием
Старый 17.03.2009, 19:54   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

по принципу s.Creator попробуй так:
Цитата:
(при i = 2)
сперва (в скобках браузер как обект):
0 = (0)
1 = (1)
2 = (2)
3 = (3)
4 = (4)
сдвигаем
0 = (0)
1 = (1)
2 = (3)
3 = (4)
4 = (4)
уничтожаем 4(лишний)
0 = (0)
1 = (1)
2 = (3)
3 = (4)
4 = (4)
обрезаем
0 = (0)
1 = (1)
2 = (3)
3 = (4)
а то получается что вы пытаетесь уничтоженому обьекту присвоить значение
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2009, 20:08   #18
SibBear
Пользователь
 
Регистрация: 11.05.2008
Сообщений: 62
По умолчанию

Слева что? Я по этому принципу и делаю, все правильно, перемещаем и обрезаем лишний. Только я не понимаю что значит справа браузер как объект, а слева что?
я запутался с массивами объектов напрочь...

Интересное наблюдение

Вот такой порядок
Код:
   setLength(stValueArr,Last);
   setLength(WebBrowser,Last);
   setLength(TabSheet,Last);

   WebBrowser[Last].Free;
   TabSheet[Last].Free;
Не выдает ошибку сразу. Т.е. массив уже обрезали(до 5), но к последнему элементу (6) обращается и делает Free.
Но если повторить процесс сразу ругается...

Код:
   WebBrowser[Last].Free;
   TabSheet[Last].Free;

   setLength(stValueArr,Last);
   setLength(WebBrowser,Last);
   setLength(TabSheet,Last);
А в таком порядке ругается если дважды удалить 5й элемент... (или 4й, любой друг за другом)

Последний раз редактировалось Stilet; 19.03.2009 в 12:43.
SibBear вне форума Ответить с цитированием
Старый 17.03.2009, 20:42   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

слева номер вкладки, я так полагаю=)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2009, 21:28   #20
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Похоже надо побольше кода.
А для чего тебе вообще массивы компонентов?
обычно можно и без них обойтись.
в моем примере меня больше всего смущает
Код:
TabSheet[i].Free;
не было времени посмотреть (попробовать), но не уверен что так удаляют вкладки.
s.Creator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходимо засечь время выполнения части алгоритма Lord Lex Win Api 12 03.03.2009 21:36
определить время выполнения процедуры? Bezdar Microsoft Office Excel 4 20.01.2009 13:57
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Цикл, время выполнения шага KiDoki Общие вопросы Delphi 9 19.12.2008 22:37
Как замерить время выполнения программы Gracel Общие вопросы Delphi 5 12.06.2007 22:16