rzaripov.kz

Калькулятор на FireMonkey для Windows и Android

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

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

Практическая ценность этого проекта для разработчика заключается в знакомстве с кроссплатформенной разработкой без привязки к VCL. В своей работе я применяю Delphi и FireMonkey наряду с Kotlin, Swift и другими технологиями, поэтому для примера выбран стиль, близкий к реальному рабочему процессу.

Разделение формы и вычислительной логики

Основу приложения должна составлять форма TForm, а расчёты лучше вынести в отдельный класс, например TCalculatorEngine. Класс хранит текущее значение, накопленный результат, выбранную операцию и признак ожидания второго операнда. Форма отвечает только за отображение состояния и передачу команд.

Для справки по FMX-компонентам и примерам адаптации форм я использую собственный каталог FireMonkey. Там собраны материалы, которые помогают быстрее перейти от настольной формы к мобильному интерфейсу и учитывать особенности обеих платформ.

Связь между формой и движком строится через обычные методы и события. При нажатии цифры вызывается Digit, при выборе действия — SetOperation, а кнопка равенства запускает Equals. Такой контракт упрощает тестирование: арифметику можно проверить без запуска графического приложения.

Проектирование кнопочной панели

Для расположения элементов подходит TGridPanel: кнопки получают равные ячейки, а их подписи легко адаптируются под разные размеры экрана. Верхняя часть формы содержит поле результата, нижняя — сетку команд. Контейнеры TLayout позволяют закрепить элементы с помощью Align и Anchors.

Подписи желательно делать короткими и понятными: «C», «±», «%», «÷», «×», «−», «+» и «=». Хотя символы привычны большинству пользователей, текстовые названия операций иногда повышают доступность интерфейса. Их можно разместить рядом с графическими знаками или использовать в подсказках.

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

Работа с числами и состояниями

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

Критерий Windows Android
Основа интерфейса Форма TForm и компоненты FMX Форма TForm и компоненты FMX
Ввод чисел Клавиатура и экранные кнопки Экранная клавиатура и кнопки
Размер интерфейса Окно можно свободно изменять Размеры рассчитываются для экрана устройства
Готовый результат Исполняемый файл Win32 или Win64 Установочный пакет APK
Основная проверка Разные версии Windows Эмулятор и физический смартфон

Состояние можно представить четырьмя основными полями: текущий ввод, сохранённый результат, операция и признак нового ввода. Методы движка меняют эти данные, а форма после каждого события запрашивает готовое строковое представление. Это исключает расхождения между тем, что видит пользователь, и тем, что хранится внутри класса.

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

Сборка приложения для двух платформ

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

Подготовка Android-платформы требует установленного Android SDK, совместимого JDK и компонентов, указанных версией компилятора. Наличие этих пакетов можно проверить через настройки среды. Обычному калькулятору не нужны разрешения на камеру, геолокацию или доступ к контактам, поэтому конфигурация остаётся минимальной.

Сборка Android-варианта создаёт установочный пакет APK, который затем устанавливается на телефон или эмулятор. Для полноценного сценария можно использовать отладку с устройством, где среда автоматически разворачивает приложение и передаёт журналы событий. Перед публикацией пакет подписывается соответствующим ключом и проверяется на целевой версии Android.

Проверка вычислений и поведения интерфейса

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

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

Для Windows имеет смысл протестировать изменение размера окна, системную локаль и поведение при высоком масштабе отображения. Кнопки должны оставаться доступными при минимально поддерживаемом размере окна, а поле результата — корректно обрезать или уменьшать шрифт. Эти проверки заранее выявляют ошибки, заметные только на отдельных конфигурациях.

Публикация проекта и его дальнейшее использование

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

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

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