Delphi. Программирование для Windows, OSX, iOS и Android

Delphi. Программирование для Windows, OSX, iOS и Android
Автор: Дмитрий Осипов
Год: 2014
ISBN: 978-5-9775-3289-1
Страниц: 464
Язык: Русский
Формат: PDF
Размер: 12 Мб

Download

Книга посвящена одному из самых совершенных языков программирования Delphi XE5/XE6. В ней подробно рассматривается новейшая кроссплатформенная библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS. Проекты примеров из книги размещены на сайте издательства.

+

Механизм учета ссылок в мобильных проектах

Мобильные приложения для контроля жизненного цикла объектов ведут автоматический подсчет ссылок (Automatic Reference Counting, ARC) на удаляемый объект. В момент создания объекта счетчику ссылок присваивается единичное значение, а в момент ухода объекта из области видимости компилятора (например, по завершению локальной процедуры, внутри которой был объявлен и создан объект) значение счетчика уменьшается на единицу, и если он оказывается равным нулю — объект уничтожается.

Благодаря подсчету ссылок существенно расширяются наши возможности по управлению объектом. В простейшем случае об уничтожении локальных объектов можно просто не думать — они удалятся сами. При необходимости программист имеет возможность самостоятельно уменьшить счетчик ссылок. В современной версии Delphi XE5 вы имеете возможность прекратить использовать этот объект, не дожидаясь его выхода за область видимости (листинг 2.3).

ЗАМЕЧАНИЕ
ARC ни в коем случае не является эквивалентом сборщика мусора, используемого в платформе .NET. В отличие платформы от .NET (в которой постоянно трудится фоновый процесс, очищающий освободившуюся память спустя какое-то время после “уничтожения” объекта) в ARC память освобождается в тот же момент, как обнулится счетчик.

Передав объектной переменной неопределенное значение nil, мы говорим новому компилятору Delphi XE5, что объект нам больше не нужен. После этого компилятор самостоятельно позаботится о том, чтобы объект уничтожился после того, как завершится выполнение его метода.

ВНИМАНИЕ! В новом компиляторе с поддержкой ARC деструкторы Destroy(), Free() и FreeAndNill() не смогут явным образом удалить объект, а лишь уменьшат счетчик ссылок. Таким образом, в мобильных проектах вместо вызова классических деструкторов достаточно обнулить ссылку — присвоив объекту nil.

У всех потомков TObject предусмотрено доступное только для чтения свойство

property RefCount: Integer; //только для чтения

с помощью которого мы сможем узнать число ссылок на объект. Что делать, если программисту (скорее не просто программисту, а коварному программисту) требуется расправиться с объектом, невзирая на состояние счетчика ссылок? Для этого на уровне TObject в Delphi XE5 появился весьма кровожадный деструктор procedure DisposeOf; который уничтожает объект самым тоталитарным способом. С точки зрения чистоты программирования это не очень хорошо, т. к. после работы DisposeOf() память после объекта не освобождается. Подобный объект будет вести себя неадекватно, с одной стороны его уже нет, а с другой вы можете обратиться к его свойствам (ведь в памяти объект остался). Если логика программы предполагает использование DisposeOf(), то, по крайней мере, перед обращением к объекту проверяйте состояние свойства

property Disposed: Boolean; //только для чтения

и если свойство возвратит true, лучше этот объект более не задействовать

ГЛАВА 17

Графические эффекты

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

Более шести десятков невизуальных компонентов со страницы Effects построены на фундаменте цепочки классов “TEffect — TFilterEffect — TImageFXEffect”. Вне зависимости от “классовой” принадлежности, все графические эффекты можно разделить на пять категорий:

  1. Простейшие корректирующие эффекты, в которых результирующая окраска пиксела зависит только от его исходного цвета и некой функции преобразования. В качестве примеров подобных эффектов можно привести обычное инвертирование изображений, когда цвет пикселов меняется на противоположный.
  2. Эффекты, в которых для расчета итогового цвета функция преобразования анализирует не только целевой пиксел, но и пикселы, входящие в его ближайшее, а иногда и дальнее окружение. К таким эффектам относят эффекты затуманивания (blur) и эффекты искажения (distortions) изображения (например, свертка в спираль).
  3. Аддитивные эффекты (additive effects), привносящие в изображение новые элементы (например, зеркальное отражение).
  4. Геометрические эффекты, изменяющие форму и пропорции изображения.
  5. Разнообразные эффекты трансляции (transition effects), позволяющие получать итоговый рисунок путем перехода от одной текстуре к другой.

В период визуального проектирования подключение компонентов-эффектов к своим целевым объектам (в первую очередь компонентам, работающим с текстурами в формате TBitmap) осуществляется традиционным для библиотеки FireMonkey способом — с помощью окна управления структурой проекта (рис. 17.1). Программисту достаточно просто перетащить с помощью мыши требуемый графический фильтр в подчинение заинтересованному в визуальных “фокусах” объекту. Если разрабатываемое вами приложение предполагает динамическое включение/отключение различных визуальных эффектов во время выполнения программы, то стоит познакомиться со строками кода из листинга 17.1.

ГЛАВА 18

Анимация

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

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

ЗАМЕЧАНИЕ В FireMonkey под анимацией понимается управляемое воздействие на элементы пользовательского интерфейса, приводящее к постепенному изменению их местоположения, размеров и визуальных характеристик во времени.

 

 

ГЛАВА 19

Мультимедиа

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

Реализуемую в рамках FMX.Media работу с мультимедиа можно разделить на два направления. Первое из них нацелено на воспроизведение аудио- и видеофайлов, второе посвящено захвату аудио- и видеопотоков, поступающих от аппаратных устройств компьютера или их программных эмуляторов.

Воспроизведение мультимедиа

С целью воспроизведения мультимедийных данных создателями FireMonkey разработана пара визуальных элементов управления — TMediaPlayer и TMediaPlayerControl. Их вы обнаружите на вкладке Additional палитры компонентов Delphi. Компонент TMediaPlayer обеспечивает доступ к файлам с данными мультимедиа, а TMediaPlayerControl отвечает за вывод видеопотока на экран. Кроме того, в составе FMX имеется класс TMediaCodecManager, осуществляющий общее руководство над декодерами мультимедиа.

ГЛАВА 20

Сенсорный ввод

Если еще три десятилетия назад персональная ЭВМ для большинства из нас была невиданной диковинкой, к которой боялись даже прикоснуться, то сегодня перед компьютером не спасует даже ребенок. Почему так произошло? Неужели нынешние дети умнее детей, появившихся на свет четверть века назад? Надеюсь, что да. Но скорее всего отсутствие боязни перед электронной техникой объясняется проще — современные компьютеры очень дружелюбны.

В первую очередь дружелюбие компьютера проявляется через развитый пользовательский интерфейс. И с каждым десятилетием этот интерфейс приобретает новое качество. Судите сами. В середине XX века основным способом ввода данных были перфокарты и перфоленты, полагаю, что об удобстве здесь можно даже не говорить. Позднее появились клавиатуры, еще позднее — манипуляторы-мыши. Первые монохромные устройства отображения на электронно-лучевых трубках постепенно сменились цветными мониторами, а сегодня они уже почти полностью вытеснены жидкокристаллическими дисплеями. Но прогресс не стоит на месте. Пользователи проявляют все возрастающий интерес к интеллектуальным устройствам, обладающим сенсорными функциями ввода данных. Это в первую очередь многочисленные платежные терминалы, планшетные компьютеры, электронные доски и смартфоны. Как правило, перечисленные устройства не снабжены отдельной клавиатурой или же возможности их клавиатуры сильно ограничены. Но это не беда, программисты научили эти устройства воспринимать естественный ввод или, говоря проще, жесты человека.

ЗАМЕЧАНИЕ Под жестом (gesture) мы станем понимать произвольную геометрическую фигуру, нарисованную пользователем на устройстве сенсорного ввода с помощью электронного пера или просто пальцем.