Блог Александра Божко
Архивы
Рубрики
Реклама

Delphi

Как и предполагалось, последние пару недель я плотно занимался разработкой мобильного приложения под Android. И, думаю, это хороший повод продолжить начатый обзор беглым рассказом об изменениях в FireMonkey.

Обнаружение неподдерживаемых устройств

Вы наверняка знаете, что платформа поддерживает подавляющее большинство Android устройств. Но есть и устройства с архитектурой, не поддерживаемой FireMonkey. В частности таких:

  • ARMv6
  • Intel x86
  • MIPS

Естественно, мой шеф является счастливым обладателем одного из подобных аппаратов. После запуска приложения, собранного в XE5 на Motorola Atrix mb860 попросту появляется черный экран, без всяких дополнительных оповещений. В XE6 появились три небольших библиотеки, которые по умолчанию добавляются в проект. Благодаря им теперь, при попытке запустить приложение на неподдерживаемом устройстве теперь выводится сообщение

Application not supported by this device

Если нет необходимости использовать эти библиотеки (например, когда приложения будет запускаться на каком-то конкретном устройстве) их можно отключить в Deployment manager‘е.

delpoyment_manager

Однако, в том случае, если приложение будет распространяться в GooglePlay, эти библиотеки точно следует отключить, поскольку данный сервис сам определяет совместимость приложения с устройствами.

Компоненты для продажи цифрового контента и показа рекламы

В отличии от iOS приложений, монетизация Android приложений не всегда возможна путем продажи непосредственно приложения. Здесь и сами приложения дешевле и конкуренция выше. Поэтому для Android приложений часто используют схемы продажи цифрового контента или рекламы в приложениях.

В XE6 теперь появились компоненты TBannerAdd и TInAppPurchase, предназначенные для показа рекламы и продажи цифрового контента, соответственно. Компоненты можно использовать как в Android (для работы с GooglePlay и AdMob), так и в iOS приложениях (для работы с iTunes и iAd).

Новый FireMonkey стиль для Google Glass

Собственно, для того, что бы о чем-то здесь говорить нужно как минимум иметь очки Google. Тем не менее, понятно, что данное устройство поддерживается, а следовательно принцип “в ногу со временем” воплощается жизнь.

FMX.Grid

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

В XE6 был расширен базовый класс TCustomGrid. В нем появились события OnDrawColumnCell и OnDrawColumnHeader и несколько новых свойств TCustomGrid.Options.

В новой версии TGrid появились обновленные редакторы для столбцов типа TTimeColumn и TDateColumn. А также были добавлены четыре новых события OnHeaderClick, OnSelectCell, OnColumnMoved и OnCreateCustomEditor.

Кроме того, был произведен рефакторинг, улучшена производительность, в частности изменен механизм прокрутки.

Конечно, это в определенной мере расширяет функциональные возможности грида. Но если вас интересует мое субъективное мнение, то грид, это лишь часть вопроса. Кроме него узким местом в разработке приложений для работы с данными является и механизм Live Bindings.

 Новые контролы для отображения даты и времени

Вместо TCalendarEdit в XE6 появились TDateEdit и TTimeEdit. Сразу же “прикрутил” их в свое приложение. Реализация понравилась. Реагируют на разрешение устройства и в зависимости от него показывают календарь в развернутом либо урезанном виде.

FireMonkey DateEdit

FireMonkey DateEdit

Прочее

На самом деле небольших изменений в FireMonkey было сделано достаточно много. В основном они связаны с модификацией типов данных и добавлением новых методов и событий в некоторые классы (в частности обновился TWebBrowser).

Между тем, при переходе с XE5 особых проблем с совместимостью у меня не возникло. Я не буду здесь перечислять все изменения, они детально описаны в справке в разделе What’s New in Delphi and C++Builder XE6.

Отдельная тема, на мой взгляд, достойная обсуждения – FireDAC. Но об обновлениях в этой библиотеке доступа к данным мы поговорим не сегодня.

Субъективные впечатления

Безусловно сама среда при разработке мобильных приложений стала работать стабильнее. За пару недель плотной работы практически не было “вылетов” и “критических сбоев” в работе IDE. Дизайнер формы наконец-то стал работать с буфером обмена.

К сожалению, редактор Visual Binding при большом количестве объектов на форме по-прежнему притормаживает, поэтому “лишние” (не используемые) объекты лучше сразу делать невидимыми.

Но, повторюсь, что в целом, впечатление весьма благоприятное.

Не пропустите:

 

Сегодня новые продукты поколения XE6 появились в продаже у официальных реселлеров:

 Delphi XE6 от 38238,21 руб.

C++ Builder XE6 от 38238.21 руб.

RAD Studio XE6 от 69152,65 руб.

Я же тем временем, как и обещал, начинаю публиковать небольшой обзор. Так уж получилось, что тестировать новую версию Delphi/RAD Studio мне пришлось на абсолютно новом ПК. Более того, вместо привычной Windows 7, теперь придется работать на 8.1, да еще и 64-битной. Использование современных операционок от Microsoft привносит неповторимые ощущения в процесс мобильной разработки. Но это  отдельная тема, которую я, безусловно, затрону.

Главное, что ожидалось от нового релиза RAD Studio, это повышение качества и надежности продукта. Чего греха таить, нарекания на качество продукта были. Были нарекания и на скорость работы. Забегая вперед скажу, список исправленных багов более чем внушителен. Но кроме этого были добавлены и новые возможности, в том числе и для VCL приложений.

И, конечно, гвоздь программы — поддержка разработки под Android  в  C++ Builder.

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

Для установки я использовал iso-образ. Размер дистрибутива оказался немного больше, чем у Rad Studio XE5. Никаких неожиданностей при установке не возникло. Обратил на себя внимание лишь обновленный дизайн установщика. Как и для предыдущей версии, отдельные дополнительные компоненты и инструменты доустанавливаются отдельно. На момент написания материала для зарегистрированных пользователей доступны:

Читать далее

Для чего это нужно?

Речь идет не о компиляции приложения из IDE в эмуляторе, а именно о запуске собранного приложения. Эту возможность могут использовать тестировщики и прочие “заинтересованные персоны”. При этом  никакие платные инструменты не используются. Все что нужно для того, что бы посмотреть на Windows (или Mac OS) машине как работает ваше приложение, находится в свободном доступе.

Что нужно для работы?

Главным инструментом, который необходим для работы является Android SDK. Android SDK предоставляет API библиотеки и средства разработки, необходимые для создания, тестирования и отладки Android приложений. Скачать SDK можно на официальном сайте. Размер 510 М.

Кроме этого, приложения придется запускать с параметрами. Проводник Windows сам по себе является далеко не лучшей оболочкой. Для работы же с параметрами приложений он не предназначен принципиально. Что бы не мучатся с cmd я рекомендую использовать “олдскульный” менеджер файлов (например FAR Manager или Total Commader).

Настройка эмулятора

После скачивания Android SDK вам необходимо распаковать архив и запустить SDK Manager.exe. С помощью менеджера вы сможете настроить установленные компоненты SDK. Для работы эмулятора вам понадобится как минимум Android SDK Tools, Android SDK Platform-tools и SDK Platform для соответствующей версии API.

SDKManager

После того, как вы убедитесь, что необходимые компоненты установлены запустите на выполнение файл android.bat с параметром avd из каталога <SDK Path>\sdk\tools. Таким образом будет запущен Android Virtual Device Manager. Читать далее

Некоторое время назад я уже писал о DataSnap и своих экспериментах связанных с этой технологией. Интересно, что тогда я немного затронул набор компонентов доступа к БД AnyDAC. Сейчас, похоже, появилась необходимость более плотно обратиться к данной теме, а в базовом арсенале Delphi разработчиков появился FireDAC. Вкратце обрисую задачу.

Имеется некоторое Windows приложение, работающее с СУБД MS Access (опционально с MS SQL). Необходимо создать для данного приложения клиентскую часть, работающую под Android и частично реализующую функционал основного приложения. При этом данные должны храниться автономно, но по запросу пользователя синхронизироваться. Здесь сразу оговорю два момента. Во-первых задача абсолютно реальная и решать ее мне так или иначе придется. Во-вторых, сама по себе задача, без учета специфики конкретных СУБД, довольно типичная, в той или иной интерпретации, встречающаяся часто. Поэтому, допускаю, что подробное  описание подобного примера будет интересно читателям.

Здесь можно выделить три условные функциональные задачи:

  • обеспечение доступа к базам данных (внутренней, для автономной работы мобильного приложения и внешней, с которой работает основное приложение);
  • обеспечение репликации данных;
  • непосредственно, функциональная часть мобильного приложения.

Естественно, что локально на Android устройстве данные целесообразно хранить в SQLite базе. Более интересен вопрос синхронизации разных баз. Если бы базовое приложение использовало в качестве СУБД Inrebase, Oracle  или MySQL, то можно было бы подключиться к базе напрямую. При этом, в первом случае для доступа к БД мы могли бы воспользоваться FireDAC, а в случае с Oracle или MySQLUniDAC, или специальными компонентами доступа от DevART (ODAC и MyDAC, соответственно). Однако, в данном случае использовать прямое подключение к базе данных MS Access с мобильного устройства в принципе не возможно. Поэтому в данном случае проще использовать многозвенную архитектуру, а именно DataSnap.

купить UniDACкупить ODAC

И здесь опять возникает вопрос выбора компонентов доступа к БД. Вариантов здесь три. DBExpress, FireDAC и UniDAC. В очередной раз распишусь в своей нелюбви к DBExpress, хотя, возможно, это и субъективно. При использовании FireDAC в “классической” схеме DataSnap никаких дополнительных телодвижений использовать не придется. UniDAC использовать “в лоб” не получится, однако, этот набор компонентов так же работает с DataSnap и внятные описания имеются. Коммерческую составляющую, которая может отразится на выборе, я оставлю “за бортом”, поскольку в моем случае она не имеет значения.

купить RAD Studioкупить Delphi

Что касается репликации данных, то здесь мне повезло. Имеющийся функционал Windows приложения предполагает возможность синхронизации данных из разных баз. Соответственно, структура базы оптимизирована для репликации. Для каждой из значимых таблиц имеются уникальные идентификаторы. Так же реализованы алгоритмы синхронизации.

Если оценивать уровень сложности субъективно, то в принципе, на уровне технологии приложение должно получиться не особо сложным. Естественно, многое зависит от логики самого приложения и сложности структуры БД.

На текущий момент я сделал небольшой тестовый пример подключения к мобильного Android приложения с БД MS Access с помощью FireDAC. Так же, думаю, будет целесообразно разобраться с тем как работает с DataSnap UniDAC. Эти примеры я планирую опубликовать в следующих постах. И, естественно, для полноты картины собираюсь сделать небольшой пример репликации данных.

Интересно узнать у читателей блога, приходилось ли им решать подобную задачу и какой подход вы при этом избрали.

Проблема

Проблема перевода старых Delphi  проектов на unicode это то, что часто отталкивает разработчиков от использования новых (Delphi 2009 и старше) версий Delphi. С другой стороны, именно поддержка unicode, зачастую их больше всего и мотивирует. И хотя, казалось бы, проблема уже давно изучена, формализована и существует масса рекомендаций по ее решению, время от времени ее приходится решать.

И хорошо, если речь идет о проектах с простой логической структурой, использующих лишь хорошо известные библиотеки сторонних компонентов. Если же мы говорим о больших объемах кода и множестве библиотек, используемых в разных комбинациях в различных проектах-сателлитах, то сложно даже просто оценить объем работы. А между тем, прежде чем принимать какие-то стратегические решения, нужно оценить объем работ. Что конкретно понадобится делать; проанализировать, все ли сторонние компоненты перейдут в новую среду разработки; приблизительно представить себе сроки и стоимость работ. И сама по себе эта задача может оказаться весьма не простой.

Решение

В связи с вышесказанным у меня возникла идея создания некоего “анализатора проектов”. Суть его я вижу в следующем:

  • создание списка всех используемых в группе проектов модулей;
  • классификация модулей (модули проекта, сторонние компоненты, “родные” Delphi модули);
  • автоматическое создание списка сторонних компонентов, использованных в модуле и, соответственно, во всем проекте;
  • формирование списка проектов, использующих каждый из модулей;
  • формирование списка “критичных синтаксических конструкций” для каждого из модулей и проектов, соответственно;
  • создание обобщенного отчета по проектам.

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

Под “критичными синтаксическими конструкциями” я понимаю список возможных мест в коде, которые следует найти, чтобы проверить, готов ли код к правильному использованию Юникод.

Как это работает?

Очевидно, что самый простой способ создать подобные  отчеты – получить список директорий, используемых в IDE (Library Path), список модулей из файла проекта, и списки используемых модулей (uses). Технически это не сложно.  Полученные результаты – сложить в таблицы. Разобраться в том, к какому из наборов компонентов относится каждая из директорий не сложно. Таким образом, мы сможем понять и принадлежность модулей. Т. е. либо это “авторский” модуль проекта, либо это модуль стороннего производителя, либо стандартный модуль VCL. Естественно, что анализировать синтаксис кода следует только для “авторских” модулей. Что касается, сторонних компонентов, то в принципе мы сможем оценить сколько же модулей нам придется изменить, отказавшись от какой-либо из библиотек.

Создать сводный отчет, как вы понимаете, дело техники. Несколько SQL запросов.

Интуитивно, я понимаю, что каким-то образом здесь можно использовать приложение Lazy Delphi Builder Алексея Тимохина. Кроме этого, возможно стоит каким-то образом использовать инструмент QA Audits (правда пока не совсем представляю как).

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

 

Ещё в пятницу было выпущено второе обновление для RAD Studio XE5, Delphi XE5 и C++Builder XE5. Зарегистрированные пользователи могут скачать его здесь.

Список изменений довольно внушителен.

Также обновился набор компонентов InfoPower FM.

Напомню, что до Нового года все, кто приобретает продукты линии XE5 имеют возможность бесплатно получить эту библиотеку (и не только ее).

Кроме того, сейчас действуют и другие уникальные предложения от Embarcadero:

Читать далее

Еще при подготовке к харьковскому мероприятию в рамках Мирового тура RAD Studio XE5 я столкнулся с небольшой проблемой в работе с SQLite с помощью FireDAC. Если заполненную в Windows приложении базу перенести вместе с приложением на Android, кириллические строки в базе перестают читаться (вместо букв отображаются знаки вопроса). Однако, если заполнять базу непосредственно на мобильном устройстве, русские символы считываются вполне корректно. Данные из базы заполненной в стороннем приложении, или в Delphi приложении, использующем другие компоненты доступа к данным, так же отображались нормально. Слету найти решения не удалось, и мне пришлось процитировать известного украинского футбольного специалиста: “Будем разбираться!”

В отличие от последнего, разобраться с описанной проблемой мне удалось. По умолчанию при подключении к SQLite в FireDAC используется формат строк ANSI.

Если принудительно установить Unicode, то все будет работать как надо. Но есть и неприятный момент. Изменив формат строк придется во всех наборах данных пересоздать список полей, а так же заново подключить компоненты, отвечающие за отображение и ввод данных. Поэтому лучше позаботиться о кодировке сразу.

 

Сегодня небольшой обзор новых продуктов компании DevArt. Собственно, основной интерес представляют Delphi компоненты доступа к данным.

Помимо универсальной библиотеки UniDAC (которую я с удовольствием использую в некоторых проектах), в арсенале DevArt есть шесть отдельных библиотек, которые позволяют работать с особенностями конкретных СУБД:

Через несколько дней после выпуска официального релиза RAD Studio XE5 все они были обновлены. В принципе, все как обычно, компания заботится о своих клиентах и достаточно оперативно обеспечивает поддержку новых версий базового продукта. Но в контексте поддержки разработки под Android выявилось еще одна, очень сильная сторона компонентов от DevArt.
8 октября в блоге компании был опубликован пост-инструкция “How to Develop Android Database Applications in RAD Studio XE5“, из которого явственно следует, с помощью библиотек DevArt в Android приложениях можно писать клиенты не только для SQLite и InterBase, но и для Oracle, Postgree и MySQL. Цитирую дословно:
UniDAC – it is universal data access components that allow to connect to SQLite, Oracle, MySQL, PostgreSQL, and InterBase from Android
Это открывает действительно великолепные перспективы для еще большего числа Delphi разработчиков и Delphi проектов.
Кроме этого, компания выпустила новую версию собственных драйверов для DBExpress.
И, конечно, следует упомянуть о программе лояльности High Five. Вы можете получить существенную скидку за ссылку на страницы компонентов в своих профилях в социальных сетях или получить их бесплатно за обзор в блоге или в том случае, если вы Embarcadero MVP.

В своем блоге Марко Канту показал приложение, написанное на Delphi – Android клиент для англоязычного DelphiFeeds. Я решил проверить не фейк ли это :) Немного модифицировал код и получил клиент для DelphiFeeds.Ru. Вышло вполне рабочее приложение.

AndroidScreen

К сожалению, RSS DelphiFeeds.Ru не отображает авторов оригинальных постов, поэтому приложение придется немного доработать. Заодно можно и оснастить дополнительным функционалом (закладки, фильтры и т.д.). Такое приложение вполне можно будет засабмитить в GooglePlay. Интересно, а способствуют-ли подобные приложения продвижению сайтов?

Ниже привожу скриншот для предыдущего поста. Кстати, программа, снимающая скриншоты с Android устройств также написана на Delphi.

AndroidScreen2.

Делу время, а потехе час. Это я к тому, что помимо исследований Delphi для Android (а вы уже тестируете бету?) есть работа, которую нужно делать.  За сим, очередной пост-шпаргалка, возможно, кому-нибудь пригодится.

В коде моих проектов имеется множество функций, подобных, приведенной ниже.

function TFMain.ExtDescrExists(): Boolean;
var
 qry: TADOQuery;
begin
 Result:= True;
 try
 qry:= TADOQuery.Create(Self);
 qry.Connection:= DM.cnDatabase;
 qry.SQL.Add('SELECT ExpenseID FROM tblProjectExpenses WHERE ExpenseDescription<>NULL');

 qry.Open;
 if qry.IsEmpty then
 begin
  Result:= False;
 end;
 qry.Close;
 finally
 FreeAndNil(qry);
 end;

end;

Откровенно говоря, подобный код мне не особо нравится, прежде всего из-за громоздкости. Обратите внимание на рисунок:

237matches

Необходимость повторного использования кода в данном случае очевидна. Однако, сделать универсальное решение не совсем просто, поскольку в некоторых случаях проверяется наличие записей в таблице, в других – требуется извлечь значения различных типов. Чтобы решить эту задачу, я набросал небольшой класс: Читать далее

Реклама
Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика