Watch, Follow, &
Connect with Us

Fire Monkey - Yaroslav Brovin

Часть 0. Разработка компонентов под FMX 2.0. История сотворения мира

Начну длительный цикл статей, посвященных теме создания своих компонентов для библиотеки FireMonkey 2.0. Так как рассказать есть о чем, то сколько сюда войдет частей, пока не знаю.

Поскольку технология Fire Monkey довольно новая и активно развивающаяся, то в сети пока мало информации о том, как делать свои компоненты на основе стэка классов FMX. Так же разработка своих компонентов с использованием Fire Monkey отличается от разработки этих же компонентов под VCL. Поэтому эти статьи будут полезны тем, кто решил писать свои компоненты под FMX, кто решил портировать свои компоненты с VCL, а так же помогут новым пользователям быстрее и лучше познакомиться с технологией Fire Monkey.

Эта часть имеет нулевой номер неспроста. Она не содержит технических деталей и взгляда на разработку компонентов. Ниже идет импровизация. Прошу читателей меня не судить.

Неполная история зарождения

Вначале не было ничего, что напоминало бы нам эту планету. Как это часто бывает в космических просторах, пустота, темнота, космические газы и сгустки энергии объединились воедино и образовали планету. Эта планета была пустой, черно-белой, без каких либо признаков жизни. Однако с годами в этом мире зародилась жизнь и появились первые примитивные жители этой планеты. Они обосновались в поселении TFmxObject.

Некоторые из них сбивались в стаи, возглавляемые и управляемые вожаками. Организовав стаю, вожак знал теперь все дела стаи: кто вступил в стаю (DoAddObject, DoInsertObject), кто в каком порядке следовал за ним (Children , Index), какого размера у него стая (ChildrenCount), кто выбыл из нее (DoRemoveObject) – другими словами знал непосредственно все о своих подопечных.

Время шло, и стаи перемещались по миру под четким руководством вожака, объединяясь с другими. На других планета поговаривали, что такую организацию стай на планете GoF называли “компоновщиком” http://ru.wikipedia.org/wiki/Composite.

Все было хорошо, жители объединялись, но оставались бесформенными личностями, пассивными и не обладавшими желаемой степенью свободы.

Эволюция не стояла на месте, жители перемещались по планете и тогда зародилось новое поселение из уроженцев города TFmxObject, наследники TFmxObject. Их касту стали называть TControl. Это были новые жители, который умел все то же, что и жители TFmxObject. Но при этом обрели физическое тело: размеры (Width, Height) и положение в мире (Position), умели делать перемещаться, вращаться (Rotate), изменять свои размеры, увеличиваться и уменьшаться (Scale), скрываться и появляться (Visible).

Надо отметить, что в то время на планете не было своего источника света, поэтому жители жили были в темноте и не видели цветов и не знали о существовании красок. Однако как появилось солнце на нашей планете, так и появился на этой планете свет других галактик. Свет озарил половину планеты и открыл для жителей краски с кистями TBrush. Эти кисти могли наносить любые рисунки, используя множество эффектов. Жители города TControl стали называть освещенную светом планету местом TCanvas. Место, где каждый мог обрести цвет и на рисоваться себе любой костюм. Место TСanvas было уникальным и единственным на всей планете. Жители частенько посещали это место по одиночке или группами с вожаками. Вожаки раздавали указания как наряжаться своим подчиненным.

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

Краски с холстом открыли творческие способности жителей и тут и там стали появляться новые города: TRectangle, TLine, TRoundRect, TEllipse, TCircle, TArc и др. Жители отличались формой своих нарядов, у кого-то она была прямоугольной, у кого-то круглой, а у кого и просто в виде линии…

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

Чем больше времени проходило, тем более развитыми становились жители. Развитие привело к появлению нового типа существ TStyledControl. Они любили моду, стиль, любили красоваться в последних нарядах и быть в тренде последних новинок. Они оказались намного проворнее своих сородичей, и стали использоваться других жителей (TRectangle, TLine, TRoundRect, TEllipse, TCircle, TArc) себе в угоду – а именно использовать их и их наряды, чтобы красоваться самим. Если стиль менялась, то жители TStyledControl легко меняли бедных жителей на других и тем самым опять же оставались в писке последней моды. Тогда же и появилось новое устройство аниматор цвета TColorAnimation, которое позволяло менять цвета чего-угодно и на что угодно.

Ну а дальше я думаю уже ясно, стали появляться новые направления моды и новые жители от TStyledControl,такие как TButton, TLabel, TListBox и много других.


Ну а теперь перейдем от шуток к делу. Что следует вынести из этой истории:

  1. Каждый объект библиотеки FireMonkey может состоять из других объектов. Доступ к этому списке осуществляется через TFmxObject.Children.
  2. Каждый объект библиотеки FireMonkey прямой или дальний предок TFmxObject.
  3. Каждый визуальный компонент наследник TControl. Он содержит канву и дает возможность рисовать на ней. Так же TControl имеет размер и содержит методы и события по получению событий от мыши, клавиатуры, фокуса и тд.
  4. Каждый объект управляет своими дочерними объектами.
  5. Холст TCanvas общий для всех компонентов. Это значит, что каждый наследник TControl в рамках одной формы работает с одной и той же канвой.
  6. Стилизованные компоненты, всегда наследуются от TStyledControl. TStyledControl Позволяет динамически загружать стиль, меняя внешний вид, а иногда внешнее поведение.
  7. Стиль – это набор компонентов, задающих внешний вид и иногда поведение компонента.
  8. Аниматоры – это не визуальные компоненты, которые позволяют легко менять практически любую характеристику компонента за интервал времени.

Это список далеко не полный. В следующих статьях мы уже будем говорить о технических аспектах и деталях стэка классов библиотеки Fire Monkey. По скольку библиотека содержит очень много всего, о чем сразу и не скажешь, то будем освещать их по мере необходимости.

На сегодня все. Всех хороших выходных!

Posted by ybrovin on October 5th, 2012 under Firemonkey (RUS) |



7 Responses to “Часть 0. Разработка компонентов под FMX 2.0. История сотворения мира”

  1. Алексей Says:

    Оригинально!
    Редко приходится читать сказки на технические темы.

  2. Wassail Says:

    А что, вполне себе интересно. И попутно вопрос - когда создадите компоненты FMX аналогичные VCL типа TActionManager и TActionMenuBar. Пока их нет большой программный интерфейс нет смысла перетаскивать на FM2. Самим писать эти компоненты тоже нет смысла да и проблематично.

  3. Алексей Says:

    Замените "не с проста" на "неспроста" ;)

  4. Николай Зверев Says:

    Занимательно! :)
    Жалко, что ошибок много (

  5. deksden Says:

    А вот я жду, когда появятся приличные компоненты типа RichText / WebView (WebBrowser) на FMX.
    Жаль, что Progdigy с DCEF не очень нынче с Emro дружит!..

  6. ybrovin Says:

    Алексей, Николай:
    Говорила мне мама учи язык! Выучил Delphi :-)
    Ошибки исправлю.

  7. ybrovin Says:

    Deksden: Будем ждать.

    А для тек кому нужно срочное решение, может использовать новую систему рендеринга текста FMX 2.0, позволяющую форматировать и отрисовывать части текста (цвет, шрифт, размер, выравнивание, переносы, отступы, прозрачность и др.), значительно упрощающую работу по созданию такого компонента.

    Подробнее на: http://docwiki.embarcadero.com/Libraries/XE3/en/FMX.Text

Leave a Comment



Server Response from: BLOGS2