Delphi xe2 знакомство с firemonkey

Delphi со вкусом Cocoa / Habr

delphi xe2 знакомство с firemonkey

Речь пойдет о разработке на Delphi для macOS (в девичестве OS X) и Фреймворк FMX появился в Delphi еще в году, в версии Delphi XE2. .. первое знакомство с Delphi + Cocoa оказалось познавательным. в статье рассматриваются возможности использования firemonkey - новой платформы для создания красивых приложений. Первым делом при знакомстве с FireMonkey мозг сам цепляет их транслировать в компонентную схему Delphi XE2/C++Builder XE2.

На вкладке Animations палитры компонентов Вы можете найти ещё несколько типов анимации для Ваших приложений. Например, можно сделать плавное изменение цвета какого-либо элемента на форме, используя TColorAnimation.

delphi xe2 знакомство с firemonkey

Кроме анимаций Вы также можете применять также для своих элементов на форме различные эффекты типа размытия, тени и. Ну и в заключении пара слов про стили. Как вы могли заметить, в представленных выше роликах форма приложения выглядит ровно так какой мы её видели в VCL. Выбор стиля выглядит так: Так вот, FireMonkey дает намного больше возможностей по изменению стиля приложения, чем при использовании обычной VCL.

FireMonkey - анимация, шаг 3

В силу того, что каждый элемент в FireMonkey — это контейнер, мы в силах самостоятельно изменить стиль отрисовки любой части элемента — бордюра, заднего фона, выбрать толщину рамки и. Всё это можно сделать, используя, опять же визуальный редактор. Для примера изменим задний фон для формы. Наши бействия будут следующими: Кидаем на форму компонент TStyleBook 2.

В свойства формы StyleBook указываем StyleBook1. Дважды кликаем по компоненты в результате чего откроется окно дизайнера: Чтобы загрузить стиль по умолчанию необходимо нажать кнопку Load Default.

Каждый элемент в дереве стиля определят стиль для какой-либо части компонента. Например, за стиль кнопки отвечает элемент buttonstyle за задний фон элемента — backgroundstyle и. Жмем кнопку Apply и смотрим на форму в дизайнере: Чтобы указать какому-либо элементу его уникальный стиль, ему необходимо указать значение свойства StyleLookup. Не буду лукавить и скажу, что по ходу написания статьи я также столкнулся и с некоторыми проблемами в работе.

Например, не всегда удавалось с первого раза открыть дизайнер стиля у TStyleBook. В принципе это работает неплохо, хотя некоторое вещи в стилях приходится подправлять или использовать нативные контролы, о чем ниже.

Как создать калькулятор на Embarcadero Firemonkey

На это ушло два человеко-дня. Ребеночку фреймворку FMXкак я уже говорил, шесть лет, и несмотря на усилия Embarcadero, он еще не до конца переболел всем, чем.

delphi xe2 знакомство с firemonkey

Например, в главном меню приложения событие OnClick срабатывает для всех айтемов, кроме айтемов верхнего уровня. Или возьмем стандартные диалоги Open и Save.

Delphi XE2. Знакомство с LiveBinding. — Delphi в Internet

Все это, на мой взгляд, результат слишком слабого тестирования in-house и слишком медленного реагирования Embarcadero на баг-репорты. Эти болезни лечатся в run-time, без патчинга системных юнитов. Будьте бдительны, не пренебрегайте тестированием, и не забывайте сообщать о багах на quality.

Это как раз то, чего нет в стандартных компонентах FMX. Нужно узнать системную локаль? Узнать размер virtual memory процесса? Все это, естественно, native API. А если что в Delphi не задекларировано, то можно задекларировать, добавить и переделать все что угодно.

Если говорить упрощенно, то Cocoa — это набор классов, что довольно непривычно для тех, кто привык использовать Windows API. Class functions вызываются через волшебное слово OCClass: Эти указатели на объекты нельзя использовать напрямую; указатели представляют из себя то, что называется id в Objective-C, и чтобы преобразовать такой указатель в объект, нужно сделать волшебный Wrap: Если же говорить непосредственно про API не ограничиваясь только Cocoaто он оставляет довольно приятное ощущение.

Какие-то вещи в macOS делаются сложнее, чем в Windows, какие-то проще. Взять, к примеру, AES-шифрование. В Windows, чтобы зашифровать массив байт, нужно использовать пяток функций и пару дюжин строк кода, тогда как в macOS это можно сделать практически в одну строку функцией CCCrypt. И это уже не часть Cocoa. Это делает жизнь намного проще. Многое, что можно сделать через классы, на высоком уровне, гораздо проще сделать на низком уровне через POSIX.

Например, как реализовать interprocess communications? Distributed Objects и класс NSProxy? Первые две, кстати, в Delphi не задекларированы, но это не проблема. Внимательно читаем описание, декларируем: Да для многих вещей. Кода там примерно строк. Нативные контролы Если вас не устраивает стандартный набор FMX-контролов, то это не беда. Никто не запрещает использовать нативные визуальные классы и даже смешивать их с FMX-контролами, соблюдая определенные правила.

Собственно говоря, никто не запрещает даже совсем не использовать фреймворк FMX в вашем приложении Delphi хотя это уже слегка экстремально.

Нативные классы стоит использовать ради производительности.

TDelphiBlog: Самое интересное в Delphi блогах за год

Это довольно тривиально кодируется в Delphi, и в результате вы получаете доступ к любым событиям. NSEvent ; cdecl; end; Делаем класс-имплементатор: NSEvent ; cdecl; … end; И делаем все что хотим, когда вызывается метод класса-имплементатора: Сабклассинг — не единственный способ перехвата событий, можно также использовать method swizzling, и я даже приведу пример ниже.

Вот так примерно мы и живем, смешивая нативные и FMX-контролы. Что пока не может Delphi на macOS С большой бочкой меда зачастую идет некоторое количество не столь прекрасной субстанции.

Поговорим для разнообразия о недостатках. Из нерешаемых проблем пока есть одна, но довольно важная. Это битный компилятор для macOS, который есть в roadmap, но пока не сделан.

delphi xe2 знакомство с firemonkey

Так что, ждем с нетерпением. Передаваемый сode block выполняется в момент закрытия диалога: Иными словами, нормальным путем мы не можем узнать о закрытии диалога.

Но нормальный путь — это даже скучно! Кто нам мешает пойти ненормальным путем? Извращенных подходов к решению таких проблем несколько, но в данном случае, например, хорошо сработает следующий. Для начала мы можем получить список всех, как документированных, так и недокументированных, функций класса NSSavePanel.

delphi xe2 знакомство с firemonkey