powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как обновлять VirtualStringTree при помощи Timer
20 сообщений из 45, страница 2 из 2
Как обновлять VirtualStringTree при помощи Timer
    #39508738
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавторЧто ж ты упертый такой.

Ну, твори тогда свой рилтайм сам.

Так бы и сказал что ничего дельного не можешь предложить
Тебе уже массу готовых вариантов предложили, выбирай да пользуйся. Какого еще предложения ты ждешь?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508742
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены.
Вот что мне надо знать, как это реализовать.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508743
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMag,

что такое TData - непонятно. Как не понятно, что такое NamNod, CoinName и прочее. Но не суть...
Вот у тебя два корневых узла, которые = базам (две базы). Внутри каждого корневого узла есть ещё узлы, которые ты получаешь из нд ADOT_P и ADOT_M. Т.е. ты можешь установить соответствие узел = строка_в_наборе_данных. Как это будет, по ключу или по уникальному названию - тоже не суть. Ну а теперь по таймеру ты можешь открывать наборы данных и сравнивать данные в них и в дереве. Если есть такой узел - обновляем у него данные (можно и определить принцип, изменились ли данные), если нет такой записи - удаляем узел, а если такой узел отсутствует - добавляем.
Этот алгоритм используем всегда. При первом запуске, когда в дереве нет ни одного узла - просто добавляем данные из набора.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508746
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчто такое TData - непонятно. Как не понятно, что такое NamNod, CoinName и прочее. Но не суть...
Вот у тебя два корневых узла, которые = базам (две базы). Внутри каждого корневого узла есть ещё узлы, которые ты получаешь из нд ADOT_P и ADOT_M. Т.е. ты можешь установить соответствие узел = строка_в_наборе_данных. Как это будет, по ключу или по уникальному названию - тоже не суть. Ну а теперь по таймеру ты можешь открывать наборы данных и сравнивать данные в них и в дереве. Если есть такой узел - обновляем у него данные (можно и определить принцип, изменились ли данные), если нет такой записи - удаляем узел, а если такой узел отсутствует - добавляем.
Этот алгоритм используем всегда. При первом запуске, когда в дереве нет ни одного узла - просто добавляем данные из набора.

спасибо, добавлю.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508751
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю отказаться от дерева и разбить данные на два грида.
Приемущества:
1. два курсора, для каждой базы свой.
2. измениение верхнего грида (добавление строк) не дёргает нижний грид
3. никаких свёрнутых/развёрнутых узлов
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508752
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПредлагаю отказаться от дерева и разбить данные на два грида.
Приемущества:
1. два курсора, для каждой базы свой.
2. измениение верхнего грида (добавление строк) не дёргает нижний грид
3. никаких свёрнутых/развёрнутых узлов
Так человек и будет всю жизнь шарахаться от дерева, пока не понадобится работать со структурой произвольной вложенности...
... или пока не понадобится показывать одновременно больше одной пары мастер-деталь.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508753
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понял я не правильно оформляю статический узел и заполняю его, верно ?
Код: pascal
1.
2.
3.
4.
5.
      Level := 0;
      TData := VST1.GetNodeData(RootNode);
      TData.NodeName := '1 рут строка';
      bd.ADOT_P.First;
      while not(bd.ADOT_P.Eof) do



Его же можно заполнить в другом месте ?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508755
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И где хранится индекс узла ? или под него надо самому создавать ?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508761
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДА если были удалены ВСЕ данные, которые пользователь вывел на экран - что тогда показывать после "обновления"?

Пустое дерево, по вкусу над деревом TPanel с большими буквами "всё кончилось"

Вот пришёл я в магазин, стою перед фитриной, обувь разглядываю.
Тут приходит продавшица с покупателем, открывает витрину и отдает ему последнюю пару.
А ведь я же её разглядывал!!!!!

Что я должен увидеть? пустую витрину. Фактическое ее состояние.
А вовсе не призрак уже проданных и униесенных другим покупателем ботинок.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508763
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавтор Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены.
Вот что мне надо знать, как это реализовать.

Вариант 1:

открываешь справку VTV и читаешь какие там есть свойства и методы

делаешь пометки на названия с такими словами как Expanded, Current, Selected

выясняешь какие метода/свойства с какими ограничениямиможно использовать

планируешь свой алгоритм исходя их из этого

Кстати, ты забыл еще точное состояние вертикальной и горизонтальной прокруток, с точностью до пикселя, а не до ноды.

Вариант 2: пишешь алгоритм, которые не мешает дереву жить и не убивает его по каждому чиху, когда нужно и когда не нужно. В таком алгоритме не нужно ни сохранять ни восстанавливать никаких состояний - потому что ты их не портишь.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508765
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagЕго же можно заполнить в другом месте ?

прочитай справку по VTV, по идеологии ее работы и организации процесса

в принципе можно заполнять в разных местах, но тогда нужно будет руками управлять флагом типа initialized
либо в соответсвующем эвент

как минимум прочитай примеры программ, которых в составе VTV шесть штук
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508766
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же таймер должен быть повешен не постоянно, а лишь в моменты неактивности пользователя. Который в противном случае тебе руки оторвет и будут вобщем-то по своему прав :)
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508767
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДИ, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД

....а если есть ещё настраиваемые пользователями критерии фильтрации данных (что, впрочем, хорошо ложатся на грид, а на дерево - труднее), то кнопку Обновить еще и включатеся по изменению критериев.
Да еще бы неплохо авто-обновление если пользователь сделал паузу в изменении криетриев, на 0,7 - 2 секунды.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508775
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochчччДИ, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД

....а если есть ещё настраиваемые пользователями критерии фильтрации данных (что, впрочем, хорошо ложатся на грид, а на дерево - труднее), то кнопку Обновить еще и включатеся по изменению критериев.
Да еще бы неплохо авто-обновление если пользователь сделал паузу в изменении криетриев, на 0,7 - 2 секунды.
Не, я забил на такое. Ввел кнопку "Применить" (для фильтров). Юзеров дофига, данных еще больше, условия фильтрации могут быть тяжелыми - интерфейс подтормаживает иногда, когда автоматически применяешь условия фильтрации.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508779
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиОпять же таймер должен быть повешен не постоянно, а лишь в моменты неактивности пользователя. Который в противном случае тебе руки оторвет и будут вобщем-то по своему прав :)
Да и при неактивности порой тоже.
...
Все зависит от места применения. Например, обстановку на карте Земли в случае ядерного нападения, на командном центре порой полезно видеть именно текущую.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508784
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторArioch спасибо, буду читать.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508786
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я Дурак. все исправил и заработало.

Надо было всего лишь в таймер поместить не всю процезуру а всего лишь заполнение какие меняются. Спасибо тем кто подсказал!

Последний баналбный вопрос что отвечает за выделение одной ячейки. Тоесть хочу выделять строку со всеми на ней ячейки
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508876
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повесь на событие Before Paint - если Row текущий - независимо от столбца - то менять цвет фона.
https://stackoverflow.com/a/3314972

я когда-то делал патч, чтобы от выделенной ячейки крестом строка и/или столбец выделялись, но это было давно и его никто не поддержал.

http://www.cnblogs.com/shangdawei/p/4032310.html
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508897
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagПоследний баналбный вопрос что отвечает за выделение одной ячейки. Тоесть хочу выделять строку со всеми на ней ячейки
Код: pascal
1.
VTV.SelectionOptions:= VTV.SelectionOptions + [toFullRowSelect]


шел бы ты уже, наконец, читать документацию...
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508910
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....или исходники


Use Source, Luke!
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как обновлять VirtualStringTree при помощи Timer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]