Переход с VCL на FireMonkey
Прошлый проект
всплыл в памяти вместе с бывшим шефом. Бывший (а как вы расставались с предыдущим шефом?) - человек дела, начал с главного. Как насчёт позволить приложению занять еще одну нишу - мир Mac-ов? Мы ваяли семейство проектов. Согласно маркетингу, расчетный движок был один, а набор функционала с интерфейсной мордой в том или ином случае образовывал некое решение. Часть таких "комплектов" имею ярко выраженную "имиджевую" составляющую, поэтому можно говорить о хороших перспективах.
Детали
Проект реализовывался на BDS 2006. Я слышал массу нареканий относительно стабильности данной среды, причем некоторые совпадают с моим мироощущением. Но и даже там вполне нормально удавалось реализовывать проекты. Исходники тоже пришлось тянуть с "тройки", а остановились именно на BDS 2006, т.к. она была тогда самой свежей.
2-этапная миграция
Первая была с 2006 на XE2. Заняла 2 часа времени. Регресса не заметно, но полный цикл тестирования не запускаем, т.к. задача поменять не VCL 2006-го на VCL XE2, а именно совершить переход на FireMonkey (сокращенно FM).
Миграция с VCL XE2 на FM XE2 также двух-этапная. Я бы даже сказал, что "распадается на два направления". Первое - переделать интерфейс. Конечно, есть технологии ковертации, но, правды ради, есть более весомые основания для ре-конструкции "с нуля" (from scratch - пополняем словарный запас). Определенно, некоторые метафоры устарели (да-да, стали немодными), поэтому весь интерфейс можно сделать поудачней.
Вторая часть - переделка графической части, т.е. блока "чистого рисования". При проектировании классов я изначально постарался выполнить разделение логики и визуальщины, поэтому TClass и TVisualClass спокойно сосуществуют при наличии однонаправленной связи (ссылки) от второго к первому.
TVisualClass
Имеет ссылку на Canvas : TCanvas и метод Paint, использующий классические методы рисования. Вот именно преодоление расхождений между TCanvas в VCL и FireMonkey и является первоочередной задачей.
Вспомнил
о хорошей презентации Бояна Митова (Boian Mitov) на CodeRage 6. Нашёл, достал, пересмотрел. Всем советую.
Английский язык г-на Митова очень выразительный, поэтому видео очень легко воспринимается в оригинале DualCompileControl(eng).
Для любителей "литературного" перевода есть возможность посмотреть локализацию DualCompileControl(rus).
Posted by Vsevolod Leonov on August 9th, 2012 under C++Builder XE2, CodeRage, Delphi XE2, FireMonkey |

RSS Feed

August 9th, 2012 at 11:36 pm
Илья, спасибо Вам за позитивный комментарий.
На самом деле стараюсь именно файлы оставить, чтобы можно было независимо смотреть.
Я сам не выкладываю, жду, когда это сделают другие
August 10th, 2012 at 6:25 am
Всеволод, иметь возможность скачать файлы это хорошо. Но вставок с видео с Youtube или DailyMotion очень не хватает.
Спасибо keeper-у, который переодически заливает ролики на youtube.
Потому что одно дело, когда ролик можно посмотреть не отходя от кассы. И совсем другое, когда ролик надо сначала скачать, потом распаковать, а потом посмотреть. У меня в 90% случаев всё останавливается на стадии "скачать" и до стадии "посмотреть" не доходит. Пока ролик скачивается, я про него успеваю забыть.
August 13th, 2012 at 9:44 am
Всеволод, спасибо за перевод. Интересный материал.
Всеволод, может знайте, может нет, Mitov жалко не упомянул об этом, есть ли простое решение перевода конструкций:
procedure WMXXX(); message WM_XXXX, … TMessage …
на Mac?
Скинте ссылочку если где то встречали..
August 15th, 2012 at 6:44 am
Да, скоро будут анонсы развешены.
В Москве и Питере будет John Thomas, директор по продуктам (Delphi, естественно).
Елена, будет онлайн-трансляция, приглашаю Вас посмотреть!
В блоге буду постоянно размещать ссылки, чтобы никто ничего не пропустил.
February 1st, 2013 at 12:25 am
Немного не в теме, но помогите.
пиши в билдере xe2 код для работы с open office,
Variant App = CreateOleObject("com.sun.star.ServiceManager");
Variant Desktop = App.OleFunction("createInstance","com.sun.star.frame.Desktop");
выдаёт ошибку "неправильный тип переменной"
на delphi xe2
OO := CreateOleObject(’com.sun.star.ServiceManager’);
Desktop := OO.createInstance(’com.sun.star.frame.Desktop’);
все работает, не пойму почему.