|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Привязка к элементам TreeView
Здравствуйте! В глубокой молодости начал писать программку для учета. Необходимо было создавать разные категории товара, и в зависимости от выбранной категории, выводить список товаров в таблицу. Для этого использовал TreeView и StringGrid. При запуске программы, вся база подгружается в динамический массив, а от туда уже идет выборка по выбранной ветке TreeView в StringGrid. И тогда появилась проблема: как определить какую ветку выбрал пользователь. Сначала хотел использовать привязку к индексу, но пользователь также мог удалять категории, и потом создавать другие, после чего индексы «съезжали». Не найдя тогда нормального решения, - я поставил временную затычку: привязывался к свойству «Text». Но данный способ не подходит потому, что нельзя создавать ветки с одинаковыми именами, и привязывать к ним разные данные. До сих пор не могу найти вменяемую информацию. Прошу вашей помощи с решением данной проблемы.
Для наочности работы программы, она находится тут P.S. Простите за объёмный текст, просто пытался более подробно описать проблему. |
#2
|
||||
|
||||
дк в событии Change в параметр Node передается выбраная пользователем ветка. А уже из Node.Data вытаскиваешь нужную строку запроса ...или как ты там делаешь.
|
#3
|
|||
|
|||
Цитата:
Тут, как я понял, проблема не в определении момента смены выбранного узла дерева, а в том, как "положить" некоторые данные в узел, что бы потом их можно было считать и использовать. У TTreeNode есть свойство Data. В принципе, оно имеет тип TObject, т.е. в него можно "положить" любой объект. Однако, еси у нас тип дпнных Integer, то можно воспользоваться следующим фокусом. Т.к. TObject это указатель, то по размеру он совместим с Integer (оба 32bit). Тогда можно "сказать", что мы кладем в это свойство объект, находящийся по адресу, указанному в Integer-переменной. Для чтения нужно сделать обратное преобразование. Код:
var Idx : Integer; ANode : TTreeNode; begin // Запись: Idx := 123; ANode.Data := TObject(Idx); // Чтение: Idx := 0; Idx := Integer(ANode.Data); ShowMessage(IntTostr(Idx)); |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Nikitiy_II (30.11.2018)
|
#4
|
||||
|
||||
Цитата:
Спасибо большое, примерно то, что искал |