|
|
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
Есть процедура заполнения одного уровня дерева, назовем ее Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. При первом вызове FillLevel происходит вызов InitNode для каждого узла первого видимого уровня. В OnInitNode прописан вызов FillLevel(этой самой Node). Код: pascal 1. 2. 3. 4. 5. В дереве 5 уровней вложенности. Путем трассировки удалось выяснить следующее поведение: На данный момент мы получаем заполненными первый видимый уровень и второй невидимый уровень. Ветки первого уровня отрисованы с "+" плюсиками. Однако это не значит, что заполнены остальные уровни. Заполнены только первый и второй. Теперь щелкаем мышью по одной из веток первого уровня. Это приводит к вызову InitNode уже для дочерней невидимой ветки, и для всех ее подуровней на полную глубину. Хотя мы еще даже не открыли ветку, а просто поставили на нее курсор. Так какова же логика вызова OnInitNode? В какой момент она вызывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2020, 16:16 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
Первый раз OnInitNode вызывается только для первого уровня, а при клике на ветку вдруг собирает ВСЕ ее дочерние ветки на полную глубину. В чем логика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2020, 16:27 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
svnvlad Так какова же логика вызова OnInitNode? В какой момент она вызывается? Вроде как очевидна. В момент инициализации ноды. В коде в вызвали ATree.AddChild - момент инициализации ноды наступил. Обычно в этот момент назначают флаги уже созданной ноде. К примеру, можно не заполнять 2 уровень, а чтобы плюсик был, достаточно указать vsHasChildren. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2020, 16:37 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
goldmi45 svnvlad Так какова же логика вызова OnInitNode? В какой момент она вызывается? Вроде как очевидна. В момент инициализации ноды. В коде в вызвали ATree.AddChild - момент инициализации ноды наступил. Которой, той которая Child? Но трассировка это не подтверждает. OnInitNode вызывается только для первого уровня. А для Child-ов не вызывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2020, 16:46 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
goldmi45 К примеру, можно не заполнять 2 уровень, а чтобы плюсик был, достаточно указать vsHasChildren. А заполнять в какой момент? OnExpanding? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2020, 15:27 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
svnvlad goldmi45 К примеру, можно не заполнять 2 уровень, а чтобы плюсик был, достаточно указать vsHasChildren. А заполнять в какой момент? OnExpanding? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2020, 08:31 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
goldmi45 svnvlad пропущено... А заполнять в какой момент? OnExpanding? Да Сделал так, что процедура заполнения уровня ChangeQueryGroup(Aparent: PVirtualNode) заполняет уровень и назначает ноде статус vsHasChildren, если есть дочерние, а на событие OnInitChildren и на событие OnExpanding повесил процедуру заполнения нижнего уровня для данной родительской ветки ChangeQueryGroup(Node). Теперь если нажимаю на плюсик - заполняется и открывается дочерний уровень. Но если нажимаю просто на ветку, дочерний уровень заполняется, но плюсик исчезает, и ветку невозможно открыть. Почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2020, 08:19 |
|
||
|
VirtualStringTree - не могу понять, по какому принципу работает событие OnInitNode
|
|||
|---|---|---|---|
|
#18+
Понял, кроме vsHasChildren надо еще указывать ChildCount. Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2020, 08:44 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39972482&tid=2038179]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 417ms |

| 0 / 0 |
