|
|
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Есть форма, на которой лежит TTreeView с узлами. Подключаемся к удаленной машине по RDP, там запускаем приложение, потом закрываем сеанс RDP и подключаемся опять. При подключении в приложение приходит сообщение WM_SYSCOLORCHANGE, которое трансформируется в CM_SYSCOLORCHANGE и рассылается всем контролам. TTreeView это сообщение обрабатывает так Код: pascal 1. 2. 3. 4. 5. 6. потом попадаем в TWinControl Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. Вопрос: уничтожение всех TTreeNode, а потом создание их заново это адекватное решение? Нигде в VCL мне не попадалось уничтожение объектов при уничтожении хендла окна. Проблема в том, что у меня объекты TTreeNode закешированы в приложении и после переподключения по RDP у меня начинают лезть AV. Сейчас буду смотреть как можно обновить сохраненные объекты С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 12:56 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Вопрос: уничтожение всех TTreeNode, а потом создание их заново это адекватное решение? Кэшировать придется Id-шники узлов а не хендлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 13:14 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис Кэшировать придется Id-шники узлов а не хендлы. Я так понимаю, что узнать о том, что произошло перепостроение дерева невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 13:51 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, TTreeView - он такой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 13:53 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Я так понимаю, что узнать о том, что произошло перепостроение дерева невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 14:30 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Тоже самое в листвью. Так работает винда. Vcl пришлось городить костыли для обхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 17:02 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
white_nigger Так работает винда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 17:25 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис Кэшировать придется Id-шники узлов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 17:39 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Соколинский Борис Кэшировать придется Id-шники узлов Дык свои надо создавать, а не на чужие надеяться :) Если неохота заморачиваться, можно в RecreateWnd заменить в кэше handle-ы узлов (или сами TTreeNode, что там у тебя) на индексы, а после унаследованного метода сделать обратную замену. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2020, 22:54 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
А зачем кешировать объекты, которые по сути есть кишки контрола и которыми он волен распоряжаться как захочет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 10:26 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Напоролся я в свое время на, скажем так, особенности TTreeView в RDP. Как я понял, оно полностью пересоздается во время логина. Соответственно, все старые указатели, IDшники и т п становятся неверны. Долго и нудно искали, пока нашли концы. Ну вот - так винда работает. Что с неё взять? ) Решением было полностью отвязать данные от гуя. Был грешок - хранили в Data TTreeView листьев данные. И реконструировать дерево каждый раз из кэша при логине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 10:55 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
makhaon Был грешок - хранили в Data TTreeView листьев данные Итак, что сделал: 1) Перекрыть RecreateWnd нельзя, потому что он не виртуальный 2) Перекрывать обработчик CM_RECREATEWND не имеет смысла, т.к. дерево он уничтожает, но создает обратно только если контрол видимый 3) Перекрыл пару CreateWnd/DestroyWnd 4) Т.к. ссылка у меня была двусторонняя, в объекте сохранялся TTreeNode, а в TTreeNode.Data сам объект, то объявил такой интерфейс Код: pascal 1. 2. 3. 4. и реализовал его в каждом классе, который работал с деревом Код: pascal 1. 2. 3. 4. ну а теперь банальная реализация дерева Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 12:59 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
makhaon И реконструировать дерево каждый раз из кэша при логине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 13:01 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
интересно у virtualtreeview такая же ситуация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 13:21 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
энди, У virtualtreeview свои проблемы. А именно - неоправданная монструозность и чрезмерная кастомизация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 13:44 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Забыл самое главное. Т.к. при пересоздании узлов сохраняются не свойства дерева, а значения, записанные в TTreeNode, то нужно быть очень осторожным с прямым вызовом TreeView_SetItem. Например процедура, которая одновременно меняла ImageIndex, SelectedIndex, Text Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. была переписана так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 14:24 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
rgreat У virtualtreeview свои проблемы. А именно - неоправданная монструозность и чрезмерная кастомизация. Первое - следствие второго, зато на нем можно сделать всякие крутые штуки. И монструозность его сильно преувеличена. По теме - по-прежнему не понимаю, зачем хранить указатели на узлы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 14:39 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal Первое - следствие второго, зато на нем можно сделать всякие крутые штуки. Только вот простые, повседневные, шутки на нем делать не удобно. И монструозность его сильно преувеличена. 1.8 Мега чисто сорцов для для дерева - это содомия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 15:30 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal По теме - по-прежнему не понимаю, зачем хранить указатели на узлы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2020, 18:30 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Например, чтобы обновлять их текст и иконки Может, легче сделать отображение по коллбэку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2020, 10:30 |
|
||
|
TTreeView и RDP
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal Может, легче сделать отображение по коллбэку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2020, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40004515&tid=2037963]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
18ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 319ms |

| 0 / 0 |
