Часть 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 и много других.
…
Ну а теперь перейдем от шуток к делу. Что следует вынести из этой истории:
- Каждый объект библиотеки FireMonkey может состоять из других объектов. Доступ к этому списке осуществляется через TFmxObject.Children.
- Каждый объект библиотеки FireMonkey прямой или дальний предок TFmxObject.
- Каждый визуальный компонент наследник TControl. Он содержит канву и дает возможность рисовать на ней. Так же TControl имеет размер и содержит методы и события по получению событий от мыши, клавиатуры, фокуса и тд.
- Каждый объект управляет своими дочерними объектами.
- Холст TCanvas общий для всех компонентов. Это значит, что каждый наследник TControl в рамках одной формы работает с одной и той же канвой.
- Стилизованные компоненты, всегда наследуются от TStyledControl. TStyledControl Позволяет динамически загружать стиль, меняя внешний вид, а иногда внешнее поведение.
- Стиль – это набор компонентов, задающих внешний вид и иногда поведение компонента.
- Аниматоры – это не визуальные компоненты, которые позволяют легко менять практически любую характеристику компонента за интервал времени.
Это список далеко не полный. В следующих статьях мы уже будем говорить о технических аспектах и деталях стэка классов библиотеки Fire Monkey. По скольку библиотека содержит очень много всего, о чем сразу и не скажешь, то будем освещать их по мере необходимости.
На сегодня все. Всех хороших выходных!
Posted by ybrovin on October 5th, 2012 under Firemonkey (RUS) |

RSS Feed

October 5th, 2012 at 1:28 pm
Оригинально!
Редко приходится читать сказки на технические темы.
October 5th, 2012 at 11:44 pm
А что, вполне себе интересно. И попутно вопрос - когда создадите компоненты FMX аналогичные VCL типа TActionManager и TActionMenuBar. Пока их нет большой программный интерфейс нет смысла перетаскивать на FM2. Самим писать эти компоненты тоже нет смысла да и проблематично.
October 6th, 2012 at 8:25 am
Замените "не с проста" на "неспроста"
October 6th, 2012 at 10:42 pm
Занимательно!
Жалко, что ошибок много (
October 7th, 2012 at 2:59 pm
А вот я жду, когда появятся приличные компоненты типа RichText / WebView (WebBrowser) на FMX.
Жаль, что Progdigy с DCEF не очень нынче с Emro дружит!..
October 7th, 2012 at 11:56 pm
Алексей, Николай:
Говорила мне мама учи язык! Выучил Delphi
Ошибки исправлю.
October 8th, 2012 at 12:06 am
Deksden: Будем ждать.
А для тек кому нужно срочное решение, может использовать новую систему рендеринга текста FMX 2.0, позволяющую форматировать и отрисовывать части текста (цвет, шрифт, размер, выравнивание, переносы, отступы, прозрачность и др.), значительно упрощающую работу по созданию такого компонента.
Подробнее на: http://docwiki.embarcadero.com/Libraries/XE3/en/FMX.Text