|
Вопрос # 4 734/ вопрос открыт / |
|
Здравствуйте!
Нужна помощь, в программе использую компонент ElTree (аналог TreeView). В программе несколько раз приходится перестраивать дерево в зависимости от ситуации. Если переходов на другую форму не было строит и очищает компонент без проблем, при возврате с др. формы, выдает ошибку и подвешивает компонент (не раскрывает списки).
Мини-форум вопроса
Всего сообщений: 15; последнее сообщение — 16 ноября 2010, 17:03; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 10:11 [#1]:
Ошибка в 17-й строке.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
16 ноября 2010, 10:58: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 11:27 [#2]:
я понял остроту, тогда помогите мануалом, есть где-нибудь описание этого компонента? желательно рускоязычное
|
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 11:36 [#3]:
Цитата (Казаков Николай Константинович):
я понял остроту
Ни фига ты не понял. "Ошибка в 17-й строке" - это програмитсткий эвфемизм, указывающий оппоненту, что в его вопросе не содержится информации, позволяющей дать хоть какой-то разумный ответ.
Вот ты пишешь:
Цитата (Казаков Николай Константинович):
выдает ошибку и подвешивает компонент
А самого главного не сообщаешь - КАКУЮ ОШИБКУ!(?)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 11:57 [#4]:
ОШИБКА! ACCESS VIOLATION AT ADDRESS 06BF3675 IN MODULE 'CHECKRIGHT.PGI'. READ OF ADDRESS 00000060. что делать ума не приложу, код перелопатил 1000 раз уже, было бы описание компонента так нет ведь. В инете тож не нашел. мож завалялось у кого )))
|
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 12:00 [#5]:
Пройдись дебаггером по коду, найди строку, где она возникает.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 12:07 [#6]:
я нашел, ошибка тут
form1.ElTree1.Items.Clear; // Очищаем дерево,
причем как я и описал выше она возникает не всегда
|
|
Вадим К (статус: Академик), 16 ноября 2010, 12:20 [#7]:
так пытаетесь очистить с другой формы и в этом случае иногда возникает ошибка?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 12:29 [#8]:
Цитата (Казаков Николай Константинович):
я нашел, ошибка тут form1.ElTree1.Items.Clear; // Очищаем дерево, причем как я и описал выше она возникает не всегда
Очень похоже, что form1 либо = nil, либо указывает на разрушенный экземпляр класса Tform1. Чтобы это узнать, можно состряпать простую конструкцию:
// Перед Clear:
try
form1.Tag:= 100500;
except
ShowMessage('Ёпэрэсэтэ!');
end;
form1.ElTree1.Items.Clear; // Очищаем дерево
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 12:44 [#9]:
не к тому времени когда происходит очищение форма закрыта и и память очищена Free
|
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 12:58 [#10]:
Цитата (Казаков Николай Константинович):
не к тому времени когда происходит очищение форма закрыта и и память очищена Free
Ну и тогда чего ж ты хочешь от конструкции с участием тухлого указателя?
form1.ElTree1.Items.Clear; // form1 - тухлый указатель
Вполне закономерный access violation.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 16 ноября 2010, 13:28 [#11]:
Очень сомневаюсь, что form1 может быть невалидным указателем в штатных программах. Дело в том, что это обычно (это ключевое слово) главная форма. и если form1 не локальная переменная, то она скорее всего вполне валидная. Но пример от min@y™ вплоне себе хорош. Как минимум отбросит явно невалидные указатели.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 13:41 [#12]:
закрыта другая форма 2 читайте внимательнее. Проблема локализована. Компонент не ElTree не хочет Clear если в нем выбран item, мож это связано с фокусом, как-нибудь. То есть если я не щелкаю по компоненту все работает, как только щелкнул, он не очищается
|
|
Вадим К (статус: Академик), 16 ноября 2010, 13:50 [#13]:
а не привязано ли к этому компоненту-дереву каких то событий, которые реагируют на смену фокуса, на изменения (on*focus*, on*chanege*, где * - какие то символы)?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 16 ноября 2010, 13:58 [#14]:
Цитата (Казаков Николай Константинович):
закрыта другая форма 2 читайте внимательнее.
А где это написано?
Цитата (Казаков Николай Константинович):
ElTree не хочет Clear если в нем выбран item, мож это связано с фокусом, как-нибудь
А что мешает продрать дебаггером внутри метода ElTree.Items.Clear()?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Казаков Николай Константинович (статус: 1-ый класс), 16 ноября 2010, 17:03 [#15]:
Спасибо всем за участие, проблема решилась отказом от компонента ElTree и переходом на стандартный TreeView, не очень изящно )), но тоже метод. Все работает как по маслу. На будущее урок "Не выпендривайся". Тема закрыта.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|