Для окончательной готовности приложения следует провести ряд действий:
– Перейти в 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. Создание сертификата приложения.
Главные особенности при программировании для 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 – полная прозрачность.
В 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. Инспектор свойств компонентов.
О проекте
О подписке
Другие проекты
