|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.09.2015, 15:40 | #1 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Почему происходит TVN_SELCHANGED после TVM_DELETEITEM?
Отправляю компоненту TreeView сообщение TVM_DELETEITEM с wParam = 0, lParam = TVI_ROOT для удаления всех его элементов.
Но, после этого, иногда почему-то происходит событие TVN_SELCHANGED. В MSDN не написано, что сообщение TVM_DELETEITEM вызывает TVN_SELCHANGED. Может, кто знает, почему такое может быть? |
26.09.2015, 17:30 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну я предположить могу, что при удалении происходит в дереве сдвиг веток, а соответственно и выделенная ветка, если она удаляется - теряет свое выделение в пользу другой.
Попробуй при посыле TVM_DELETEITEM в какю-то переменку булеву ставить флаг, а в обработчике TVN_SELCHANGED этот флаг проверяй. И если он скажем false - выходи из обработчика.
I'm learning to live...
|
26.09.2015, 19:14 | #3 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Stilet, да, с проверкой флага я так и реализовал, просто не пойму почему так получается...
Насколько знаю, Вы программируете тоже на Lazarus, может посмотрите проект, если не сложно? Вдруг я что то упустил или делаю не так... Архив с проектом прикрепил. P.S. У меня при нажатии на кнопку "Add Element", в процедуре перезагрузки элементов TreeView, после Код:
Последний раз редактировалось Alexan-Dwer; 26.09.2015 в 19:22. |
27.09.2015, 07:56 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
Я бы предложил такое: Код:
Цитата:
Видать робяты не стали связываться с WinAPI серьезно. Вообще логично, я бы наверное тоже не стал.
I'm learning to live...
|
|
27.09.2015, 13:10 | #5 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Stilet, я думал, что если отправить:
Код:
Но, оказалось, что это не так. Он перебирает все элементы, которые созданы в корне, и удаляет каждый по очереди, выделяя следующий по списку элемент. Что бы избавиться от ненужных событий TVN_SELCHANGED просто перед очисткой элементов выставляю false для флага проверки, и после удаления присваиваю true. В обработчике события TVN_SELCHANGED проверяю, если значение флага истина, то нужно обрабатывать событие, если нет, то выхожу из обработчика. |
27.09.2015, 13:25 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Зачем ты с Винапи связался? Лазарь всетки кроссовый, и для него не характерны такие выкрутасы. Чем не угодило его дерево стандартное из LCL?
I'm learning to live...
|
27.09.2015, 13:54 | #7 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Stilet, писал раньше на Delphi, когда уже заканчивал, неожиданно начали сыпаться ошибки, причём, сами по себе. Намучившись с VCL, выбрал Lazarus и WinApi, пока вроде всё работает, только иногда бывает, надо где-то что-нибудь подправить и всё
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему не происходит запись в файл? | RaccoonRocket | Помощь студентам | 3 | 06.06.2015 13:18 |
Почему не происходит удаление?Язык С++. | RG21 | Помощь студентам | 0 | 28.05.2013 21:32 |
Почему происходит зацикливание? | Arigato | Общие вопросы Delphi | 8 | 29.04.2013 19:06 |
почему событие buttonclic происходит после второго клика? | brutalis | Общие вопросы Delphi | 4 | 23.10.2011 21:21 |
Почему так происходит? | Zeraim | Общие вопросы Delphi | 1 | 05.05.2008 14:10 |