|
|
|
Как обновлять 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?fid=58&gotonew=1&tid=2041916]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 357ms |

| 0 / 0 |
