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

Код: 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.
procedure TForm_VST.Pair;
Var
  I, J: integer;
begin
  VST1.Clear;
  for I := 0 to 1 do
  begin
    RootNode := VST1.AddChild(nil);
    if I = 0 then
    begin
      Level := 0;
      TData := VST1.GetNodeData(RootNode);
      TData.NodeName := '1 рут строка';
      bd.ADOT_P.First;
      while not(bd.ADOT_P.Eof) do
      begin
        Level2 := J;
        ChildNode := VST1.AddChild(RootNode);
        NamNod;
        CoinName;
        RunTime;
        Hesh1;
        Hesh2;
        bd.ADOT_P.next;
      end;
    end;
    if I = 1 then
    begin
      Level := 1;
      TData := VST1.GetNodeData(RootNode);
      TData.NodeName := '2 рут строка';
      bd.ADOT_M.First;
      while not(bd.ADOT_M.Eof) do
      begin
        Level2 := J;
        ChildNode := VST1.AddChild(RootNode);
        bd.ADOT_D.Last;
        NamNod;
        CoinName;
        RunTime;
        Hesh1;
        Hesh2;
        GPUTem;
        Vers;
        bd.ADOT_M.next;
      end;
      Level2 := 0;
    end;
  end;
end;




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

Для начала определись, что означает для тебя "обновлять".
...
В своем коде ты сперва полностью "убиваешь" дерево:
Код: pascal
1.
  VST1.Clear;


- а потом строишь его фактически с нуля. Все узлы дерева по умолчанию свернуты. Вот ты и получаешь их свернутыми.
Но ты при построении можешь задавать свойство "Expanded" в True, но устроит ли тебя такое поведение?
Можешь запомнить состояние узлов перед перестроением, а при построении дерева использовать эти данные. Для этого, как минимум, нужно придумать, как один узел отличать от другого.

Дальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит?

А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов.
....
Т.обр., чччДAntiMag Как обновлять VirtualStringTree при помощи Timer

Для начала определись, что означает для тебя " обновлять ".
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508609
AX-Class
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем здесь таймер. Код "по кнопке" себя по-другому ведет?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508610
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AX-ClassПричем здесь таймер. Код "по кнопке" себя по-другому ведет?

"По кнопке" код выполняется хотя бы в ожидаемый момент.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508626
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMag,

У VirtualStringTree перед изменением содержимого нужно вызывать метод BeginUpdate, а после изменений - EndUpdate. Тогда будет работать быстрее и не будет мигать.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508636
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД"По кнопке" код выполняется хотя бы в ожидаемый момент.
По таймеру тоже ожидаемый
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508639
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь.
Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ?
Другой вариант.

Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ?

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

Код: pascal
1.
 VST1.Clear;



то она будет дорисовывать постоянно новое но не затирать старое.
авторНе нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь.
Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ?
Другой вариант.

Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ?

Отсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. Пользователь закрывает узел и раскрывает снова - удаляются и считываются заново все подузлы.

Рассчитано на 1 пользователя.
1 и удаляет узлы и добавляет.

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

собственно именно в этом и идея VTV

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

анализируй изменения и в дереве меняй только те ноды, которые надо

AntiMagто она будет дорисовывать постоянно новое но не затирать старое.

так затирай старые, но не всЕ, а только те, которые удалились
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508696
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Дальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит?

А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов.


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


Есть база данных которая обновляется каждые 10 секунд из внешних источников.
Необходимо вывести
2 статических узла.
и заполнить их по соответствию из базы, при этом автоматически обновлять данные в этих узлах когда поступают новые данные.
(Количество дочерних узлов устанавливает пользователь в базе то есть он добавляет строку "аааааа" и программа база начинает заполнять дочернюю базу из которой достается последняя строчка)
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508705
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавторДальше возникнет вопрос - что делать с позиционированием на экране? Ну вот, смотрел ты на 9999й узел дерева. Потом - бац - таймер, и ты уже смотришь на 1й узел. Это тебя устроит?

А что делать в случае, когда текущий узел удаляется - что показывать? ...или когда добавляется 10 000 новых узлов.


Вот да, одна из проблем когда происходит обновление курсор сбрасывается, его как то можно запомнить и потом загружать ?
и допустим сохранять положение раскрыт узел или нет?

Ну вот ты подумай сперва, определись что именно тебе нужно, разбери разные варианты, потом подумай о методах достижения, а уж потом только кодируй.

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

а в общем, можно только повторить:
Ariochанализируй изменения и в дереве меняй только те ноды, которые надо

не убивай дерево, а делай в нём минимальные изменения и только нужные.

не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508711
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавторХотелось бы услышать постановку задачи, а не метод её выполнения


Есть база данных которая обновляется каждые 10 секунд из внешних источников.
Необходимо вывести
2 статических узла.
и заполнить их по соответствию из базы, при этом автоматически обновлять данные в этих узлах когда поступают новые данные.
(Количество дочерних узлов устанавливает пользователь в базе то есть он добавляет строку "аааааа" и программа база начинает заполнять дочернюю базу из которой достается последняя строчка)
Ну и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались".
Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?"

... а если в новой сводке данные не изменились - зачем она вообще нужна?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508713
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
не убивай дерево, а делай в нём минимальные изменения и только нужные.

не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран

Можешь какой нить пример скинуть ? Желательно что бы понять можно было какой эвент используется.
А то я пытаюсь это представить и на ум тока приходит что код разбить на 2 процедуры.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508714
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochстроки=узлы в БД=дерево - только добавляются, или иногда удаляются тоже?

а в общем, можно только повторить:
Ariochанализируй изменения и в дереве меняй только те ноды, которые надо

не убивай дерево, а делай в нём минимальные изменения и только нужные.

не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран
А если были удалены ВСЕ данные, которые пользователь вывел на экран - что тогда показывать после "обновления"?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508715
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНу и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались".
Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?"

... а если в новой сводке данные не изменились - зачем она вообще нужна?

Ок, real-time так понятнее мысль программы ?
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508717
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавторне убивай дерево, а делай в нём минимальные изменения и только нужные.

не грузи в дерево всю БД, а только ты её части, который пользователь вывел на экран

Можешь какой нить пример скинуть ? Желательно что бы понять можно было какой эвент используется.
А то я пытаюсь это представить и на ум тока приходит что код разбить на 2 процедуры.
Не будет тебе никакого кода, 100%.
Пока ты сам алгоритм не всосешь.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508718
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более понятней, представь что тебе поступают данные температуры за окном и их надо в режиме реального времени выводить там.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508719
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntiMagавторНу и че ты паришься, в постановке задачи нет условия "чтобы узлы не сворачивались".
Если заказчика не устраивает - пусть даст определение понятия "обновлять данные". Пример ему приведи: "вот ты начальник милиции, читаешь с листа сводку - куяк! - новая сводка! Что, вырвать старую из рук и вставть в руки новую, или прямо в листе зачеркнуть все поменять? Или новую сводку положить на стол, а ты сам определишься, когда ее читать?"

... а если в новой сводке данные не изменились - зачем она вообще нужна?

Ок, real-time так понятнее мысль программы ?
Что ж ты упертый такой.

Ну, твори тогда свой рилтайм сам.
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508731
AntiMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЧто ж ты упертый такой.

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

Так бы и сказал что ничего дельного не можешь предложить
...
Рейтинг: 0 / 0
Как обновлять VirtualStringTree при помощи Timer
    #39508735
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrНе нужно никакого обновления по таймеру. Нужна кнопка ОБНОВИТЬ, при нажатии на которую происходит обновление дерева с позиционированием не том узде, на котором стоял пользователь.
Предположим что ваш таймер работает, вы читаете данные с базы и заполняете дерево. Пользователь встал на какой то узел и просматривает его, а другой пользователь в этот момент узел удаляет. Срабатывает ваш таймер и у пользователя ВДРУГ узел исчезает. Он будет доволен ?
Другой вариант.

Пользователь просматривает одно место дерева, а другой пользователь добавляет/удаляет узлы в другом месте дерева. Зачем текущему пользователю знать о всех движениях где-то там ?

Отсюда напрашивается схема - читать не всё дерево сразу, а только текущих подузлов. Пользователь раскрывает узел, в этот момент подчитываются данные и заполняется дерево. Пользователь закрывает узел и раскрывает снова - удаляются и считываются заново все подузлы.
Да.

В некоторых случаях можно обновлять дерево.
Например, когда данные менялись, но не удалялись или добавлялись. При этом достаточно лишь перечитать данные, идентификаторы которых "хранятся" в ВИДИМЫХ на экране узлах.
В некоторых случаях можно показывать и удаленные данные: структура дерева остается прежней, просто удаленные узлы помечаются особым образом (цветом или <данные удалены>). Мне такой режим подсказал один из заказчиков, и я его теперь довольно часто использую.

И, естественно, кнопочка "Обновить". Которая энейблится при поступлении эвента от СУБД "данные изменились"(т.е., поменялись, удалились, добавились). Вот тут уж я в коде стараюсь сохранить текущее положение курсора на экране и все состояния типа Expanded, а также решаю, что делать, когда данные удалены.
...
Рейтинг: 0 / 0
Как обновлять 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
45 сообщений из 45, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как обновлять VirtualStringTree при помощи Timer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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