|
|
|
VirtualStringTree - ускорить перерисовку, избавившись от многократного OnChange
|
|||
|---|---|---|---|
|
#18+
На событии OnChange висит процедура перечитывания нижней дочерней сетки (обычной DBGrid), зависящей от этого дерева. Я заметил, что при формировании дерева на каждую запись дерева заново перечитывается нижняя сетка с данными. Если 100 элементов в дереве, то нижняя сетка перечитается 100 раз. Возможно это связано с тем, что я поставил на события OnExpanded и OnCollapsed такой код: Код: pascal 1. 2. Чтобы объединить действие раскрытия ветки с действием фокусировки на этой ветке. А то было по-дурацки. Нажимаешь плюсик, а потом еще отдельно нажать на саму ветку надо, чтобы курсор туда переместить. Вообще раздражает это дерево из-за таких вот многочисленных непродуманных вещей. Ладно, теперь у меня при открытии ветки курсор всегда бегает за мышью - где щелкаю, туда и встает. Но OnChange вызывается каждый раз. Можно ли применить что-то типа DisableControls / EnableControls, чтобы не срабатывало каждый раз OnChange на каждую запись, а только после полной перерисовки дерева? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2020, 14:20 |
|
||
|
VirtualStringTree - ускорить перерисовку, избавившись от многократного OnChange
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2020, 14:32 |
|
||
|
VirtualStringTree - ускорить перерисовку, избавившись от многократного OnChange
|
|||
|---|---|---|---|
|
#18+
svnvlad, повесь код влияния на нижний грид не в ончанже, а в таймере (на 0.3 сек). А в ончанже: стоптаймер старттаймер В онтаймере: - стоптаймер - активировать нижний грид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2020, 14:40 |
|
||
|
VirtualStringTree - ускорить перерисовку, избавившись от многократного OnChange
|
|||
|---|---|---|---|
|
#18+
goldmi45 Это кстати там стоит, в процедуре заполнения дерева. Но проблема в том, что я заполняю все ветки дерева данными сразу, даже те, которые закрыты. И для этого процедура заполнения дерева вызывается в OnInitNode. Соответственно, сколько дочерних веток, столько раз и вызывается процедура заполнения. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: pascal 1. 2. 3. 4. 5. А полностью дерево заполняется (а не по мере необходимости) - для того, чтобы можно было осуществить такое поведение: Когда мы сфокусированы на родительской ветке, то в нижней дочерней сетке отображаются все данные этой ветки и все данные ее дочерних веток. А при фокусировке на дочерней ветке в нижней сетке уже отфильтровываются лишние записи, остаются только относящиеся к сфокусированной ветке и ее дочерних, и так далее. В нижней сетке это осуществляется таким образом: дерево прочитывается рекурсивно от текущей ветки вниз и составляется список id веток через запятую, а потом в нижней сетке в запрос подставляется как WHERE group_id IN (1,2,3,4,5) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2020, 14:47 |
|
||
|
VirtualStringTree - ускорить перерисовку, избавившись от многократного OnChange
|
|||
|---|---|---|---|
|
#18+
svnvlad А то было по-дурацки. Нажимаешь плюсик, а потом еще отдельно нажать на саму ветку надо, чтобы курсор туда переместить. Вообще раздражает это дерево из-за таких вот многочисленных непродуманных вещей. В проводнике так сделай и удивись. Далеко не всем нужно фокусировать узел при его раскрытии. Это даже более бесячее поведение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2020, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=41&tid=2038177]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
84ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 422ms |

| 0 / 0 |
