Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Virtual TreeView] Обновить 3-state checkbox... Поменял состояния детей, а родителя как? 
:(
    Опции темы
Marsianin
  Дата 31.7.2007, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 48
Регистрация: 24.11.2004

Репутация: нет
Всего: нет



Статью прочитал, да и уже какое-то время плотно ковыряю VT, всё ясно, однако не могу додумать одну вещь.
При создании дерева у меня есть дети, у которых родитель имеет triStateCheckBox.
Так вот эти дети сами имеют checkbox и при создании имеют различные положения.
Когда дерево показывается дети все прочеканы по разному, а вот родитель - нет.
Если кликать мышкой, то автоматом всё встаёт на свои места и родитель чекается, как надо.

Как, если я программно изменил состояния детей, обновить состояние triCheckBox их родителя?

Это сообщение отредактировал(а) Marsianin - 31.7.2007, 05:48
PM MAIL   Вверх
AriX
Дата 31.7.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Marsianin
Код
VT.TreeOptions.AutoOptions := VT.TreeOptions.AutoOptions + [toAutoTristateTracking];

И также у родителей нужно выставить:
Код
Node.CheckType := ctTriStateCheckBox


Это сообщение отредактировал(а) AriX - 31.7.2007, 13:08
PM MAIL   Вверх
Marsianin
Дата 1.8.2007, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 48
Регистрация: 24.11.2004

Репутация: нет
Всего: нет



Не, ты не понял.
Это дело у меня по умолчанию включено и всё делается как надо.
Проблема в том, что когда я программно заполняю дерево и сначала делаю родителя (присваивая ему triStateCheckbox), а потом этому родителю создаю детей, у которых обычный checkbox, и дети эти имеют всякие разные значения.
Так вот после создания всех этих детей состояние чекбокса родителя - снято, а должно быть серым.
Как только тыкаешь в дереве мышкой по одному из детей и меняешь его состояние, то тогда и начинает срабатывать toAutoTristateTracking и родитель меняет своё состояние автоматом.
Вообщем как вызвать руками ту процедуру, которая автоматом происходит при чеканьи руками детей...
PM MAIL   Вверх
AriX
Дата 1.8.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Marsianin, вот так работает на ура, только что проверил:
Код

var
  Node: PVirtualNode;
begin
  Node := VT.AddChild(nil);
  VT.CheckType[Node] := ctTriStateCheckBox;
  Node := VT.AddChild(VT.GetFirst);
  VT.CheckType[Node] := ctCheckBox;
  VT.CheckState[Node] := csCheckedNormal;
  Node := VT.AddChild(VT.GetFirst);
  VT.CheckType[Node] := ctCheckBox;
  VT.CheckState[Node] := csUncheckedNormal;
end;

Может быть ты работаешь непосредственно с данными в PVirtualNode? А нужно использовать свойства CheckType и CheckState дерева.

Добавлено через 57 секунд
Хм, а я и сам написал Node.CheckType smile Извини, ошибся.
PM MAIL   Вверх
Marsianin
Дата 2.8.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 48
Регистрация: 24.11.2004

Репутация: нет
Всего: нет



Так, понятное дело, работает.
Пока сделал именно так, но в первом случае у меня они инициализировались в событии OnInitNode и там я им присваивал
Node.CheckState:=csCheckedNormal;

В этом случае не обновляется родитель, как я только не пробовал  smile 
PM MAIL   Вверх
AriX
Дата 2.8.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Marsianin, ну так я и говорю, юзать нужно не PVirtualNode.CheckState, а TVirtualStringTree.CheckState[Node: PVirtualNode].
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.