|
|
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#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. 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. Если завожу его в таймер древо постоянно сворачивается. Что делать ? Как быть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2017, 21:07:11 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMag... Если завожу его в таймер древо постоянно сворачивается. Что делать ? Как быть ? Писать код, поведение которого тебя устроит? AntiMag Как обновлять VirtualStringTree при помощи Timer Для начала определись, что означает для тебя "обновлять". ... В своем коде ты сперва полностью "убиваешь" дерево: Код: pascal 1. - а потом строишь его фактически с нуля. Все узлы дерева по умолчанию свернуты. Вот ты и получаешь их свернутыми. Но ты при построении можешь задавать свойство "Expanded" в True, но устроит ли тебя такое поведение? Можешь запомнить состояние узлов перед перестроением, а при построении дерева использовать эти данные. Для этого, как минимум, нужно придумать, как один узел отличать от другого. Дальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит? А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов. .... Т.обр., чччДAntiMag Как обновлять VirtualStringTree при помощи Timer Для начала определись, что означает для тебя " обновлять ". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2017, 21:52:32 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Причем здесь таймер. Код "по кнопке" себя по-другому ведет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 00:31:15 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AX-ClassПричем здесь таймер. Код "по кнопке" себя по-другому ведет? "По кнопке" код выполняется хотя бы в ожидаемый момент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 00:38:00 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMag, У VirtualStringTree перед изменением содержимого нужно вызывать метод BeginUpdate, а после изменений - EndUpdate. Тогда будет работать быстрее и не будет мигать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 08:08:05 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
чччД"По кнопке" код выполняется хотя бы в ожидаемый момент. По таймеру тоже ожидаемый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 08:55:33 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Не нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь. Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ? Другой вариант. Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ? Отсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. Пользователь закрывает узел и раскрывает снова - удаляются и считываются заново все подузлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 09:04:52 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
каждые 10 секунд идет обновление базы с других ресурсов, от туда достается последняя строчка и выводится на экран. по кнопке каждые 10 секунд щелкать ? каждая строка обновляется в таком режиме. если не ставить Код: pascal 1. то она будет дорисовывать постоянно новое но не затирать старое. авторНе нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь. Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ? Другой вариант. Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ? Отсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. Пользователь закрывает узел и раскрывает снова - удаляются и считываются заново все подузлы. Рассчитано на 1 пользователя. 1 и удаляет узлы и добавляет. авторgoldmi45 - спасибо , сделаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:00:29 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
DimaBrОтсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. собственно именно в этом и идея VTV если этого не делать, то и VTV нужен гораздо меньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:12:10 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagот туда достается последняя строчка и выводится на экран анализируй изменения и в дереве меняй только те ноды, которые надо AntiMagто она будет дорисовывать постоянно новое но не затирать старое. так затирай старые, но не всЕ, а только те, которые удалились ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:13:13 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
автор Дальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит? А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов. Вот да, одна из проблем когда происходит обновление курсор сбрасывается, его как то можно запомнить и потом загружать ? и допустим сохранять положение раскрыт узел или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:19:13 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Всё равно ваше дерево будет постоянно дёргаться. Не думаю что это понравится пользователю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:27:02 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Хотелось бы услышать постановку задачи, а не метод её выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:28:04 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
авторХотелось бы услышать постановку задачи, а не метод её выполнения Есть база данных которая обновляется каждые 10 секунд из внешних источников. Необходимо вывести 2 статических узла. и заполнить их по соответствию из базы, при этом автоматически обновлять данные в этих узлах когда поступают новые данные. (Количество дочерних узлов устанавливает пользователь в базе то есть он добавляет строку "аааааа" и программа база начинает заполнять дочернюю базу из которой достается последняя строчка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:34:18 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавторДальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит? А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов. Вот да, одна из проблем когда происходит обновление курсор сбрасывается, его как то можно запомнить и потом загружать ? и допустим сохранять положение раскрыт узел или нет? Ну вот ты подумай сперва, определись что именно тебе нужно, разбери разные варианты, потом подумай о методах достижения, а уж потом только кодируй. Все равно никто за тебя задачу "вот так правильно" не решит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:36:34 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
строки=узлы в БД=дерево - только добавляются, или иногда удаляются тоже? а в общем, можно только повторить: Ariochанализируй изменения и в дереве меняй только те ноды, которые надо не убивай дерево, а делай в нём минимальные изменения и только нужные. не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:38:02 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавторХотелось бы услышать постановку задачи, а не метод её выполнения Есть база данных которая обновляется каждые 10 секунд из внешних источников. Необходимо вывести 2 статических узла. и заполнить их по соответствию из базы, при этом автоматически обновлять данные в этих узлах когда поступают новые данные. (Количество дочерних узлов устанавливает пользователь в базе то есть он добавляет строку "аааааа" и программа база начинает заполнять дочернюю базу из которой достается последняя строчка) Ну и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались". Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?" ... а если в новой сводке данные не изменились - зачем она вообще нужна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:46:01 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
автор не убивай дерево, а делай в нём минимальные изменения и только нужные. не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран Можешь какой нить пример скинуть ? Желательно что бы понять можно было какой эвент используется. А то я пытаюсь это представить и на ум тока приходит что код разбить на 2 процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:48:34 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Ariochстроки=узлы в БД=дерево - только добавляются, или иногда удаляются тоже? а в общем, можно только повторить: Ariochанализируй изменения и в дереве меняй только те ноды, которые надо не убивай дерево, а делай в нём минимальные изменения и только нужные. не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран А если были удалены ВСЕ данные, которые пользователь вывел на экран - что тогда показывать после "обновления"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:49:30 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
авторНу и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались". Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?" ... а если в новой сводке данные не изменились - зачем она вообще нужна? Ок, real-time так понятнее мысль программы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:51:05 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавторне убивай дерево, а делай в нём минимальные изменения и только нужные. не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран Можешь какой нить пример скинуть ? Желательно что бы понять можно было какой эвент используется. А то я пытаюсь это представить и на ум тока приходит что код разбить на 2 процедуры. Не будет тебе никакого кода, 100%. Пока ты сам алгоритм не всосешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:51:53 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Более понятней, представь что тебе поступают данные температуры за окном и их надо в режиме реального времени выводить там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:52:25 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавторНу и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались". Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?" ... а если в новой сводке данные не изменились - зачем она вообще нужна? Ок, real-time так понятнее мысль программы ? Что ж ты упертый такой. Ну, твори тогда свой рилтайм сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 12:53:55 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
авторЧто ж ты упертый такой. Ну, твори тогда свой рилтайм сам. Так бы и сказал что ничего дельного не можешь предложить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:07:53 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
DimaBrНе нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь. Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ? Другой вариант. Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ? Отсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. Пользователь закрывает узел и раскрывает снова - удаляются и считываются заново все подузлы. Да. В некоторых случаях можно обновлять дерево. Например, когда данные менялись, но не удалялись или добавлялись. При этом достаточно лишь перечитать данные, идентификаторы которых "хранятся" в ВИДИМЫХ на экране узлах. В некоторых случаях можно показывать и удаленные данные: структура дерева остается прежней, просто удаленные узлы помечаются особым образом (цветом или <данные удалены>). Мне такой режим подсказал один из заказчиков, и я его теперь довольно часто использую. И, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД "данные изменились"(т.е., поменялись, удалились, добавились). Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:14:10 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавторЧто ж ты упертый такой. Ну, твори тогда свой рилтайм сам. Так бы и сказал что ничего дельного не можешь предложить Тебе уже массу готовых вариантов предложили, выбирай да пользуйся. Какого еще предложения ты ждешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:17:00 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
автор Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены. Вот что мне надо знать, как это реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:21:09 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMag, что такое TData - непонятно. Как не понятно, что такое NamNod, CoinName и прочее. Но не суть... Вот у тебя два корневых узла, которые = базам (две базы). Внутри каждого корневого узла есть ещё узлы, которые ты получаешь из нд ADOT_P и ADOT_M. Т.е. ты можешь установить соответствие узел = строка_в_наборе_данных. Как это будет, по ключу или по уникальному названию - тоже не суть. Ну а теперь по таймеру ты можешь открывать наборы данных и сравнивать данные в них и в дереве. Если есть такой узел - обновляем у него данные (можно и определить принцип, изменились ли данные), если нет такой записи - удаляем узел, а если такой узел отсутствует - добавляем. Этот алгоритм используем всегда. При первом запуске, когда в дереве нет ни одного узла - просто добавляем данные из набора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:21:57 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
авторчто такое TData - непонятно. Как не понятно, что такое NamNod, CoinName и прочее. Но не суть... Вот у тебя два корневых узла, которые = базам (две базы). Внутри каждого корневого узла есть ещё узлы, которые ты получаешь из нд ADOT_P и ADOT_M. Т.е. ты можешь установить соответствие узел = строка_в_наборе_данных. Как это будет, по ключу или по уникальному названию - тоже не суть. Ну а теперь по таймеру ты можешь открывать наборы данных и сравнивать данные в них и в дереве. Если есть такой узел - обновляем у него данные (можно и определить принцип, изменились ли данные), если нет такой записи - удаляем узел, а если такой узел отсутствует - добавляем. Этот алгоритм используем всегда. При первом запуске, когда в дереве нет ни одного узла - просто добавляем данные из набора. спасибо, добавлю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:26:26 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Предлагаю отказаться от дерева и разбить данные на два грида. Приемущества: 1. два курсора, для каждой базы свой. 2. измениение верхнего грида (добавление строк) не дёргает нижний грид 3. никаких свёрнутых/развёрнутых узлов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:40:13 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
DimaBrПредлагаю отказаться от дерева и разбить данные на два грида. Приемущества: 1. два курсора, для каждой базы свой. 2. измениение верхнего грида (добавление строк) не дёргает нижний грид 3. никаких свёрнутых/развёрнутых узлов Так человек и будет всю жизнь шарахаться от дерева, пока не понадобится работать со структурой произвольной вложенности... ... или пока не понадобится показывать одновременно больше одной пары мастер-деталь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:47:23 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Как я понял я не правильно оформляю статический узел и заполняю его, верно ? Код: pascal 1. 2. 3. 4. 5. Его же можно заполнить в другом месте ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:53:21 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
И где хранится индекс узла ? или под него надо самому создавать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 13:55:36 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
чччДА если были удалены ВСЕ данные, которые пользователь вывел на экран - что тогда показывать после "обновления"? Пустое дерево, по вкусу над деревом TPanel с большими буквами "всё кончилось" Вот пришёл я в магазин, стою перед фитриной, обувь разглядываю. Тут приходит продавшица с покупателем, открывает витрину и отдает ему последнюю пару. А ведь я же её разглядывал!!!!! Что я должен увидеть? пустую витрину. Фактическое ее состояние. А вовсе не призрак уже проданных и униесенных другим покупателем ботинок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:04:31 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagавтор Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены. Вот что мне надо знать, как это реализовать. Вариант 1: открываешь справку VTV и читаешь какие там есть свойства и методы делаешь пометки на названия с такими словами как Expanded, Current, Selected выясняешь какие метода/свойства с какими ограничениямиможно использовать планируешь свой алгоритм исходя их из этого Кстати, ты забыл еще точное состояние вертикальной и горизонтальной прокруток, с точностью до пикселя, а не до ноды. Вариант 2: пишешь алгоритм, которые не мешает дереву жить и не убивает его по каждому чиху, когда нужно и когда не нужно. В таком алгоритме не нужно ни сохранять ни восстанавливать никаких состояний - потому что ты их не портишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:07:52 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagЕго же можно заполнить в другом месте ? прочитай справку по VTV, по идеологии ее работы и организации процесса в принципе можно заполнять в разных местах, но тогда нужно будет руками управлять флагом типа initialized либо в соответсвующем эвент как минимум прочитай примеры программ, которых в составе VTV шесть штук ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:09:41 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Опять же таймер должен быть повешен не постоянно, а лишь в моменты неактивности пользователя. Который в противном случае тебе руки оторвет и будут вобщем-то по своему прав :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:10:56 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
чччДИ, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД ....а если есть ещё настраиваемые пользователями критерии фильтрации данных (что, впрочем, хорошо ложатся на грид, а на дерево - труднее), то кнопку Обновить еще и включатеся по изменению критериев. Да еще бы неплохо авто-обновление если пользователь сделал паузу в изменении криетриев, на 0,7 - 2 секунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:12:44 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AriochчччДИ, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД ....а если есть ещё настраиваемые пользователями критерии фильтрации данных (что, впрочем, хорошо ложатся на грид, а на дерево - труднее), то кнопку Обновить еще и включатеся по изменению критериев. Да еще бы неплохо авто-обновление если пользователь сделал паузу в изменении криетриев, на 0,7 - 2 секунды. Не, я забил на такое. Ввел кнопку "Применить" (для фильтров). Юзеров дофига, данных еще больше, условия фильтрации могут быть тяжелыми - интерфейс подтормаживает иногда, когда автоматически применяешь условия фильтрации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:20:32 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
эндиОпять же таймер должен быть повешен не постоянно, а лишь в моменты неактивности пользователя. Который в противном случае тебе руки оторвет и будут вобщем-то по своему прав :) Да и при неактивности порой тоже. ... Все зависит от места применения. Например, обстановку на карте Земли в случае ядерного нападения, на командном центре порой полезно видеть именно текущую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:24:45 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
авторArioch спасибо, буду читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:33:05 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
Я Дурак. все исправил и заработало. Надо было всего лишь в таймер поместить не всю процезуру а всего лишь заполнение какие меняются. Спасибо тем кто подсказал! Последний баналбный вопрос что отвечает за выделение одной ячейки. Тоесть хочу выделять строку со всеми на ней ячейки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 14:36:57 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
повесь на событие Before Paint - если Row текущий - независимо от столбца - то менять цвет фона. https://stackoverflow.com/a/3314972 я когда-то делал патч, чтобы от выделенной ячейки крестом строка и/или столбец выделялись, но это было давно и его никто не поддержал. http://www.cnblogs.com/shangdawei/p/4032310.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 17:01:53 |
|
||
|
Как обновлять VirtualStringTree при помощи Timer
|
|||
|---|---|---|---|
|
#18+
AntiMagПоследний баналбный вопрос что отвечает за выделение одной ячейки. Тоесть хочу выделять строку со всеми на ней ячейки Код: pascal 1. шел бы ты уже, наконец, читать документацию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2017, 17:28:35 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041916]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
662ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 987ms |

| 0 / 0 |
