sprinter |
Отправлено: 10.07.2003, 09:26 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Дамы++Господа,
Поделитесь опытом покорения TreeView.
Постановка задачи
- Получить объект который связан с выбранным узлом. Объект является структурой с int, double и строковой переменными:
typedef struct gor{
int idreg;
double a;
AnsiString Name;
} var_gor;
typedef var_gor* var_g;
var_gor *vv=new var_gor;
Последняя идет в значения узлов второго уровня, которые, собственно, и представляют интерес. Узлы добавляются из таблицы примерно так
vv->a=Table2->FieldByName("Amp")->AsFloat;
vv->idreg=Table2->FieldByName("IdReg")->AsFloat;
...
TV1->Items->AddChildObjectFirst(TV1->Items->
Item[Table2->FieldByName("IdReg")->AsInteger],
Table2->FieldByName("Name")->AsString,vv);
Предпосылки
- Судя по Хелпу и другим источникам с помощью строк типа
int idr=var_g(TV1->Selected->Data)->idreg;
AnsiString n=var_g(TV1->Selected->Data)->Name;
можно получить элементы структуры, связанной с выбранным узлом.
Результаты
- Как ни крути и какой элемент ни выбирай получаешь элементы
структуры от первого узла!!!
Как и/или Что имеет TreeView особенного? Напишите кто встречался с ентим.
Если есть рабочие примеры — буду премного благодарен.
|
|
Asher |
Отправлено: 10.07.2003, 10:44 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
В узел записываются не данные, а указатель на объект, он у тебя всего один, соответственно что в нем последнее в полях записанно, то он и возвращает.
Тебе надо свой vv=new var_gor; перед каждым
vv->a=Table2->FieldByName("Amp")->AsFloat;
vv->idreg=Table2->FieldByName("IdReg")->AsFloat;
...
TV1->Items->AddChildObjectFirst(TV1->Items->
Item[Table2->FieldByName("IdReg")->AsInteger],
Table2->FieldByName("Name")->AsString,vv);
только потом не забыть их всех delete
|
|
sprinter |
Отправлено: 10.07.2003, 13:56 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Да, очень на то похоже.
Но если в узле расположен не объект, а указатель на него, то не понятно, в чем выгода подхода по сравнению с организацией параллельного списку TreeView массива объектов? Ссылаться-то надо все равно по "глобальному" индексу (AbsoluteIndex) — когда есть Child индексы пунктов имеют сквозную нумерацию. И с delete меньше проблем...
Благодарю за внимание
|
|
Asher |
Отправлено: 10.07.2003, 14:59 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Если есть глобальный список объектов — то засовывай в дерево указатель на этот элемент списка.
С delete в общем никакой разницы вроде не видно
а все преимущество сводится к — в Selected + по индексу не искать, сразу указатель на требуемого (ссылаться по глобальному индексу только один раз, в момент генерации дерева)
|
|