bannerbannerbanner
Программирование для Android и работа с датчиками в среде Delphi 11

Виталий Иванович Донцов
Программирование для Android и работа с датчиками в среде Delphi 11

© Виталий Иванович Донцов, 2025

ISBN 978-5-0065-6696-5

Создано в интеллектуальной издательской системе Ridero

ВВЕДЕНИЕ

Язык программирования Delphi представляет собой объектно-ориентированный высокоуровневый язык программирования, направленный на написание прикладного программного обеспечения и является диалектом языка Pascal. Возможность легко и просто создавать приложения для персональных компьютеров на платформе Windows с прекрасным дизайном (типа Microsoft Office) снискала любовь к нему многих.

Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win 64 и поддержку операционных систем фирмы Apple (MacOS X, iOS), а в 2013 году Delphi XE5 позволила создавать приложения для устройств на платформе Android. В настоящее время наиболее приемлемой, видимо, является Delphi 10.3, в различном исполнении. Только что появившаяся Delphi 11 исправила некоторые (далеко не все) ошибки предыдущей версии и ускорила работу.

Работа по созданию кросплатформенных приложений, однако, имеет много особенностей, а каждая версия, по существу, заново переписывает многие свойства и функции, так что руководства для XE5, 6, 10 очень часто дают неверную информацию и приводимые примеры зачастую не работают. К тому же, новостью будут как новый язык, название и язык которого FireMonkey, так и его новые подходы.

Все это затрудняет работу с Delphi 10, 11, которые являются, видимо, наиболее приемлемыми из современных вариантов Delphi для создания Android приложений, но все еще имеющими множество багов и особенностей работы, которые как раз и будут описаны в данной книге, которая будет интересна как знакомым с Delphi, так и новичкам, так как приводятся все основные функции и примеры работы программ для Android.

1. DELPHI 7 ИЛИ DELPHI 10 и 11?

Для тех, кто ориентирован на создание красивых, мощных и быстродействующих программ для персональных компьютеров платформы Windows, выбором, видимо, является версия Delphi 7, к которой вернулись большинство программистов из более поздних версий. Она является, по мнению большинства, наиболее стабильно работающей и наиболее дружественной программой, на которой можно создавать практически любые прикладные программы для персональных компьютеров и имеющей ряд библиотек.

Интересно, что при создании кросплатформенных приложений одновременно с вариантом для Android создается и вариант для Windows, причем значок приложения позаимствован у Delphi 7.

Различие программ созданных на Delphi 7 и 11, определяется различием платформ и, главным образом, экрана. Экран персональных компьютеров не только больше, но и ориентирован как «Ландшафтный», тогда как «Портретный» экран смартфона, вытянутый практически в 2 раза к ширине, не дает возможности каких-либо украшений и даже надписи приходится делать мелкими и плохо читаемыми. Также в Android варианте недоступны многие функции, привычные для Delphi 7, например, популярное «Меню» отсутствует, как и текстовый редактор «RichEdit», таблицы совершенно изменены, а графики урезаны до минимума. Таким образом, лучше использовать дружественный отшлифованный интерфейс Delphi 7 для ПК, тогда как только необходимость создания приложения для смартфона делает нужным использование Delphi 10.3.

Важнейшим преимуществом Delphi 7 является мощный аппарат для создания графиков, не уступающим Excel, которые удобно и просто создавать и сохранять в удобном формате.

Рис. 1. Программы Delphi 10.3 создаются сразу в вариантах

Android и Win 64.


Также наличие в Delphi 7 компонента RichEdit позволяет форматировать текст практически как в Word и сохранять его в формате *.rtf.

Огромное количество дополнений к Delphi 7 содержит сотни компонентов практически на «любой случай» и позволяет создавать мощные, красивые и удобные программы, которые невозможно получить в среде Android.


Рис. 2. Прикладная программа «Оптимальный пульс» для ПК на Windows.


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

Скопировать в текстовый редактор (или в e-mail себе для передачи в свой ПК) можно в обоих приложениях, а скрин экрана доступен в Android как функция платформы и может затем использоваться и передаваться как обычное фото. В последнее время также Delphi 10, 11, имеют возможность обойти запрещения для современных смартфонов сохранять файлы во внешних папках: Downloads и Documents, для чего потребовалась целая серия команд и специальный запрос подтверждения прав для такого действия.


Рис. 3. Прикладная программа «Оптимальный пульс» на Android 11 для смартфона.

2. К НАЧАЛУ МУЛЬТИПЛАТФОРМЕННОГО ПРОГРАММИРОВАНИЯ

2.1. ОСОБЕННОСТИ DELPHI ANDROID

Наиболее отличающимся от обычного Delphi, видимо, является язык и библиотека «FireMonkey», которую авторы поднимают до уровня платформы. Задумка новой платформы была в возможности кросс-платформенного кода, одинакового для разных платформ, от Windows до Android, и значительное расширение возможностей: введение дополнительных наборов классов компонентов и сервисных интерфейсов, написанных на языке Delphi, в том числе для 3D-приложений и высококачественной графика.

На деле, однако, при реальной разработке приложений для Android сразу приходится сталкиваться с отсутствием некоторых привычных и важных компонентов (меню, RichEdit, урезанных таблиц, отсутствием ряда свойств, например, цвета и названия у Панели, неприглядного изначального вида Кнопок, едва видимого Edit и многого другого).

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


Тем не менее, возможность создавать работающие приложения для Android имеется, как и возможность выкладывать их в мировую сеть через Google Play Market, а для привычных в программировании к Delphi это оптимальный вариант создания APK программ.

Для работы со многими устройствами смартфона и даже доступа к внешним файлам нужны специальные разрешения в манифест.

2.2. НАЧАЛО РАБОТЫ И СОЗДАНИЕ ПРОЕКТА (ПРИЛОЖЕНИЯ)

Для начала работы следует скачать с официального сайта или найдя в Яндекс или Google, установочную программу Delphi 11 в любом варианте. Запустить установку – это все, что требуется, в отличие от других программ, все происходит само, с созданием значка на экране и открытием самой про граммы.

При открытии мы видим весьма заставку, которую спокойно можно опустить и сразу открыть файл создания приложения: файл – новый – мультиплатформенное приложение – один из полуготовых вариантов (обычно открывают «Blank Application»: пустую заготовку).

Сразу создается, как обычно, форма (Form1), на которой и будут располагаться различные компоненты работающей программы.

Здесь же видны основные части программы для работы с компонентами.

Слева: Structure (Структура взаимоподчинения компонентов, пока что представлена одной Form1), Object inspector (Инспектор объектов для выбора свойств объектов).

Справа: Pellete (Палитра сгруппированных компонентов) и отображение Project Group c наиболее важными функциями: Build Configuration (Debug и Realese) – для окончательной конфигурации и выпуска программы.


Рис. 4. Создание мультиплатформенного приложения.


Вверху: ряд кнопок для управления, наиболее важны: File – для создания, сохранения и открытия приложения; Project – с функцией Option для настройки приложения (значок, вид и ряд др.) и зеленые кнопки запуска работы программы (с предварительным debug и без него).

Запуск программы для промежуточных уточнений и исправления ошибок (которые всегда имеются) реально проводить можно и нужно сразу же на подсоединенном к ПК смартфоне (в режиме «разработчика»), поэтому первым делом такой режим нужно настроить, предварительно выбрав в 3-х верхних окошках режим «Android» и «Master» (для кросплатформенного приложения).


Рис. 5. Открываемая первичная форма для расположения компо- нентов приложения.

2.3. НАСТРОЙКА СМАРТФОНА ДЛЯ РАБОТЫ С СОЗДАВАЕМЫМ ПРИЛОЖЕНИЕМ

Для входа в режим разработчика нужно войти в «Настройки» смартфона и в разделе «О телефоне» нажать несколько раз на последний пункт «Номер сборки» для появления сообщения

«Вы стали разработчиком», затем перейти в раздел «Система» и «Дополнительно», где появился пункт «Для разработчиков», нажав на который пройти почти до конца до пункта «Отладка» и выбрать флажок «Отладка по USB». Теперь, подключив смартфон к компьютеру, мы увидим вверху в окошке название смартфона.

 


Рис. 6 и 7. Включение режима «разработчик» на смартфоне.

2.4. ОСНОВНАЯ ФОРМА ПРИЛОЖЕНИЯ (Form1)

При начале работы с созданием приложения, сразу нужно определиться с несколькими моментами. Во-первых, сразу изменить размеры и форму Form1, в соответствии с формой смартфона. Так как размеры смартфона практически соотносятся 1:2 можно выставить размеры, например: 360*700. Все остальные настройки можно сохранить неизменными. При желании можно изменить цвет формы (свойство Fill Color; а также получить градиентную заливку: Brush Gradient, свойство gradient должно быть и в Kind и в Gradient).


Рис. 8. Заполнение цветом и градиент цвета для компонентов.


На специальной панели Brush Designer с помощью 2-х ползунков можно выставить любой цвет и градиент, а также повернуть градиент на 0 – 180о. Можно также поставить галочку для Full Sсreen и для Position выставить Screen Center. В Events для Form есть множество действий, важнейшее onCrate: действия при создании формы. Свойство Quality: качество прорисовки объектов/производительность.

После создания Формы на нее перетаскиваются из Палитры все необходимые компоненты: Кнопки (Button), Метки (Label), Окошки (Edit), компоненты для отображения текста (Memo, при том, что RichEdit не доступен для Android) и Базы данных (Таблица: в Delphi 10.3, 11, два типа таблиц – обычная StringGrid для строчных данных и специальная Grid для любых типов данных). В основном используются компоненты из групп Standard и Grids. Широко используются компоненты Panel и Layout как контейнеры, обычно для выравнивания других компонентов, которые на них располагаются.

2.5. СОХРАНЕНИЕ И ЗАПУСК РАБОТЫ ПРИЛОЖЕНИЯ

На первом этапе создания приложения следует его сохранить в выбранной папке (сделайте папку с понятным названием), при этом все директории и папки не должны иметь русских букв (хотя сейчас это уже не обязательно). На этапе создания приложения и перед его запуском следует его сохранять. Сайт для загрузки Delphi11: https://www.embarcadero.com/

Для проверки программирования можно в верхнем меню Project выбрать Build Project, при наличии ошибок он выдаст анализ программы и выделит ошибки с указанием на них и описанием в нижней панели. Аналогично, так можно заставить (не всегда) самостоятельно заполнить Uses, если вдруг выдается предупреждение, что данная функция отсутствует!

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

При запуске программы создается обычный для Android файл APK, который располагается в: Android/Debug (Release) /Имя/bin/ ИмяПроекта. APK. Почему-то чаще в Debug. Просто компилирование программы через Project/Build и через Project/ Compile Project файл APK не создает!

2.6. ПОДГОТОВКА ПРИЛОЖЕНИЯ К ВЫПУСКУ

Для окончательной готовности приложения следует провести ряд действий:

– Перейти в Project Option Version Info и изменить название программы (по умолчанию равна названию проекта) – пункт label.

– На Uses Permissions можно выбрать перечень разрешений запрашиваемых от системы (изначально почти все пусты!), но лучше так все и оставить; ряд разрешений уже стоит при создании приложения изначально: сохранение и загрузка файла из внешних источников, camera, internet и ряд др., однако, реально они работают только при программном создании разрешения, иначе блокируются смартфоном как небезопасные, что оказывается довольно сложным делом.

– Можно сменить Значок – пункт icons (создать и загрузить несколько – от 36x36 до 144x144).

– Также в разделе Otientation можно выбрать Portrait, или оставить так – если Вы готовы сделать два приложения для разной ориентации экрана.

Наконец, нужно создать Подпись Сертификат: Project Options Provisioning – готовность к работе изъявит кнопка New Keystore, на щелчок открывается помощник по созданию хранилища ключей: название файла хранилища (*.keystore), пароль доступа к хранилищу, псевдоним ключа (ключевую пару открытого и секретного ключа), пароль к псевдониму и период действия ключа (по умолчанию около 9000 суток). После завершения по лучим требуемый сертификат, предназначенный для подписи файла.


Рис. 9. Смена значка приложения.


Для выкладывания приложения в Google Play нужно найти страницу разработчиков Google; ввести аккаунт (например, который использовали при регистрации своего устройства на базе Android) и небольшую плату.

После прохождения платежа окажетесь в своём кабинете, позволяющем загружать на Google play приложения.

Завершив создание профиля разработчика, получаем возможность отправить своё приложение на сервер Google, процесс начинается с щелчка по кнопке Upload Application.

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

Таким образом, созданное приложение готово и его можно распространять практически по всему миру (для чего оно должно быть мультиязычно, что также позволяет делать Android.


Рис. 10. Создание сертификата приложения.

3. ОСОБЕННОСТИ КОМПОНЕНТОВ ANDROID

Главные особенности при программировании для Android связаны с различиями смартфонов – диагонали и разрешения экрана, что сбивает настройки компонентов и может вести к выходу их за пределы экрана – используйте Scale для компонентов.

Также широко используются компоненты палитры LayOut, особенно GridPanelLayout и FlowLayout – компоненты располагаются рядом с фиксированным расстоянием, изменение одного отодвигает другие; GridLayout – сетка, обычно используется для нескольких одинаковых компонентов. В редакторе Structure следует перетащить мышью компонент в подчинение Layout. Такой прием используется и для придания свойств компонентам с палитры Effects. Компонент Panel также широко используется как контей нер для других компонентов, но практически не виден, а использование Effects часто приводит к непредсказуемым эффектам вплоть до отказа работы.

Также используется и Плавающая верстка – привязывая один компонент к границам другого методом Align, при этом важна последовательность создания компонентов и их Align.

Внутри контейнера используется свойство Margin (и Padding) для фиксирования расстояния от границ контейнера, а также свойство Position (X – от левого края, Y – от верхнего).

В Delphi 11 широко используются различные стили, в частности, общий стиль формы Form1 для всех компонентов. Он, однако, дает слишком большой шрифт, поэтому практически в StyledSetting отключают все компоненты стиля и в TextSetting устанавливаем заново для каждого компонента ему подходящий. Рекомендуется шрифт Tahoma для обычного текста, 14—16 для заголовков и 10—11 для компонентов типа Таблиц, когда нужно загрузить большое количество данных. Свойство WordWrap (при этом должно быть свойство AutoSize:= false) – автоперенос на другую строку не вмещающегося текста следует определить как true. Также часто нужно установить позицию текста center (изначально leading).


Рис. 11. Стили и их изменение.


Приложения FireMonkey автоматически отображают свой соответствующий собственный стиль во время выполнения, без необходимости добавления сборника стилей или кода. Кроме того, приложения FireMonkey могут иметь пользовательские стили. Чтобы применить определенный стиль формы можно загрузить его из файла (добавив в Uses: FMX.Styles.):

TForm1.FormCreate (sender: TObject);

TStyleManager.SetStyleFromFile('Air.style’);


Рис.12. Предустановленный стиль в Object Inspector.


Для компонентов имеется ряд свойств стиля, например, свойство прозрачность: Opacity, по умолчанию 1.0 – полная непрозрачность компонента. Для практически всех компонентов имеется свойство поворота на выбранное число градусов. Практически это свойство значения не имеет, кроме того, при повороте становятся невнятными свойства позиции и пр.

Для компонентов имеется ряд свойств стиля, например, прозрачность: Opacity, по умолчанию 1.0 – полная прозрачность.

4. ОБЩИЕ СВОЙСТВА КОМПОНЕНТОВ

В Delphi 11 больше свойств для компонентов, чем в Delphi 7, но на практике оказывается, что наиболее важные у наиболее используемых компонентов отсутствуют, что проявляется в неприглядном виде Кнопок, невидимости Панелей и Окошек и пр. Авторы FireMonkey посчитали, что первичное плоское изображение компонентов нужно изменить в соответствии с необходимым дополнительными компонентами, доступными в Effects, в которой располагаются десятки компонентов- свойств.

На деле, практически все компоненты группы Effects предна- значены для специальных эффектов типа мерцания, медленного исчезновения, жалюзи, скручивания и других мало пригодных для прикладных программ эффектов (а для разработки анимации и игр Delphi все еще недостаточно эффективен и медленно работающий). Лишь некоторые из эффектов доступны и эффективны для обычных компонентов: TBevelEffect – эффект фаски (оптимально для Panel) и TInnerGlowEffect – внутреннее свечение, возможно: TGlowEffect – наружное свечение и TShadowEffect. Для задействования эффекта нужно перетащить компонент на форму и через Structure «подчинить» эффект визуальному компоненту управления.

На примере Кнопки видны возможности визуального отображения компонентов: изменение цвета компонента и текста, размера компонента и шрифта, размытие (тень) и добавление иконки (через ImageListEditor, при этом большая и расположенная с краю иконка неприглядна, увеличивает размер кнопки и практически для смартфона мало пригодна).

Другой пример: Окошко (Edit): если в нем нет текста, то компонент практически не виден (как на рисунке 13 сразу под ImageList), поэтому приходится сбрасывать на нее TInnerGlowEffect, который проявляется как уже ясно видимое подчеркивание.


Рис. 13. Стили компонентов и добавление иконки через ImageList Editor.


Общие свойства компонентов видны из рисунка выше. Из множества свойств нужно менять лишь некоторые, остальные желательно не трогать.

Для компонентов обычно доступны:

– изменение размеров (и autoSize для Label),

– изменение цвета, в том числе градиентная заливка,

– изменение размера, цвета и типа шрифта (часто центрируют его, изначально расположен с краю – leading).

– видимость и доступность (Visible и Enable = true/false), причем иногда «недоступная» кнопка продолжает работать,

 

– наиболее важное свойство: Align – выравнивание; в Android на смартфоне важно, чтобы компоненты не «ехали» на разных экранах. Обычно используют несколько панелей вплотную и выравнивание Top и Bottom, а между ними – Client. Часто используется Scale, для разных экранов.

– Также для текстовых компонентов имеется свойство WordWrap (установите как true) для автоматического переноса на следующую строку не умещающегося текста;

– для просмотра не умещающегося на компоненте текста предусмотрено свойство ShowScrollBars и EnabledScroll = true, а также соответствующий компонент для скроллинга, что, впрочем, иногда не работает, а текст видимый на экране не помещается на экране смартфона (поэтому нужно чаще просматривать текущий результат программирования на реальном подключенном устройстве, а не на виртуальных моделях);

– добавление иконки (через ImageList Editor),

– возможность фокусируемости на данный компонент и «Read оnly» – только для чтения,

– стиль (часто приходится изменять установленный для всей формы стиль на подходящий для данного компонента),

– свойства Position (X и Y) от края контейнера (Панели, Формы) и отступы Margin – справ, слева, сверху и снизу,

– всем компонентам доступны вращение и анимации.


Свойство Sender: TObjectОтправитель») присутствует у всех компонентов, хотя редко используется. Но бывает полезно, например, узнать от какого типа источника происходит событие:

if (Sender is TButton) then ShowMassage («Click from Button»);

Или для разного действия при получении события OnClick от разных источников:

if Sender = Button1 then …… else ………..


Или для получения одного результата для разных компонентов: в Events на событие OnClick (или OnChange и т.п.) из выпадающего списка для нескольких компонентов выбрать нужный: например, Button1Click, с выполняемым везде кодом.

Или: Button2.OnClick (Sender); для Button1 – выполнит Button2.


Например, для приложения «Школьный Калькулятор» за счет свойства Sender можно значительно сократить код. Для функции power (степенная функция) в Uses ввести модуль Math.

Введем глобальную переменную S1:String; к которой можно будет иметь доступ из разных участков программы. Сбросим на Форму кнопки-числа и поставим их Text от 0 до 9, а также кнопку-сброс «C» (от Clear) и вспомогательное Edit2.

Для Button1Click:

with (Sender as TButton) do

begin

if Edit1.Text = «0» then Edit1.Text:= Text

else Edit1.Text:= Edit1.Text + Text; // Ввод числа

end;

Для остальных кнопок 2…9 и 0 введем ссылку: в Events на OnClick: Button1Click; // Ввод числа с любой кнопки

Теперь нажатие на любую кнопку-число отправит ее Text (0…9) в Edit1.Text.

Введем кнопки-действия: +, -, *, /, sqr, sqrt и power, sin, cos, Tan, Ln, Log. Для каждой определим сходный код:

S1:=Edit1.Text; // Первое число в глобальную переменную

Edit3.Text:= Button16.Text; // Выводим знак операции

Edit1.Text:= ' '; // Очищаем Edit1 от 1го числа для второго

Button21.OnClick (Sender); // Ссылка на действия с числами


Свойство Sender позволяет перейти на Button2, где имеет место код для всех действий:

//Если операция над 1-м числом – квадратный корень и др.

if Edit3.Text = ’sqrt’ then // Если первым вычисляем корень

begin

Edit2.Text:= «1»;

Edit1.Text:= FloatToStr (sqrt (StrToFloat (s1)));

s1:= Edit1.Text;

EXIT;

end;


//Если 1-е число из 2-х чисел

if Edit2.Text = «1» then

begin

Edit1.Text:= ' '; // Очищаем Edit1 от 1го числа для второго

Edit2.Text:= «2»; // Отмечаем следующее нажатие как 2-е

EXIT;

end

else // Если 2-е число введено

begin

if Edit3.Text = '+' then Edit1.Text:= FloatToStr (StrToFloat (s1) + StrToFloat (Edit1.Text));

************************

Введем также операции с памятью: M+, M-, MR, MC и возможность вводить тригонометрические функции: град или Пи.

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


Рис. 14. Программа для смартфона «Школьный калькулятор»


Рис. 15. Инспектор свойств компонентов.

1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18 
Рейтинг@Mail.ru