Страница 1 из 1

Как в дереве раскрыть только два первых уровня?

Добавлено: 28 Декабрь 2011, 1:10
Korall
Добрый день!

С 5.5, шаблоны не АБС, а обычные процедурные.

При открытии окна с деревом я могу или сразу открыть все ветки, или все они будут закрытыми, есть роутины
REL::ExpandAll, REL::ContractAll

Но как сделать так, чтобы при открытии окна раскрылись только первый и второй уровень дерева, а слои ниже были свернуты?
Исходный код ковырял-ковырял, не получается!

Может, кто с этим сталкивался?

Re: Как в дереве раскрыть только два первых уровня?

Добавлено: 28 Декабрь 2011, 15:44
Shur
Примерно так. Остальное доработать напильником.

Код: Выделить всё

CASE EVENT()
OF EVENT:OpenWindow
   do REL2::ExpandAll
   loop i#=records(Queue:RelTree) to 1 by -1
      if ABS(REL2::Level) > 1 ! << Желаемый уровень
         REL2::Level = 0 - ABS(REL2::Level)
         put(Queue:RelTree)
      end
   end   
   level# = 0
   loop i# = records(Queue:RelTree) to 1 by -1
      get(Queue:RelTree,i#)
      if ABS(REL2::Level)>1
         if level# > ABS(REL2::Level)
            REL2::Level = 0 - ABS(REL2::Level)
            put(Queue:RelTree)
         end
      end
      level# = ABS(REL2::Level)
   end
   DISPLAY

Re: Как в дереве раскрыть только два первых уровня?

Добавлено: 28 Декабрь 2011, 21:33
Korall
Фантастика! Вообще без исправлений скопировал, и все заработало, как надо!
Спасибо и с Новым Годом!
Пусть в НовоМ Году будет больше внедрений и продаж, а все ошибки останутся в 2011 году!

Re: Как в дереве раскрыть только два первых уровня?

Добавлено: 28 Декабрь 2011, 21:48
Дед Пахом
Shur писал(а):Примерно так. Остальное доработать напильником.

Код: Выделить всё

CASE EVENT()
OF EVENT:OpenWindow
   do REL2::ExpandAll
   loop i#=records(Queue:RelTree) to 1 by -1
      if ABS(REL2::Level) > 1 ! << Желаемый уровень
         REL2::Level = 0 - ABS(REL2::Level)
         put(Queue:RelTree)
      end
   end   
   level# = 0
   loop i# = records(Queue:RelTree) to 1 by -1
      get(Queue:RelTree,i#)
      if ABS(REL2::Level)>1
         if level# > ABS(REL2::Level)
            REL2::Level = 0 - ABS(REL2::Level)
            put(Queue:RelTree)
         end
      end
      level# = ABS(REL2::Level)
   end
   DISPLAY
В первом проходе по циклу нет get(Queue:RelTree,i#)

Re: Как в дереве раскрыть только два первых уровня?

Добавлено: 29 Декабрь 2011, 22:20
Shur
В первом проходе по циклу нет get(Queue:RelTree,i#)
Спасибо. Потерял. Лучше, конечно, вставить.
На то и напильник нужен!

Всех с Новым годом!
Желаю всем скорейшего выхода самой стабильной версии Клариона, лишённой каких бы то ни было ошибок!
А заодно счастья и успехов в 2012 году!