Delphi XE 2. Приложения под Windows, Mac OS и iOS
Да, вам не показалось — в одном заголовке рядом Delphi и Mac OS. Не смотря на то, что многие на хабре, да и вообще, уже давно «похоронили» Delphi, её разработчики каждый год обновляют свой продукт и на этот раз — удачно…
Здесь можно было бы рассказать какая у Delphi интересная история, как всё развивалось и «завивалось», но не буду, все и так знают какая это история… Поэтому, лучше процитирую часть комментария хабрапользователя: Ребята просрали все полимеры, однозначно. Это в точности отражает, что происходило последние годы с Delphi. И кто с этим не согласится? Но вот недавно, была выпущена новая версия. С весьма заметными изменениями:
- 64-битный компилятор для Windows;
- поддержка Mac OS и iOS;
- FireMonkey;
- LiveBindings;
- FastReport;
- Documentation Insight теперь часть IDE;
- полный список.
Собственно, самое интересное это первые три пункта. О них и поговорим, а также сделаем программу в Windows, скомпилируем и запустим в Mac OS.
В общем-то, в плане интерфейса IDE мало что изменилось с последних версий и, это наверно хорошо, нет необходимости искать старые команды в новых меню. Хотя для нашего тестирования особых знаний среды и не потребуется. Поэтому, не будем тянуть, и сделаем тестовое приложение. Процесс, нахождения дистрибутива и установки, думаю можно пропустить :)
Как видно на скриншоте, в окне создания проекта появились новые типы приложений. Помимо известного VCL Forms Application, появились приложения FireMonkey. Вот они то нам и нужны. Как говорится: «Не знаешь 2D – не лезь в 3D», поэтому выбираем FireMonkey HD Application и создаем проект.
FireMonkey
Небольшая справка, что такое FireMonkey. Это новая платформа для создания приложений под Windows, Mac OS и iOS. Новая она для Embarcodero, потому что создателем являлась компания KSDev, а сама библиотека называлась VG-Scene. Потом Embarcodero купила её и сделала частью FireMonkey.
В отличии от обычных VCL компонентов, компоненты FireMonkey являются контейнерами. Это позволяет создавать свои компоненты на основе уже имеющихся, буквально движением мыши, а с помощью встроенного редактора стилей вы сможете дать своему приложению поддержку скинов. Я уже не говорю про кучу всяких эффектов в FireMonkey: затухание, размытие и т. д. Все уже сделано, можно пользоваться. Ну конечно же — возможность всё это скомпилировать и отладить в Mac OS. Интересно? Продолжим.
Тестовое приложение
Напишем небольшое приложение, которое получает HTML код указанной страницы, сохраним его и запустим в Windows. Тут ничего чудесного нет, разве что исполняемый файл, стал меньше по сравнению с XE. Да-да, обычно было наоборот, с каждой новой версией Delphi ехешник с пустой формой добавлял килобайтов. Это так, приятная мелочь, самое интересное впереди.
Для того чтобы проверить наше приложение в Mac OS, запустим её в виртуальной машине (VMware), т. к. рабочего мака под рукой нет. Кстати, при тестировании в виртуальной машине возникли некоторые проблемы с графикой, о них ниже.
Для отладки в Mac потребуется PAServer – Platform Assistant Server, установщик можно взять из директории Delphi. Копируете на Mac, устанавливаете и запускаете через paserver.command. Более подробно можете прочитать в документации. Этих действий достаточно чтобы приложение запустилось.
Теперь нужно добавить дополнительную платформу к нашему проекту. Возвращаемся в Windows и Delphi. Жмете правой кнопкой на «Target Platforms» в узле проекта и добавляете OS X. Там же есть и 64-битная версия под Windows.
После этого нужно создать профиль отладки. Жмете правой кнопкой по только что добавленой OS X и создаете новый профиль. В окне настройки профиля нужно указать адрес, порт и пароль (если задавали) к маку с PAServer’ом. После создания, делаем новый профиль активным.
Всё. Билдим проект и запускаем. Если вы запускаете через VMware, то очень может быть что приложение не запустится. Там есть какие-то траблы с графикой в VMware, поэтому нужно сделать несколько несложных манипуляций:
- Скопировать юнит FMX.Filter.pas в папку с проектом;
- Изменить в этом юните две функции;
- Установить в проекте переменную FMX.Types.GlobalUseHWEffects := False перед инициализацией.
function FilterByName(const AName: string): TFilter;
var i: Integer;
begin Result := nil;
if Filters = nil then Exit;
if GlobalUseHWEffects then begin for i := 0 to Filters.Count – 1 do if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0 then begin Result := TFilterClass(Filters.Objects[i]).Create;
Exit;
end;
end;
end;
function FilterClassByName(const AName: string): TFilterClass;
var i: Integer;
begin Result := nil;
if Filters = nil then Exit;
if GlobalUseHWEffects then begin for i := 0 to Filters.Count – 1 do if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0 then begin Result := TFilterClass(Filters.Objects[i]);
Exit;
end;
end;
end;[/code]
Пробуем ещё раз.
Собственно, «вот до чего техника дошла» (с). Сделали программу в Delphi на Windows и работаем в Mac OS – не изменив ни строчки кода. Для компиляции под iPhone и iPad, необходимо уже экспортировать проект и xCode, но это я думаю в другой статье.
Теперь вы можете достать из архивов свои старые игры на Delphi и попробовать переделать их на iOS. Удачи в экспериментах!