Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_6117.html
 

Вопросы и предложения по FireMonkey (FM Platform) (IDE) #1

Опубликовано 15.10.2013 г. 00:22

Начал работу над проектом с использованием FM Platform в Delphi XE4 с первым апдейтом. Соберу-ка здесь все то, что я не понимаю (очень надеюсь кто нить в комментариях подскажет), и то что мне не нравится при работе с этой платформой в самой IDE (разработчикам IDE на заметку так сказать) :)

  1. Создал проект, решил что все книги стилей у меня будут в отдельном дата модуле, на который будут ссылаться все формы и элементы. Вроде как бы логично. Проблема 1: когда StyleBook находится в дата модуле, дизайнер стилей не позволяет добавлять различные фигуры, а-ля TRectangle. Т.е. дизайнер не выполняет свою функцию. Проблема 2: При открытии формы, у который книга стилей из другой формы или дата модуля в среде выдается ошибка. (подводные камни: вместо дата модуля можно использовать скрытую форму, что решает проблему №1. Такую форму надо создавать первой в проекте при чем без использования Application, чтобы она не стала главной формой приложения. Проблема №2 остается)
  2. Если я кликаю в поле Fill я кликаю в редактирование градиента, то надо открывать вкладку Gradient, а не Color.
  3. Направление градиента (круглая вращающееся). Чтобы такое колесо было удобно использовать его надо делать пикселей 100 в диаметре. Колесо лесом, добавить Edit для ввода угла.
  4. Если форме редактирование цвета я вставляю 6ти байтовый код цвета аля AABBCC, то надо его преобразовывать в #FFAABBCC, а не выдавать ошибку. Большинство графических редакторов позволяют копировать цвет именно в таком формате.
  5. Конструктор форм и редактор стилей катострофически нуждаются в опции увеличения масштаба. Как можно рисовать мелкие объекты, когда ты не видишь их, какие там градиенты можно настраивать.
  6. Нужен быстрый способ копировать градиент из Fill в Stroke одного компонента, и вобще копирования градиента из компонента в компонент. Сейчас для дублирования градиента надо открыть окно градиента в исходном элементе, скопировать стартовый цвет, закрыть окно, перейти в целевой компонент, вставить цвет, закрыть окно, вернуться в первое, скопировать конечный цвет и так далее. С двумя цветами уже утомляет, а точно скопировать градиент с несколькими цветами вобще нереально.
  7. редактор градиентов нуждается в указании позиции точки (0 начало, 1 конец или т.п.), чтобы можно было настроить позицию и цвет, без этого точно не воспроизвести значения. (для работы с градиентами нужно взять и продублировать аналогичные окна, например, из фотошопа)
  8. Смещения градиентов также дожны настриваться руками. А то половина настройки отображения настраивается  в IDE, половина только в коде (т.е. Gradient.RadialTransform.RotationCenter/Angle)
  9. Создал стилевую книгу, хочу добавить новый стиль, скажем для кнопки. Книга пустая. Что я должен сделать? Вроде раньше надо было перетащить какой нить TRectangle в дизайнер. Перетаскиваю в область дизайнера, ничего. В область дерева стилей, ничего. Жму Cancel, а мой квадрат на форме. Отрываю книгу снова, ввожу в поиске TRectangle, выбираю его, жму Enter. В инспекторе объектов появляются свойства объекта. Визуально сам прямоугольник нигде не наблюдаю, в дереве объектов его тоже нет. Как мне разрабыватывать новый стиль с нуля то? Вобще дерево структуры не меняется при добавлении. Если переоткрыть то вроде добавленный элемент появляется. Добавил прямоугольник, пытаюсь добавить внутрть круг. Визуально он есть, а в структуре нет.
  10. Допустим, я хочу сделать несколько стилевых книг для Custom Style компонентов. Логика проста, в одной хочу разные варианты кнопок, вдругой нарипример несколько Edit и т.п.. Добавил TSyleBook назвал ее MyStyleBook. Жму на кнопку, выбираю EditCustomStyle. В итоге создается компонент StyleBook2. эй! почему новый то? у меня есть один, хочу чтоыб стиль был в нем! Ок, коли создал 2ю книгу, то давайте свою удалим, а эту переименуем. Удалили MyStyleBook, StyleBook2 переименовали в MyStyleBook. Опять жмем в Edit Custom Style, сохраняем. Вуаля, на форме StyleBook1, моя книга переименовалась сама.
  11. Как удалить стиль из книги?  Основной книге стилей теперь button1style. Del ничего не делает, в контекстном меню ничего нет (стили теперь хранятся в бинарном виде, а не текстом).  UPD: в верхней части окна структуры есть кнопка удаления.

Ох. Я видимо не очень корректно понимаю концепцию стилей в FMX. Подскажите кто-нибудь что-нибудь по вопросам описанным выше. Я ведь могу использовать несколько стилевых книг на одной форме? Т..е у формы книга выбрана одна, а кнопке я присваиваю имя стиля из другой, так ведь? почему я тогда не могу запихивать стиль в разные книги и переименовывать их? Вобще это у всех так? Или может у меня что то со средой не так? Да что там про удаление стиля спрашивать из книги. Добавил на custom стиль кнопки TCircle, я его то теперь не знаю как удалить. Как?
Если кто поможет с решением данных проблем то буду признателен.

Метки:  FireMonkey 

Комментарии

Kazantsev Alexey
15.10.2013 в 02:35
Тем ужасом, что называется редактором стилей, пользоваться нереально, это факт. Выход, однако, есть. Можно редактировать стили элементов собирая их прямо на форме, а после того, как стиль будет завершен перенести его в книгу, если есть такая неодходимость. Черезжопие конечно, но других вариантов нет.
teran
15.10.2013 в 10:14
а каким образом перенести? в хе4 стили не в текстовом формате хранятся.
Kazantsev Alexey
15.10.2013 в 12:45
Средствами еще большего черезжопия :)

1. Создаешь на форме объект-контейнер всех стилей (StyleContainer).
2. Создаешь внутри этого объекта стили для элементов.
3. Проверяешь и отлаживаешь их.
3.5 Подключаешь модуль FMX.Styles
4. Кидаешь на форму кнопку и пишешь её обработчик:
TStyleManager.SaveStyleToIndexedBinary(StyleContainer, TFileStream.Create('myStyle.style', fmCreate));
4.5 Гневно стираешь обработчик кнопки - нечего мемлики плодить :)
5. Открываешь StyleBook и загружаешь в неё файл myStyle.style
6. Profit
Kazantsev Alexey
15.10.2013 в 13:41
Упустил момент:
4.1 Запускаешь приложение и нажимаешь кнопку с обработчиком :)
teran
15.10.2013 в 13:34
это был очевидный момент :)
Виталий
15.10.2013 в 06:57
Некоторое время назад попадался альтернативный редактор стилей. Нашел ссылку - ginne.ru
teran
15.10.2013 в 10:10
спасибо за ссылку,
нет ХЕ4 в списке поддерживаемых к сожалению. кто нить пробовал?
Kazantsev Alexey
15.10.2013 в 11:45
Я пробовал, как и MonkeyStyler. Ни тем ни другим пользоваться неудобно т.к. гуй тормозит. Один пример (это MonkeyStyler): http://kazantsev.nm.ru/images/fm_gui_lags.gif
Roman Yankovsky
15.10.2013 в 09:13
Как я понимаю, политика несколько изменилась и редактированием стилей предлагается пользоваться только создателям визуальных компонентов. По крайней мере в мобильных проектах Delphi XE5 редактора стилей вообще нет.
teran
15.10.2013 в 10:11
может ограничение какое то для мобильных платформ?
Roman Yankovsky
15.10.2013 в 11:34
На мобильных платформах для редактирования стандартных стилей предлагается использовать отдельную утилиту - Bitmap Style Designer. Новые стили, как я писал ниже, можно создавать по-прежнему. Но все-таки разница в этом смысле между десктопом и мобильными платформами существенная.
Kazantsev Alexey
15.10.2013 в 12:23
Bitmap Style Designer, судя по всему, не предназначен для создания FMX стилей. Он позволяет делать только нарезку и потом на её основе генерировать шаблон стиля для FMX. Открыть созданный FMX-стиль он не может.
Kazantsev Alexey
15.10.2013 в 10:21
@Андрей: Для того чтобы новые компоненты появились в структуре редактора стилей помогает Apply and Close и последующее переоткрывание :)

@Roman Yankovsky: Не пугай народ, Рома :) Никуда редактор стилей из XE5 не исчез. Исчезли только пункты контекстного меню для редактирования стилей контрола. А так пожалуйста, кидаешь на форму StyleBook и создаешь стиль. Правда он глючить стал ужасно. После нескольких открываний-закрываний вываливает AV и смещается внутри родительского окна.
teran
15.10.2013 в 10:07
ну про переоткрывание я уже понял :)) но это по моему пц какой то :)
скачал вчера IDE Fix pack, мб поможет чем, надо проверить.
Roman Yankovsky
15.10.2013 в 11:11
Создавать новые стили можно. Редактировать существующие стандартные весьма проблематично.
Kazantsev Alexey
15.10.2013 в 11:05
Редактировать растровый стиль все равно большого смысла нет. Хотя десктопные тоже растровые и редактировать можно :) Похоже на банальную недоделку.
Slava
15.10.2013 в 20:29
В случае подгрузки стилей в рантайме сторонние компоненты, (необходимость в которых как в воздухе, по крайней мере - в первых двух версиях FM) выглядят как бельмо на глазу ... При этом могут пропасть некоторые события компонентов из-за неправильно сформированного стиля, например, OnClick, но это конечно косяк создателя стиля. Пытался динамически, в момент смены общего, сформировать стиль из стилей стандартных чтоб "левый" компонент походил на окружающих, но как то не пошло - возникло множество проблем которые не удалось обойти :( неудачная идея была в предоставлении возможности пользователю менять стиль на своё усмотрение
Kazantsev Alexey
15.10.2013 в 22:09
Идея, как раз, удачная. Ну а чтобы сторонние элементы управления не выбивались внешним видом из общей массы, стили для них нужно делать из уже имеющихся стилей. Это как использование ThemeManager в VCL/Win32, только декларативное и более продвинутое. Другое дело, что для этого нужно разбить элементы стиля на мелкие части которые могут быть переиспользованы т.е. нужна проработка деталей, а её нет. Ну и за имена, вроде "treeviewexpanderbuttonstyle", хочется придушить кого-нибудь :E
teran
16.10.2013 в 11:53
да, с именами сложновато. могли бы и оставить заглавные буквы, не понятно зачем в нижнему регистру приводить, не читабельно.
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно