Публикации FreePascal

Программирование под Windows Mobile на Free Pascal

30.08.2007
Чиченин Александр (S0vNarK0m)

I. Введение

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

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

Версии ОС

Windows Mobile

Для начала мне бы хотелось пояснить, о чём вообще идёт речь и устранить некоторую неразбериху в терминологии.
Платформа Windows CE (WinCE или просто CE) — это операционная системная платформа для широкого круга носимых устройств, таких как КПК, коммуникаторы и смартфоны.
На базе этой платформы созданы три основных разновидности операционной системы Windows Monbile:
Windows Mobile for PocketPC — для КПК.
Windows Mobile for PocketPC Phone Edition — для коммуникаторов.
Windows Mobile for Smartphone — для смартфонов.
Кроме этого, можно встретить упоминания о Windows CE for Handheld PC (эти устройства были вытеснены гораздо более мощными ноутбуками, поэтому заострять внимание на них я не буду).

Неразбериха с версиями Windows Mobile

На сайте Microsoft в разделе для разработчиков очень часто термины Windows Mobile 6 и Embedded WinCE 6.0 встречаются не только в рамках одного раздела, но и в рамках одной статьи. Между двумя этими названиями установлено много перекрёстных ссылок и, на первый взгляд, действительно кажется, что Windows Mobile 6 построена на базе WinCE 6.0. Эффект усиливается и тем, что в предыдущей версии ОС индексы ядра и системы совпадали. Естественно, что эта информация была ошибочно трактована многими людьми, и в документации к порту FPC для WinCE содержится данная ошибка, которая, надеюсь, вскоре будет исправлена.

Факты таковы:
На данный момент (лето 2007 года), последней версией ядра дейтсвительно является Embedded WinCE 6.0 (Yamazaki), на его базе создаётся Windows Mobile  7 (Photon) — версия, начиная с которой разделения на смартфоны и коммуникаторы больше не будет.
Хотя Windows Mobile 6 и называют порой Windows Mobile Vista, на самом деле сходство у этой системы с настоящей Vista  лишь внешнее, так как она базируется на обновлённом ядре пятой версии — CE 5.2. Если проводить аналогию с десктопными системами, то Windows Mobile 6 несёт на себе примерно те же маркетинговые функции, что и XP в своё время — привлечь пользователей красивым, настраиваемым интерфейсом и новыми информационными сервисами. Кроме того, даже названия версий ОС стали подобны названиям версий Windows Vista.
Windows Mobile for Smartphone = Windows Mobile 6 Standard
Windows Mobile for Pocket PC Phone Edition = Windows Mobile 6 Professional
Windows Mobile for Pocket PC = Windows Mobile 6 Classic
Платформа Embedded Windows CE 6.0 довольно сильно отличается от 5.0, но система на этой платформе пока не выпущена, поэтому обсуждать её не будем.

А как же Symbian, Embedded Linux и другие системы?

Так как темой данной статьи является Windows Mobile, я не буду долго останавливаться на этих системах, но кое-что сказать нужно.
Последней версией Symbian OS является v9.5,анонсированная в Марте 2007 года. Системой Symbian в основном оснащаются смартфоны. На официальном сайте приводится, таблица, в которой говорится, что 71.7% рынка занимает Symbian, 14.3% Embedded Linux и лишь 6.9% у Microsoft.
Но не всё на самом деле так гладко. Один крупный российский сервис предложил мне среди 73 смартфонов и коммуникаторов 40 устройств, с различными версиями Windows Mobile, 32 устройства с Symbian, и одно устройство под управлением Mizi Linux 2.5 (поэтому на Linux и остальных системах больше останавливаться не буду).

Основной проблемой Symbian является наличие четырёх основных веток развития, причём это разделение произошло уже довольно давно. В результате этого существуют различные версии SDK, да ещё и выпущенные разными производителями. Портированием такого объёма заголовочных файлов на Free Pascal пока не занимались. Хотя никто не мешает создать и порт FPC под Symbian с процессором ARM.

На чём же остановиться?

Сейчас большинство устройств (имеются в виду устройства на платформе Windows CE) оснащено Windows Mobile 5 (на базе CE 5.0). Кроме того, Windows Mobile 6 естественно очень хорошо совместима с предшественницей (платформа то почти та же). Поэтому ориентироваться при разработке, на мой взгляд, следует именно на платформу CE 5.0. Хотя встречаются и устройства с Windows Mobile 2003 (SE), и, если есть возможность, не плохо бы обеспечить совместимость и с этой системой.

Железо

Теперь поговорим об оборудовании, с которым предстоит работать.
Этот вопрос на самом деле довольно сложен: рынок портативных устройств развивается очень бурно. Количество производителей и устройств устрашающе велико и постоянно растёт. Порой производители создают и себе и другим проблемы, например меняя индексы виброзвонка и индикаторов.
Основной же проблемой для разработчика на FPC является то, что ядро Windows CE одновременно поддерживает процессоры с различной микроархитектурой: x86, ARM, MIPS, SH а теперь и Xscale.

Архитектура x86 на современных мобильных устройствах (на ядре WinCE) мне не встречалась и интереса особенного не представляет, хотя RTL и FCL собираются и под платформу WinCE.

С MIPS дело обстоит хуже: на данный момент существуют модули компилятора, но RTL, а значит и всё остальное, пока не портированы. Правда устройства с этим процессором и Windows Mobile встречаются всё реже.

SH пока не поддерживается FPC вообще. Однако на современном рынке, по крайней мере российском, данный процессор не распостранён.

А вот ARM — поддерживается FPC хорошо, и именно о нём далее пойдёт речь. Благо устройств, использующих этот процессор очень много, и разрабатывать что-либо для них  на FPC — не пустая трата времени.

Разумеется, в связи с обширностью версий ARM, пока далеко не все возможности новых архитектур используются FPC в полной мере. Сказать, какую старшую версию микроядра ARM поддерживает FPC на данный момент, я не берусь — файлы компилятора, в основном, датированы 2002 и 2003 годами. В файлах компилятора упоминаний о процессорах старше ARMv5 я не обнаружил. Однако вполне вероятно, что на сегодняшний день были добавлены инструкции и из современных архитектур... но это тема уже другой статьи. В защиту компилятора, замечу только, что в SDK Windows Mobile 6 папка с заголовками API по-прежнему называется Armv4i.


Нельзя не упомянуть мощную архитектуру Intel Xscale.
Всё больше устройств на рынке используют этот процессор и, судя по всему, постепенно вытесняют устройства с ARM. Пока данный процессор не упоминается в документации к Free Pascal, однако конструкторы Xscale сделали программистам подарок: его микроархитектура использует программную модель ARMv5 TE. В результате этого Xscale обратно совместим с ARM, и разрабатывать софт для него можно и нужно на Free Pascal уже сейчас. Никаких дополнительных настроек для этого делать не нужно.
Обратите внимание, часто в описаниях указывается название Intel PXA — это тоже Xscale.

II. Разработка программ под платформу ARM-WinCE на Free Pascal

Инструментарий для сборки приложения

Замечу, что поддержку данной платформы в компилятор добавил Юрий Сидоров, часть заголовков к WinAPI добавил Oliver (Oro06), часть добавил я, а часть добавит ещё кто-то, может даже Вы.
Разрабатывать программу для Windows удобнее всего именно в Windows, поэтому дальнейшее описание касается разработки именно в этой системе.
Итак, чтобы разрабатывать софт для Windows Mobile нам потребуются следующие инструменты:
Обратите внимание, что, например, вместо записи вида:
<путь к компилятору>bin\i386-win32\.
в Вашем случае может быть:
c:\pp\bin\i386-win32\.

А) В случае если хочется иметь удобный и легко обновляемый компилятор (рекомендуемый и рабочий вариант):

1. Компилятор FPC 2.1.x или более новый, у меня, например, прекрасно работает 2.3.1 собранный прямо из SVN. Если SVN не используется, то последнюю версию исходников можно найти на http://www.freepascal.org/develop.html
После установки компилятора необходимо проверить, что в переменной окружения PATH прописан путь:
<путь к компилятору>bin\i386-win32\;
Причём, он должен там быть раньше, чем пути к остальным FPC, если их в системе несколько. Кроме того, если в системе установлен, например, MinGW, то, если, в PATH путь к нему прописан раньше, чем к FPC, то будет использован не ld из FPC, а ld из MinGW и ничего собрать не удастся.
Поправить PATH в Windows XP можно тут:
Мой компьютер, Свойства, вкладка Дополнительно,  Переменные среды, Системные переменные.
Проверить настройки, да и вообще выполнять сборку компилятора или его частей удобно через FAR, либо любой файл-менеджер с поддержкой командной строки.

2. Пакет утилит для кросс-компиляции. В него входят ld, as, ar, strip и т.д. Можно эти утилиты собрать и потом, но лично я пользуюсь уже готовым набором, взятым вот тут: ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip
Содержимое архива нужно распаковать в директорию с компилятором, например:
<путь к компилятору>bin\i386-win32\.

3. Кросс-компилятор для arm. Его нужно собрать самостоятельно, но сначала соберём обычный компилятор и установим его. Для этого переходим в корневую директорию дистрибутива с исходниками, или SVN репозитория, и, если до этого, уже проводилась сборка, выполняем: make clean.
Исходники чисты, и можно собирать компилятор для i386-win32. Для этого, не долго думая, выполняем:make all и, теперь уже думая долго, ждём результатов. Если всё нормально, то последняя строка в логе будет:
echo Build > build-stamp.i386-win32.
В результате мы получаем: компилятор ppc386.exe в папке <путь к исходникам>compiler\, утилиты для него, в папке <путь к исходникам>compiler\utils\, откомпилированные модули RTL в папке <путь к исходникам>rtl\units\i386-win32\, откомпилированные модули FCL в папке <путь к исходникам>packages\ и различных субдиректориях.
Необходимо установить компилятор, для этого в корневой директории исходников или репозитория SVN выполним: make install. Компилятор будет установлен в директорию pp\, находящуюся в корне диска, на котором лежали исходники. Однако если директория была не пуста, то инсталляция может завершиться с ошибкой, поэтому сначала удалим из директории <Ваш диск>pp\ все лишние папки, кроме папки bin, если в ней находится основной компилятор.
После завершения копирования всех файлов нужно снова поправить PATH, если раньше компилятор находился в другом месте.
Настала очередь кросс-компилятора, действия по сборке почти повторяют действия при сборке обычного компилятора. Сначала: make clean,
а затем: make all CPU_TARGET=arm OS_TARGET=wince. Снова долго думаем, и ждём:
echo Build > build-stamp.arm-wince.

Если ошибок нет, и лог на этом сообщении закончится — значит кросс-компилятор, RTL и FCL успешно собраны. Установка производится выполнением:
make crossinstall CPU_TARGET=arm OS_TARGET=wince, либо
make install PP=ppcrossarm TARGET=arm-wince.

После чего сам кросс-компилятор будет размещён в той же директории что и основной, а откомпилированные модули в директории
<Ваш диск>pp\units\arm-wince\.
Называться кросс-компилятор будет ppcrossarm.exe.
Если в будущем потребуется отдельно собрать установить RTL, FCL, или любой другой пакет, то можно перейти в нужную директорию дистрибутива исходников или SVN и выполнить следующие шаги:

make clean, для очистки модулей обычного компилятора.
make clean PP=ppcrossarm TARGET=arm-wince, для очистки модулей кросс-компилятора.
make all, для сборки модулей обычного компилятора.
make all PP=ppcrossarm TARGET=arm-wince, для сборки модулей кросс-компилятора.
make install, для установки модулей обычного компилятора.
make install PP=ppcrossarm TARGET=arm-wince, для установки модулей кросс-компилятора.

Конечно, в любой момент файлы Makefile и Makefile.fpc могут быть изменены, поэтому, в случае проблем можно их открыть и почитать. Всегда можно найти какие параметры поддерживаются и что делают.

Б) Если у Вас установлен Lazarus, и не хочется скачивать исходники компилятора:

Ранее существовало готовое дополнение, устанавливаемое поверх рабочей версии Lazarus.
Оно располагалось по адресам:
ftp://ftp.hu.freepascal.org/pub/lazarus/cross/,
http://michael-ep3.physik.uni-halle.de/Lazarus/cross/.
Но, видимо факт того, что компилятор, поставляемый в комплекте, устарел, эти автоматические установщики были удалены. Однако я решил привести здесь данные ссылки, потому что возможно через некоторое время появятся сборки с новым компилятором. Если это произойдёт — учтите, что версии используемого обычного компилятора, и кросс-компилятора из дополнения должны совпадать.
Хотя я в любом случае рекомендую воспользоваться первым вариантом и собрать компилятор самостоятельно, так как в случае возникновения проблем будет намного проще их исправить.

В независимости от варианта:

Обратите внимание, что в файле <Ваш диск>pp\bin\i386-win32\fpc.cfg должны быть строки:

# binutils prefix for cross compiling
#IFDEF FPC_CROSSCOMPILING
-XP$FPCTARGET-
#ENDIF

Если их там нет - добавьте вручную.

Инструментарий для тестирования приложения

Разумеется, любую программу необходимо отлаживать, но отладка в Free Pascal остаётся пока вопросом скорее теоретическим, чем практическим, поэтому об этом поговорим чуть позже, а сначала я опишу шаги, которые необходимо осуществить перед началом разработки программы:

Подготовка к тестированию

Если Вы стали счастливым обладателем устройства под управлением Windows Mobile, недавно, то наверняка уже обзавелись диспетчером задач, чтобы в любое время можно было завершить сбоящую программу. Если нет — скорее обзаведитесь, без этого тестирование превратится в сущую муку, так как придётся каждый раз перезагружать устройство, а это процесс совсем не быстрый. Обязательно найдите удобный способ синхронизации с ПК через Active Sync.
Если устройства под рукой не оказалось или хочется протестировать программу под другой системой, то можно воспользоваться эмулятором.
Сам эмулятор можно скачать с сайта Microsoft по адресу:
http://www.microsoft.com/downloads/details.aspx?familyid=C62D54A5-183A-4A1E-A7E2-CC500ED1F19A&displaylang=en он называется V1Emulator.zip (867 Кб).
На этой же странице можно скачать образ Windows Mobile 5.
Кроме этого в данный момент ведётся работа над второй версией, и бету можно скачать от суда: http://www.microsoft.com/downloads/details.aspx?familyid=13F5DE85-30CD-4506-9C5B-A2068FA1EE9E&displaylang=en, называется CTP_Setup_NoNetFX.msi (1.1 Мб).
Однако загрузить в него какой либо образ системы мне на момент написания статьи не удалось. Сами образа занимают достаточно много. Локализованная на русский язык Windows Mobile 6 есть тут:
http://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&DisplayLang=en.
Кроме этого, если на эмуляторе планируется тестировать сетевые приложения, необходимо скачать
Microsoft Virtual PC 2007, в комплекте с которым установится необходимый сетевой драйвер: http://www.microsoft.com/downloads/details.aspx?FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6&DisplayLang=en, правда замечу, что тестирование таких приложений необходимо и в реальных условиях.
Вообще желательно скачать SDK от Microsoft, эмулятор и образа будут прилагаться в комплекте, кроме того, там много примеров и хорошая документация. Замечу, что если появятся проблемы при установке — можно воспользоваться утилитами, подобными MsiEx, для извлечения содержимого из дистрибутива.

Отладка

В данный момент Free Pascal использует для отладки GDB. Существует специальная сборка GDB именно для отладки через ActiveSync. Скачать её можно по этой ссылке: ftp://ftp.freepascal.org/pub/fpc/contrib/cross/gdb-6.4-win32-arm-wince.zip.
В архиве три файла:
readme.txt — краткое руководство по использованию.
gdb.exe — сам отладчик, его удобно скопировать в одну папку с компилятором.
arm-wince-pe-stub.exe — клиентская часть, которая при отладке будет автоматически скопирована в папку gdb, в корневой директории смартфона, вместе с отлаживаемой программой.
Содержимое архива, за исключением readme.txt, рекомендую скопировать в директорию <Ваш диск>pp\bin\i386-win32\.

Среда разработки

Компилятор собран, уже сейчас можно откомпилировать программу под arm-wince и запустить на эмуляторе, но, разумеется, для серьёзного проекта одного компилятора и командной строки маловато.
Рассмотрим два основных инструмента, наверняка уже Вам знакомые:

Free Pascal IDE 1.0.10, которая установилась автоматически вместе с компилятором в папку <Ваш диск>pp\bin\i386-win32\.
При попытке сохранения нового проекта, данная среда разработки выдала Runtime Error, но проект сохранила, после чего закрылась. При втором запуске она действительно показала сохранённый проект и, после выбора платформы, успешно его собрала. А вот платформы arm-wince данная среда, судя по всему, не знает, поэтому откомпилировать ничего не получилось. Можно конечно попробовать поменять настройки в файле fpc.cfg , но я не стал тратить на это время, и Вам тратить не советую.

Lazarus 0.9.23, хотя разумеется должны будут подойти и более поздние версии. Но версии, младше 0.9.17, скорее всего не подойдут.
Итак, Lazarus. Постепенно данная среда разработки становится мощнее и стабильнее, и её использование перестало доставлять постоянные проблемы. Хотя ежедневные автоматические сборки и содержат компилятор (на данный момент FPC 2.1.5), я всё же предпочитаю использовать внешний. А если собирать Lazarus из SVN или из архива, то без внешнего компилятора вовсе не обойтись. Настроить Lazarus на работу с внешним компилятором довольно просто, для этого в меню Окружение, Настройки окружения указываем необходимый нам компилятор. В нашем случае:
<Ваш диск>pp\bin\i386-win32\ppc386.exe.
А за одно и путь к make:
<Ваш диск>pp\bin\i386-win32\make.exe.

В качестве пути к исходникам FPC, разумеется, указываем <путь к исходникам>, из которых собран компилятор.
Если планируется разрабатывать оконные приложения, используя визуальное проектирование, то сразу пересоберём LCL, а в случае использования пакетов придётся пересобрать их и, как следствие, потом и весь Lazarus. Для этого откроем меню Инструменты, Настройка сборки Lazarus.
В списке выберем необходимые компоненты и нажмём на кнопку Собрать.
Для начала достаточно пересобрать LCL.
Но это касается обычного компилятора, с кросс-компилятором есть некоторые особенности:
Во-первых, в меню Окружение, Настройки окружения указываем: <Ваш диск>pp\bin\i386-win32\ppcrossarm.exe.
Во-вторых, если используется LCL, необходимо её собрать для платформы arm-wince, для этого открываем меню Инструменты, Настройка сборки Lazarus, указываем в качестве целевой ОС — wince, а в качестве процессора — arm. Дальнейшие действия такие  же, как и при обычной пересборке.
В-третьих, для каждого нового проекта необходимо открывать меню Проект, Опции компилятора и выбрать целевую платформу на вкладке Код, т.е.:
для какой ОС = WinCE,
для ЦП> = arm.
При использовании LCL необходимо так же выбрать wince на вкладке Пути в поле Тип элемента управления LCL.

Тестирование и отладка

Чтобы каждый раз после сборки не тратить много времени на ручное копирование и запуск программы на устройстве, достаточно в меню Окружение, Настройки отладчика выбрать кросс-отладчик для arm-wince, в нашем случае:
<Ваш диск>pp\bin\i386-win32\make.exe.
Теперь программа автоматически будет копироваться на устройство и запускаться.
Если отладка не требуется, и программы были небольшого размера — выключим опцию выдавать номера строк в ошибках времени выполнения, на вкладке Связывание. При этом автоматическое копирование и запуск не перестанут работать. Такой вариант обычно предпочтительнее, чем последующая обработка полученного файла утилитой arm-wince-strip.exe.

Первое приложение для Windows Mobile

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

program Project1;
{$mode objfpc}{$H+}
uses
 Windows;
begin
 MessageBox(0,  'Hello Mobile World', '', MB_OK);
end.

С консольными приложениями дело обстоит хуже, но FPC тут не при чём — Windows Mobile вообще не поддерживает консоль по умолчанию. На данный момент мне не известно средств, для добавления поддержки консоли на смартфон. Для КПК и коммуникаторов существует несколько разработок, например http://www.symbolictools.de/public/pocketconsole/applications/PocketCMD/
Однако я не советую тратить на это время: для того чтобы у пользователя заработала Ваша консольная программа, ему также нужно будет установить эти библиотеки. Кроме того, реализовать подобие консоли можно и в оконном приложении.
Сделаю небольшое отступление, и честно признаюсь, что пока не всё заголовочные файлы WinAPI портированы для FPC (особенно это касается в основном Смартфонов и Коммуникаторов), но работа над этим активно ведётся, и в скором времени таких проблем возникать, надеюсь, не будет.
В случае если Вами не обнаружено необходимых заголовков, вы можете сами их добавить и выслать в Мантиссу патч, либо, если не знаете, что это такое можете связаться со мной или Юрием Сидоровым.
Разработка оконных приложений вообще, и оконных приложений для Windows Mobile в частности является очень обширной темой, которую невозможно полностью осветить в рамках одной статьи, поэтому данная тема вынесена в отдельный раздел.

III. Разработка оконных приложений для Windows Mobile в Lazarus.

Программирование без визуального проектирования и LCL

WinAPI

Если Вы планируете не использовать визуальное проектирование, то никаких дальнейших действий по настройке Lazarus не требуется. Создадим не визуальный проект, подключим Windows, и, используя WinAPI, начнём создавать формы самостоятельно. API WinCE, кстати, во многом схож с API Win32.
Но в 2007 году такой подход применять не слишком  выгодно, поэтому рассмотрим альтернативный вариант:

Библиотека KOL (Key Objects Library)

Библиотека KOL написана Владимиром Кладовым и портирована для Windows Mobile Юрием Сидоровым и позволяет создавать легковесные, но вполне функциональные приложения для Win32 и WinCE.
Существует сайт http://kolmck.net/rindex.htm, это сайт Владимира Кладова, на котором можно найти массу информации и документации, так же все последние новости, касающиеся Win32 версии KOL.
Ещё один сайт http://www.kolnmck.ru/start.shtml, это сайт, судя по всему поддерживаемый Мастерами Delphi, в разделе <файлы> можно скачать KOL, портированый под Windows Mobile, кроме того неплохой набор статей, применимых к KOL для Windows Mobile.
Однако скачать последнюю версию портированого KOL удобнее всего, используя SVN: http://sourceforge.net/svn/?group_id=188451. Сам проект находится по адресу http://sourceforge.net/projects/kol-ce. Если SVN отсутствует — можно воспользоваться ссылкой https://kol-ce.svn.sourceforge.net/svnroot/kol-ce/trunk/ и скачать последнюю версию KOL. Для этого удобно использовать менеджеры закачек, способные закачать сразу все файлы, находящиеся по ссылкам на странице. Я, например, использую бесплатный Download Master: http://www.westbyte.com/dm/?source=dm1.
Итак, для того чтобы использовать KOL, достаточно в Lazarus создать проект <Программа>, а затем просто добавить путь к этой библиотеке в путях поиска. В Lazarus, напомню, это делается в меню Проект, Опции компилятора, на вкладке Пути (в поле ввода Другие модули). Можно конечно один раз добавить строку -Fu<Путь к KOL> в файл <путь к компилятору>bin\i386-win32\fpc.cfg.
Ниже приводится пример простого оконного приложения KOL.

program KOLHelloWorld;
uses
Windows, KOL;
{$mode  objfpc}{$H+}
var
Form: PControl;
begin
Form:=NewForm(Applet,'Hello World');
Run(Form);
end.

Программирование с использованием визуального проектирования

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

LCL (Lazarus Component Library)

В силу того, что Lazarus является кроссплатформенной средой разработки, то в зависимости от используемой в системе GUI библиотеки можно выбрать соответственный набор визуальных компонентов — WidgetSet.
Этот набор реализуется LCL, и должен быть откомпилирован для целевой платформы. Как это сделать было описано в статье ранее.
Теперь просто создаём в Lazarus проект Приложение и настраиваем его для ARM и WinCE. После компиляции получаем рабочую программу, но её размер даже без отладочной информации слишком велик для использования. У меня, например, получилась программа размером 1.28 Мб. Аналогичное приложение, написанное при помощи KOL, имеет размер порядка 55 Кб.

KOL MCK (Mirror Classes Kit)

Чем больше KOL набирал свою популярность, тем больше людей хотели иметь средства, для визуального проектирования проектов, использующих KOL.
В результате был создана библиотека зеркальных классов, которые используются только на этапе конструктирования интерфейса и не попадают в конечную программу. Эта библиотека также была портирована на FPC и её можно установить в Lazarus в качестве пакета.
MCK входит в дистрибутив KOL. В портированной для WinCE версии есть пакет MirrorKOLPackage.lpk, который устанавливается в Lazarus следующим образом:
Сначала в качестве текущего компилятора выберем ppc386.exe и настроим пересборку Lazarus на платформу i386-win32.
Затем откроем пакет в меню Компоненты, Открыть файл пакета (.lpk).
Затем нажимаем на кнопку Настройки и в открывшемся диалоге, на вкладке Встраивание в IDE включаем ручную компиляцию.
После чего сохраняем пакет, и нажимаем на кнопку Установить.
Наконец в файле fpc.cfg добавляем следующие строки:
-Fu<Путь к KOL>/trunk/mck/lib/$FPCTARGET/
-Fi<Путь к KOL>/trunk/kol/

При следующем запуске Lazarus на панели компонентов появится вкладка KOL.
Теперь можно создать простое графическое приложение Lazarus и сразу сохранить его в удобную директорию. После этого на форму необходимо добавить компонент TKOLProject и в инспекторе объектов заполнить поле projectDest(имя генерируемого проекта).
Затем размещаем на форме компоненты TKOLApplet и TKOLForm и сохраняем проект. В директории проекта появится ещё один, с ним и будем работать. Откроем его и настроим Lazarus на кросс-компиляцию для ARM и WinCE. Кроме этого в путях поиска включаемых файлов добавим путь <Путь к KOL>/trunk/kol/.
Замечу, однако, что, на мой взгляд, MCK на данный момент слишком привередлив для использования, наряду с некоторой нестабильностью самого Lazarus. Поэтому работать пока не очень удобно. Так как на смартфонах у меня возникли с ним проблемы, я вообще отказался от его использования. Надеюсь, что в дальнейшем эти проблемы будут решены, а пока довольствуюсь чистым KOL.

IV. Заключение

Надеюсь, что, дочитав до этого момента, Вы имеете представление, как разрабатывать приложения для WindowsMobile. Замечу, что при разработке могут возникнуть некоторые проблемы, но общими усилиями мы сможем их решить.

Хочу сказать спасибо всем, кто помогал мне при написании данной статьи и привести ссылки на статьи других авторов, из которых Вы сможете почерпнуть дополнительную информацию:
http://wiki.freepascal.org/index.php/WinCE_port
http://wiki.lazarus.freepascal.org/Windows_CE_Interface

Актуальные версии
FPC3.2.2release
Lazarus3.2release
MSE5.10.0release
fpGUI1.4.1release
links