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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

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

Сообщение Korall »

Добрый день!

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

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

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

Может, кто с этим сталкивался?
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

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

Сообщение 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
Korall
Новичок
Сообщения: 21
Зарегистрирован: 01 Сентябрь 2010, 13:45

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

Сообщение Korall »

Фантастика! Вообще без исправлений скопировал, и все заработало, как надо!
Спасибо и с Новым Годом!
Пусть в НовоМ Году будет больше внедрений и продаж, а все ошибки останутся в 2011 году!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

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

Сообщение Дед Пахом »

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#)
С уважением, ДП
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

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

Сообщение Shur »

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

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