Задержка "разворачивания"

  • Автор темы ????
  • Дата начала
Статус
Закрыто для дальнейших ответов.
?

????

Доброе время суток!

Есть одна программа IDE для БД написанная (почти :) ) на BCB 5. Главное оно можно разделить на 2 части вертикально:
левое статическое поле - TreeView с ~2000 записями с уровнем вложенности 4
правое поле - DBGrid, в который подгружаю данные в зависимости от выбранного узла в TreeView (на самом верхнем уровне ~100.000).

Всё прекрано работает, но есть одно но - когда объём данных для DBGrid 20.000 и выше, становится заметно "подтормаживание", т.е. при быстром перемещении по узлам TreeView обработчик перемещения сразу обращается к базе и пока база не обработает запрос, пермещение не производится. Всё это терпимо, но хочу исправить на более правильный (как мне кажется) вариант - при пермещении по узлам обработчик лезет в базу только если мы задержались на узле некоторое время.

Может кто-то делал что-то подобное?
Пример того, что я хочу сделать можно посмотреть на примере "Главного меню" (что на кнопке <ПУСК> в винде). Ведя по менюшке мышой вложенные меню разворачиваются не сразу, а с задержкой.

З.Ы. Язак, средства, ОС... реализации не важны - важен алгоритм и принцип.
 
B

Barmutik

Задача стандартная для баз данных при организации мастер-детаил. Решение может быть много, я использую всегда следующее:

Код:
В OnChange TreeView
XXXTimer.Enabled := False;
XXXTimer.Enabled := True;
Код:
В OnTimer таймера:
XXXTimer.Enabled := False;
<Ваши операции селекта>
Как работает: При перемещении по дереву запускается таймер на событие которого происходит Селект к базе. У Таймера есть время реакции... Если вы за это время перешли ещё на одну вершину, то таймер перезапускается и селекта не происходит. Как только вы замерли на какой-то вершине происходт событие таймера и выполняется запрос.
Интервал у таймера у меня обычно 50 милисекунд, выставить можно по желанию...

Если чего не понятно спрашивайте дальше...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб