Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.02.2011, 16:06
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
Печаль Привязка к элементам TreeView

Здравствуйте! В глубокой молодости начал писать программку для учета. Необходимо было создавать разные категории товара, и в зависимости от выбранной категории, выводить список товаров в таблицу. Для этого использовал TreeView и StringGrid. При запуске программы, вся база подгружается в динамический массив, а от туда уже идет выборка по выбранной ветке TreeView в StringGrid. И тогда появилась проблема: как определить какую ветку выбрал пользователь. Сначала хотел использовать привязку к индексу, но пользователь также мог удалять категории, и потом создавать другие, после чего индексы «съезжали». Не найдя тогда нормального решения, - я поставил временную затычку: привязывался к свойству «Text». Но данный способ не подходит потому, что нельзя создавать ветки с одинаковыми именами, и привязывать к ним разные данные. До сих пор не могу найти вменяемую информацию. Прошу вашей помощи с решением данной проблемы.

Для наочности работы программы, она находится тут

P.S. Простите за объёмный текст, просто пытался более подробно описать проблему.
Ответить с цитированием
  #2  
Старый 13.02.2011, 18:48
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

дк в событии Change в параметр Node передается выбраная пользователем ветка. А уже из Node.Data вытаскиваешь нужную строку запроса ...или как ты там делаешь.
Ответить с цитированием
  #3  
Старый 13.02.2011, 20:28
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Pilot_Red
дк в событии Change в параметр Node передается выбраная пользователем ветка. А уже из Node.Data вытаскиваешь нужную строку запроса ...или как ты там делаешь.

Тут, как я понял, проблема не в определении момента смены выбранного узла дерева, а в том, как "положить" некоторые данные в узел, что бы потом их можно было считать и использовать.

У 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  
Старый 14.02.2011, 11:40
Аватар для Nikitiy_II
Nikitiy_II Nikitiy_II вне форума
Новичок
 
Регистрация: 01.05.2008
Сообщения: 52
Репутация: 11
По умолчанию

Цитата:
Сообщение от lmikle
Тут, как я понял, проблема не в определении момента смены выбранного узла дерева, а в том, как "положить" некоторые данные в узел, что бы потом их можно было считать и использовать.

У TTreeNode есть свойство Data. В принципе, оно имеет тип TObject, т.е. в него можно "положить" любой объект. Однако, еси у нас тип дпнных Integer, то можно воспользоваться следующим фокусом. Т.к. TObject это указатель, то по размеру он совместим с Integer (оба 32bit). Тогда можно "сказать", что мы кладем в это свойство объект, находящийся по адресу, указанному в Integer-переменной. Для чтения нужно сделать обратное преобразование.

Спасибо большое, примерно то, что искал
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter