Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Resize детей контейнера (http://www.flasher.ru/forum/showthread.php?t=130681)

pavel___zzz 01.10.2009 17:05

Resize детей контейнера
 
Здравствуйте!

Помогите, пожалуйста, решить задачу:

Делается компонент, панелька как во флексе панель свойств компонентов (наверное, многим более известна по 3д-максу): прямоугольная область, в которой содержится произвольное количество панелей, каждая из которых может сворачиваться до своего заголовка. При этом дочерние панели имеют ширину контейнера, а по Y всегда (свёрнуто/развёрнуто) следуют точно друг за другом.

Так вот я сделал свой компонент - дочерняя паналь, содержащий кнопку с заголовком и Canvas (должен исчезать или появляться при нажатии на кнопку). Общий котейнер - VBox. Так вот, при уменьшении размера или visible = false для Canvasa дочерней панали координаты других дочерних панелей должны пересчитываться (ведь в VBox дети идут друг за другом). Я не знаю, как это обеспечить..

Таким образом, основной вопрос - как принудительно расставить по местам детей VBox после программного изменения их размеров.



А вообще, может я концептуально что-то не так делаю? Получается забавная смесь из mxml и as3. Плюс приходится в as3 из-вне запихивать содержимое в дочерние панели

P.S. Простите новичка за глупые вопросы )

PhilRus 04.10.2009 19:49

Если я правильно понял - проблема в обращение к нужным контейнерам.
Чезе id контейнера пробовали работать ?

wvxvw 04.10.2009 20:22

Там VBox вообще не в кассу, пробуйте List / Accordion, у VBox такого функционала отродясь не было...

pavel___zzz 05.10.2009 11:38

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

Что до VBox - я уже слегка разобрался. У его детей нужно поменять height, а затем у него самого вызвать updateDisplayList

Добавлено через 6 минут
Правда осталась другая проблема: у дочернего компонента (состоит из Button и Canvas), если изменить высоту Canvas, height родителя не меняется, поэтому у общего контейнера updateDisplayList ни к чему не приводит

P.S. wvxvw, а всё-таки поясните, пожалуйста, насчёт Accordion или List. Видимо, я совсем не понял, что вы имели в виду

wvxvw 05.10.2009 14:39

Я так понимаю, что панели - это какие-то однотипные компоненты, которые нужно расставить один под другим, при этом они должны менять высоту и при этом весь родительский компонент должен менять высоту вместе с ними? На мой взгляд, проще всего будет сделать такую штуку в виде аккордеона.

>> List вроде вообще не может содержать внутри себя другие компоненты
Лист содержит внутри себя рендереры, которые и есть "другие компоненты".

Т.е. сделать свой компонент, не важно из чего, добавить ему функционал по изменению своей высоты и сделать этот компонент либо рендерером в листе, либо в аккордеоне. Лист в этом отношении может быть иногда немного по-лучше т.как может создавать детей "по требованию", т.е только тогда, когда они видны, но если этот функционал не нужен, тогда, как мне кажется, аккордеон - самое то.
В принципе вы конечно можете пробовать дорабатывать VBox чтобы у него появился такой функционал. Ну а с другой стороны - смысл использовать компоненты в том, чтобы не писать код самому, а если их нужно переделывать, то проще уже самому написать. По крайней мере будет быстрее и проще работать.

Gubber 05.10.2009 15:14

Цитата:

Сообщение от pavel___zzz (Сообщение 855512)
Добавлено через 6 минут
Правда осталась другая проблема: у дочернего компонента (состоит из Button и Canvas), если изменить высоту Canvas, height родителя не меняется, поэтому у общего контейнера updateDisplayList ни к чему не приводит

Дело в том, что если ты меняешь размеры дочерних объектов, то тебе надо ВРУЧНУЮ сказать окну пересчитать размеры.
вызвать метод invalidateSize ()
Если ты заморачиваешься с такими вещами прочитай статью http://flexcomps.wordpress.com/2008/...nt-life-cycle/
или мою попытку перевести эту статью
Жизненный цикл Flex компонентов

pavel___zzz 05.10.2009 21:45

Пока что-то не получается. Разбираюсь.

Можно попросить примеры?
Скажем, как можно заставить Accordeon показать сразу несколько панелей.
Или как сделать List из кнопок.

С invalidateSize что-то тоже пока не получается. И если вызвать measure тоже ничего


Часовой пояс GMT +4, время: 21:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.