| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TreeView и Data |
| Автор: Nic442 27.4.2006, 01:58 | ||||||
Вопрос такой у меня есть treeview и memo и фунукция, которая ищет определенные слова и запихивает их в treeview. Как сделать, чтобы при нажатии на пункт treeview но выделял слово. Позиция начала и конца выделения известны. Я думал их занести в рекорд.
И главный вопрос. Как при щелчке на treeview определить куда ссылается ? на какой индекс?? TreeView имеет вложенность. |
| Автор: _hunter 27.4.2006, 11:21 |
| у TTreeNode есть свойство Data пиши в него свою запись. у дерева есть Selections. бери первый из них (это будет нода) читай ее Data -- получиш искомую запись |
| Автор: Nic442 27.4.2006, 13:42 | ||
Можно пример с массивом. Я сделал без массива но он выделял только последнее слово
А с массивом какая-то фигня происходит. Я должен создавать 2 массива, а в Data сохранять указатель на элементы этих двух массивов. Как это сделать? |
| Автор: _hunter 27.4.2006, 13:47 |
| в смысле? с каким массивом (да и зачем?)? |
| Автор: Nic442 27.4.2006, 14:34 |
| В Data нельзя же записывать данные, только указатели на данные - я так понял. Следовательно, начало и конец выделения должны храниться в двух массивах, на элементы которых должно ссылаться Data. |
| Автор: _hunter 27.4.2006, 14:54 |
| зачем массив? создавай структуру Create' ом (или как-там-у-вас-) и полученный указатель и засовывай в Data указатель (только про удаление потом не забудь) |
| Автор: Snowy 27.4.2006, 14:55 |
| Зачем? Чем тебе Data не массив? |
| Автор: Nic442 27.4.2006, 15:53 | ||
| Сделал!!! заработало :-) . Когда я вчера сделал я стормозил и не впихнул в цикл New(MyRecPtr); поэтому выдавало только одно слово, но было поздно и бошка не сработала. Теперь возник вопрос. Я создаю в цикле New(MyRecPtr); как мне его очищать??? Вот так?
|
| Автор: _hunter 27.4.2006, 16:05 |
| пройтись по всем итемам дерева (это линейный массив) и удалить все указатели из Data |
| Автор: Snowy 27.4.2006, 16:21 |
| Dispose(MyRecPtr); |
| Автор: Nic442 27.4.2006, 17:46 | ||
Так мне так делать???
или достаточно один раз написать Dispose(MyRecPtr); |
| Автор: Snowy 27.4.2006, 17:56 | ||
|
| Автор: Nic442 27.4.2006, 18:23 | ||
А при закрытии формы указатели и Data автоматически очищаюся?
А то этот код на OnClose или OnDestroy выдаёт ошибку. А при обновлении работает. |
| Автор: _hunter 27.4.2006, 18:32 |
| что OnClose что OnDestroy происходят до вызова деструкторов => само удаляться ничег оне должно... |
| Автор: Nic442 27.4.2006, 19:09 |
| Так куда тогда вешать очистку памяти? |
| Автор: Nic442 27.4.2006, 21:37 | ||
| Ошибка из-за того что я где-то создаю лишние указатели, буду искать!! Повесил на Close
|
| Автор: Nic442 27.4.2006, 22:55 |
| Всё ошибка была найдена и устранена. Точно с указателями попутался. |