![]() |
Заголовок у компонента(контрола)
Здравствуйте, господа. Задался таким вопросом как необходимость создания заголовков (Label) для каждого компонента (по типу как в Delphi такое есть у каждого визуального компонента по умолчанию).
Раньше мы использовали кипячение: Код AS3:
Есть вариант 2: Заворачивать компонент в слой (layer) и давать ссылку на слой. Но тогда взаимодействовать с контролом становится геморно - нужно вставлять дополнительный уровень - что-то типа Код AS3:
Вариант 3 - расширить класс Sprite/DisplayObject/etc и добавить к нему код для создания label. Однако, пока не вполне ясно, как это должно работать в плане addChild и подборки координат. |
Цитата:
Код AS3:
|
@caseyryan
Напрягает создание лишних оберток, контрол становится не контролом, а слоем. Хотелось бы более нативное внедрение общих свойств таких как label, hint etc. P.S. Не понял, в предложенном коде предлагается проксирование всех свойств, которые возможно понадобятся? (Тогда еще надо бы и .text задавать как text, a не label) Допустим, с TextInput такое пройдет. Но если я, например, поставлю заголовок к DataGrid или List? |
Контрол это всегда пирог. Если конечно, вы не рисуете в графиксе все состояния. Чекбокс - кнопка с тоглом и другой картинкой. Радиобаттон - чекбокс урезанный и другой картинкой. Так что лейбл погоды не сделает, если конечно вы не рисуете в графиксе. Я бы создал базовый компонент с лейблом, который просто текст запоминает. А в кнопке (от базового компонента) под лейбл уже создавалось бы поле, в датагриде ничего бы не происходило и так далее.
|
Ну так композиция - вполне себе нормальный паттерн.
Создайте отдельный класс Label, который будет только за текстувую часть отвечать, и его добавляйте куда надо |
Цитата:
|
Наверно надо было пояснить что я имел в виду под заголовком. В данном случае это Label1 для TextEditor1, Label2 для TextEditor2
http://delphi-prg.ru/wp-content/uplo...10/lesson2.jpg Да, наверно придется вставлять в слой. Проблема еще виделась в том, что если через статичную фабрику делать компоненты, то те что с заголовком будут как "Слой с заголовком", а те что без заголовка - обычный контрол и тут может быть путаница в дальнейшем с унификацией использования. Придется делать проксирование свойств для каждого объекта, а это куча boilerplate code Код AS3:
|
Цитата:
|
Программирование — боль. Можно глянуть хотя бы на механизм скинирования во Flex 4. Там боль завернута на метаданные, компилятор и сам класс. Проксирование величин для недоступных пока компонентов — это обычное дело.
В общем там суть вся в скинах. Есть компонент TextEditor, а есть его скин. Кстати, TextEditor по сути может принимать ввод с клавиатуры и отображать набранный текст, вроде того. Сам компонент является логикой, а скин — его отображением. Что такое логика для этого компонента? Нужно установить каким стилем отображать текст и этот текст должен быть набран на клавиатуре. А еще у компонента может быть опциональный Label, отображаемый где захочешь. Вроде все просто. Вот объявлен у тебя label для компонента TextEditor как опциональный, т.е. лабеля может не быть в скине. Если есть, то поле TextEditor#labelText заполняет свойство text именно Label#text из скина. А поле labelAlign позиционирует лабель где захочешь. Кстати... Вот ты компиляешь для десктопа, и TextEditor пользует скин с обычным flash.text.TextField. А начал ты компилять для мобилки, то тут уже включается скин с использованием StageText. Подумай над этим. |
Скины, скины... Интересная тема, можно задуматься. Тут еще 1 вариант выплыл - в Feathers можно переопределить ItemRenderer, думаю, будет что-то типа скинов. Или в инициализации темы прописать
Добавлено через 9 минут Цитата:
|
| Часовой пояс GMT +4, время: 09:51. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.