powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VirtualTreeView: запрет выделения определенных узлов
17 сообщений из 17, страница 1 из 1
VirtualTreeView: запрет выделения определенных узлов
    #39819276
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, плиз, как у нем с включенным мультиселектом организовать запрет выделения определенных узлов. Подходящего обработчика что-то не нашел.
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819282
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Установи в дата какой-нибудь флажок и проверяй его на селекте
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819290
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

Флажков полно, - событие какое? Ничего похожего на OnCanSelectNode пока что не наблюдаю.
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819298
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F, OnChange(Sender: TBaseVirtualTree; Node: PVirtualNode);

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  if Assigned(Node) then begin
    Sender.Selected[Node] := Odd(Node.Index);
    if Odd(Node.Index) then
      Sender.FocusedNode := Node
    else
      Sender.FocusedNode := nil
  end;
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819299
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПодскажите, плиз, как у нем с включенным мультиселектом организовать запрет выделения определенных узлов. Подходящего обработчика что-то не нашел.
А в фокус такие узлы можно устанавливать?
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819311
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

см. реализацию TBaseVirtualTree.AddToSelection и TBaseVirtualTree.RemoveFromSelection.

Оба вызывают для нода метод Change(), который дергает OnChange(), а затем OnStateChange().
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819325
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёVlad F, OnChange(Sender: TBaseVirtualTree; Node: PVirtualNode);

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  if Assigned(Node) then begin
    Sender.Selected[Node] := Odd(Node.Index);
    if Odd(Node.Index) then
      Sender.FocusedNode := Node
    else
      Sender.FocusedNode := nil
  end;


Поразительно, событий туева хучс, а годного нет.
OnChange:
if Sender.GetNodeLevel(Node) = 0 then
Sender.FocusedNode := nil; // не работает, корневые продолжают выделяться
(toFullRowSelect = True, toMultiSelect = True)
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819331
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёVlad F,

см. реализацию TBaseVirtualTree.AddToSelection и TBaseVirtualTree.RemoveFromSelection.

Оба вызывают для нода метод Change(), который дергает OnChange(), а затем OnStateChange().
Высокоуровнего, не через per anus ad astrum, решения опять нет, так я понял?
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819340
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ты хочешь универсальную кнопку "сделай всё за меня"?
Зачем пошёл в программёра, а не в маги?
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819372
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

В обработчике (каком?) это парой строк нельзя сделать? Если не парой, то четырьмя? десятью? сколькими? Никто что ли примера, помочь, не может привести? Я только пару недель как его поставил и надо дофига функционала с DevExpress оперативно на него перевести.
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819390
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,
Код: pascal
1.
if Sender.GetNodeLevel(Node) = 0 then


может это условие не срабатывает?
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819401
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Все срабатывает, дело, видимо в принципиальной нерешаемости данной задачи в ейном OnChange. Не с первой попытки, но нашел таки надёжное решение в сети четырьмя строками в BeforeItemPaint (!), работающее даже в случае выделения сразу пачки записей со шрифтом. Тему можно закрывать.
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819403
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Однако, через эту самую, к звёздам.))
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819520
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Судя по всему это ошибка ТВОЕЙ "архитектуры"
Вот смотри:
- сначала ты сервер тебе отдаёт результат селекта пусть даже без всяких where или where 1=1
- затем ты выбираешь ещё какие-то записи мультиселектом (т.е. накладываешь свой where id in (id1, id2, idk, idn...)
- потом ты зачем-то хочешь "корректировать" уже этот мультиселектный список.

Почему бы не морочиться с этой байдой, а просто обойтись тупыми ДУМЯ деревьями.
Слева - полное дерево. Справа - пустое. Посередине кнопки:
>>> Добавить выделенные (слева) и
<<< Убрать выделенные (справа)
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819544
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

Не устал ещё воду в ступе толочь?
Имеешь хоть какое-то решение поставленного вопроса, приведи его и дело с концом. Иначе, имхо, иногда лучше жевать, чем говорить. Задача, оказывается, через одно место, но все же решается, а общая проблема VST , имхо, состоит в том, что у него нет не только OnCanSelectNode, как у аналога из DevExpress, но и, вообще, ни одного события вокруг выделения узла.
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819584
ain-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПоразительно, событий туева хучс, а годного нет.
OnChange:
if Sender.GetNodeLevel(Node) = 0 then
Sender.FocusedNode := nil; // не работает, корневые продолжают выделяться
(toFullRowSelect = True, toMultiSelect = True)

Вы просто не умеете их готовить.

Код: pascal
1.
2.
3.
4.
5.
  if Sender.GetNodeLevel(Node) = 0 then begin
    Sender.Selected[Node] := False;
    Sender.FocusedNode    := nil;
    Exit;
  end;
...
Рейтинг: 0 / 0
VirtualTreeView: запрет выделения определенных узлов
    #39819596
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ain-2,

Все правильно, но вопрос был в конце концов в каком обработчике подобный код поместить.
Правильный ответ нашелся вот здесь:
http://forum.vingrad.ru/forum/topic-299578/kw-virtualstreengtree.html
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VirtualTreeView: запрет выделения определенных узлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]