* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



PalmOS для программиста
20 мая 2009

Общие сведения
Всем Разработчикам Приложений и дополнительного оборудования для КПК Palm OS необходимо знать 4 главных принципа по которым создавалась OS и которыми руководствовались разработчики OS Palm и КПК PalmPilot:
Simplicity – простота в использовании и быстрая обратная реакция КПК на действия пользователя,
Expandability – дополнительные возможности по усмотрению пользователя, такие как дополнительные модули и приложения.
mobility – большое количество способов связи с др. устройствами и выход в интернет, возможность беспроводной связи, длительность автономной работы.
Wearability – вы берете КПК с собой всюду, и ни Приложения ни Дополнительные модули не должны этому мешать.

Особенности PalmOS :
PalmOS однозадачная ОС.
Поддерживает графический интерфейс (диалоги, кнопки, списки, шрифты )
Приложения PalmOS одно-потоковые, событийно ориентированные.
В PalmOS есть своя Файловая система, файлы принадлежащие ОС защищены от записи на уровне ядра.
PalmOS не загружается и не «завершает» свою работу, но у палм есть Reset это специальная процедура отдалено напоминающая загрузку.
Имеет документированное API для приложений (группы функций – managers )
Автоматически управляет питанием.
Защищает только свой код от вмешательства приложений, но приложения от приложений она не защищает.
Палм является ОС с микро ядром (Micro Kernel OS), основное качество такого типа ОС это гарантировано малое время реакции на любое внешние событие. (микро ядро AMX разработано фирмой Kadak)
Память
Память одна из важнейших частей PalmOS которая во многом определяет архитектуру ОС и ее особенности . А именно тот факт что памяти мало и что другого типа памяти в системе нет.
Физически память расположена на картах памяти – Card0, Card1,... Каждая карта памяти может иметь RAM и ROM сегменты. Все пространство RAM сегмента разделено на Dynamic RAM и Storage RAM . Storage RAM это эквивалент диска (HDD), там находятся только файлы. Dynamic RAM это эквивалент обычной памяти. В Dynamic RAM находятся все динамические объекты программы и ОС , стек, или просто блоки памяти которыми управляет программа (кроме самих программ) .

В PalmOS код приложения не загружается в память для выполнения. Зачем если все приложениями так в памяти ? выполнения происходит по месту (inplace), т.е. все программы всегда выполняются прямо из Storage RAM, чтения файла тоже происходит таким образом.
Т.к. в ROM это сегмент памяти только для чтения то соответственно там находится только файлы (каждый КПК имеет карту памяти – Card0, в ее ROMе записана ОС с встроенными приложениями) .
Размеры Dynamic RAM и Storage RAM определяются динамически при инициализации ОС и зависят от общего размера памяти в КПК. Работать с Памятью можно через специальную группу функций которая называется Memory Manager.

MemPtrNew(size) - выделить блок памяти и получить указатель.
MemHandleNew(size) – выделить блок памяти и получить его дескриптор (handle).
MemHandleLock(handle) – получить указатель от дескриптора.
Если приложение запросит слишком большой блок памяти а доступны будут только маленькие блоки то PalmOS произведет фоновую дефрагментацию памяти, при этом из-за перемещения существующих блоков, изменятся их базовые указатели. Чтобы изменение указателей не повлияло на приложение - существуют дескрипторы (handle) это указатель на указатель блока.
Если приложение выделяет память не используя дескриптор (MemPtrNew) то PalmOS не будет перемещать такой блок при дефрагментации, тоже самое будет если дескриптор заблокировать (MemHandleLock).
Не смотря на то что механизм дескрипторов сложнее чем просто работа с указателями , избежать его нельзя т.к. многие Функции Системных Менеджеров (особенно GUI сервис) работают с дескрипторами. В PalmOS также есть такое понятие для блока памяти как LocalID – специальный номер по которому можно отличить на какой карте находится блок.

Вся Dynamic RAM память доступна для любого приложения на чтение и запись и ОС не следит за этим, когда приложение завершает свою работу вся память автоматически очищается.
Т.к. в Dynamic RAM находятся также объекты ОС и системных библиотек, то любые ошибки приложения в работе с памятью могут сразу завесить всю ОС.
Если в КПК вставить дополнительное устройство , например модем , то оно возможно будет содержать в себе карту памяти со своими программами, это карта будет видна в системе как Card1, или Card2 если Card1 уже есть. 1 карта может содержать максимум 512 Мб

Файловая система

PalmOS имеет свою файловую систему, которая находится Storage RAM Главная особенность ФС это – Отсутствие директорий.

В PalmOS файл называется database, как и в любой ОС у него есть имя, размер, др. атрибуты, Database в свою очередь разбит на records (записи ). У записи есть порядковый номер, размер, др. атрибуты. В записях уже непосредственно хранятся данные.
Можно сказать что database это аналог директории а record это аналог файла т.к. приложение сначала открывает database а потом в ней открывает record на чтение или запись.
Record имеет максим размер – 64к это ограничение ставит PalmOS на макс. Блок памяти в ОС. В одном файле может быть 32768 записей , т.е. 1 файл теоретически может занимать 2Гб места на «диске» (но практически это невозможно, из-за ограничений аппаратуры).
Файлы в PalmOS могут быть 2 видов – файлы (database ) и ресурсные файлы (resource database). Файлы содержат только Записи, а ресурсные файлы содержат только Ресурсы – такие же записи просто называются ресурсы. Основные отличия это в принципе работы с ними (и в оптимизации работы исходя из назначения) .

Функции для работы с файлами обледенены в группы DataManager и ResourceManager . Все они используют группу MemoryManager для работы с памятью.

Свойства Database
Name Имя (max 32)
Type Тип – appl, hack, (как расширение файла)
CreatorID 4 байта – идентификатор создателя файла
Size

Атрибуты ReadOnly БД нельзя открыть на запись.
Backup БД нужно BackUp при синхрониз.
Copy protect БД нельзя копировать путем IR-beam, ( ? )
Launchable Это БД с данными но она может быть запущена на выполнение.
Open True – БД открыта
Resource DB БД типа Resource DB,


Date Дата Создания, Изменения, Сихронизации
Modification Num Число изменений БД, (удаление, добавл, изм записи)

Например все приложения имеют тип “appl”. Каждое приложение имеет уникальный CreatorID, этот идентификатор выбирает разработчик для каждого своего приложения. На уникальность его можно проверить на сайте Palm Os. По CreatorID можно однозначно узнать какому приложению принадлежит база.
Например Приложение Applications по команде “Info” показывает размер приложения со всеми его базами, а также при удалении будут удалены все базы (?)

Свойиства записи (Record)
busy Приложение открыло эту запись и заблокировало ее. Т.е. к ней нет доступа.
Delete Запись визуально удалена ( физически удалится после синхронизации)
Dirty Изменена после последней Синхронизации.
Secret Запись помечена как Private (не надо ее показывать)

Далее в тексте для простоты БазуДанных в Palm будем называть файл.

Чтобы открыть файл нужно знать его LocalID и номер карты где он находится (обычно 0).
DmGetNextDatabaseByTypeCreator(номер карты, тип, номер владельца) - получить LocalID
DmFindDatabase( номер карты, имя файла) - получить LocalID
DmOpenDatabase( номер карты, LocalID) - открыть файл (handle)
DmQueryRecord(handle файла ) - получить дескриптор на запись (handle)
DmWrite( указатель , смещение, данные) - пишем данные в запись
Записывать в запись можно только с помощью специальной функции ( по соображениям безопасности) другое использование указателя на запись сразу вызывает ошибку с последующим Ресетом КПК.
Создание приложений, Инструментарий, POSE
Большинство Palm программистов обычно пишут на С (С++) ,однако существуют компиляторы для других языков: Java, Pascal, Basic, SmalTalk, Assembler.
Для Палм , есть много различных сред разработки , Самая популярные GUI IDE это CodeWarrior, так-же есть Falch.Net, VFDIDE, and PilotMAG - все эти "визуальные" среды разработки имеют редактор кода с синтаксической подсветкой кода и др. функции. (управление проектом, отладчик, ...) компилируют они с помощью PRC-Tools. стоят от 20-30$. Самая популярная некоммерческая среда это PRC-Tools (набор утилит - командная строка). Большинство разработчиков предпочитают PRC-Tools, , т.к. это бесплатно, популярно, и этот продукт поддерживается официально Palm .
Инсталляция PRC-Tools напоминает инсталляцию ФИДО на домашнем компе, - нужно установить 4 независимых софта, и правильно их настроить, что-б они вместе работали, вобщем придется повозится. Советую найти ФАК по этому делу.
В качестве напутствия для программистов можно сказать, что Палм это очень открытая платформа, как для разработчиков Софта так и для разработчиков железа. Во первых Palm Computing создала сообщество разработчиков,
Palm Alliance Program - сообщество Палм программистов, там можно получить ROM файлы практически с любой версией PalmOS. также можно получить "debug" ROMs с отладочными версиями PalmOS (для системных программистов)

На сайте palm.com всегда доступна полная документация по Палм ОС а также различные FAQ, Knowledge Base и конференции. Написано много книг и публикаций для программистов, в интернете можно найти кучу исходных тестов по различным направлениям. Также для простоты создания программ, Palm Computing создала бесплатный PalmOS Emulator (POSE) – эмулятор ОС Палм для тестирования Палм приложений на настольном компьютере.

POSE – эмулятор КПК с любой версией PalmOS (работает под Windows , Mac, Unix). Для его работы нужен только ROM файл с PalmOS, его можно “вытащить” из КПК либо скачать из интернета, что намного проще (см. ссылки). Разработчик запускает POSE и видит на мониторе настоящий КПК – можно мышкой кликать на экране КПК как стилусом (даже писать граффити), можно запускать приложения. (можно встретить еще “CoPilot“ - это тоже самое, предшественник POSE)

Преимущества POSE:
1. Процесс загрузки приложения в POSE намного быстрее чем в реальный КПК, что намного ускоряет процесс тестирования. Не нужно каждый раз синхронизироваться.
2. В POSE можно сохранять текущее состояние КПК, а потом к нему возвращаться.
3. Source-Level отладка намного проще с POSE.
4. В POSE можно делать скриншоты, и применять Gremlins – искусственный «неопытный» пользователь.
5. С помощью POSE можно увидеть различные КПК с PalmOS разных версий с различным размером памяти, без наличия самого КПК.
Итак, POSE это MustHave для любого PalmOS программиста.

Чтобы создать простое приложения для PalmOS 3.1 с помощью PRC-Tools, необходимо установить CygWin(2.01), PRC-Tools(), PilRc for Win32 , PalmOs SDK 3.5 , PalmOS Emulator. Дополнительные сведения об установке можно найти в интернете.

Простое Приложение состоит из 3 файлов - *.c, resource.h , *.rcp(файл с ресурсами),
Каждое Palm приложение имеет уникальный CreatorID, это 4 байта, например «MyAp». Палм использует CrID для того что-бы различать приложения и его файлы. Если два приложения имеют одинаковый CrID то одно из них может затереть второе при синхронизации, либо повредить файлы другого приложения. Для каждого приложения которое «выходит в мир» нужно регистрировать CreatorID на сайте Palm.com.
После компиляции и сборки мы получаем файл с расширением prc – готовое приложение для PalmOS, его можно поместить в эмулятор для тестирования (или инсталлировать в КПК через HotSync).

Выполнение приложений

PalmOS однозадачная ОС т.е. активным бывает только одно приложение, когда пользователь переключатся на др. приложение то предыдущее завершает свою работу.
Всегда работает UIAS (User Interface Application Shell) это такой процесс (часть ядра) который сразу при старте запускает какое ни будь приложение, ждет его завершения и запускает другой, обычно первым он запускает Launcher.

Приложения в Palm почти такие же как в Windows. Точка входа в Palm приложение – функция PilotMain. В качестве параметров к ней самый важный это код запуска - LaunchCode , т.к. Palm иногда может запустить приложение не сцелью запуска, а с целью «сообщить» что-то важное или «узнать» что-то от приложения ( например reset или синхронизация или в случае глобального поиска). SysAppLaunchCmdNormalLaunch это код обычного запуска т.е. приложение должно показать свой интерфейс.
В PalmOS есть аналог командной строки, параметры передаются при вызове приложения в PilotMain. Приложения могут запускать другие приложения с разными LaunchCode, a также можно послать всем приложениям в системе какой-то LaunchCode, чтоб они выполнили определенное действие.

После того как приложение создало свой интерфейс(FrmGotoForm), оно в бесконечном цикле передает управление Ядру (EvtGetEvent) ожидая события (прикосновение стилуса или нажатие кнопки или системные события). Здесь все работает как в Windows – Если произошло событие, определить кому оно предназначено. Например если событие произошло на форме приложения - вызвать обработчик FormEvtHandler. При закрытии приложения поступает событие – AppStopEvent.

Управление Питанием

PalmOS автоматически управляет питанием, при этом приложения ни как не участвуют в этом. Хотя приложение может вкл/выкл дисплей, выполнить ресет, или работая с регистрами аппаратуры КПК замедлить работу КПК, тем самым продлить жизнь батареек. Существует 3 режима питания:
Doze mode – Режим бездействия, Дисплей включен, активно какое либо приложение, но оно ничего не выполняет. Процессор готов к работе но не выполняет инструкций (halted). Активируется сразу после вызова EvtGetEvent. (пользователь не прикасается стилусом экрана, и не нажимает кнопки)

Sleep mode – Режим «сна». Активируется Если Doze mode по времени продолжается дольше установленного тайм-аута. Выключены: Дисплей, дигитайзер, главные часы, работают: контролер прерываний. Все устройства PDA переводятся на режим экономии питания, система ждет событий от кнопок либо от часов реального времени.

Running mode – Режим активной работы, Дисплей включен , активно какое либо приложение, процессор выполняет инструкции. Все устройства готовы к работе либо работают. Обычно это EvtGetEvent возвращает какое-то событие и приложение его обрабатывает. (пользователь работает стилусом, жмет на кнопки, или приложение выполняет работу)

В Running mode КПК находится 5%-10% от времени проведенного в Doze mode, это объясняется тем , что пользователь обычно большую часть времени изучает информацию на дисплее нежели производит действия. В активных играх это конечно не соблюдается т.к. пользователь постоянно жмет на кнопки или тычет стилусом в экран. Для того чтобы приложения не противоречили этой стратегии нужно придерживаться определенных правил. (в SDK )

PalmOS GUI
PalmOS это графическая операционная система обладающая средствами для для создания практически любого GUI.
Базовые элементы GUI - это Форма (Form), Диалог, Меню, и различные элементы такие как: кнопки, флажки, списки, поля с текстом, селекторы, таблицы, картинки.

Интерфейс обычно создается в виде словесного описания в *.rpc файле (который компилируется PilRC.exe). В этом файле вы описываете какие формы будет показывать приложение и какие элементы (кнопки, надписи ...) будут отображаться на форме.
Для программистов на Win Api можно сказать проще: - для Палм приложения нужно создавать файл ресурсов со всеми диалогами, картинками и строками . Этот файл имеет почти такой-де синтаксис как и для WinApi. при создании PRC файла ресурсы линкуются в него.

Форма
Обычно Палм приложение содержит несколько Форм и одно Меню, форма может занимать только часть экрана (т.е. диалог), двигать формы стилусом нельзя. Интерфейс в Палм модальный, т.е. активна может быть только одна форма, для переключения м/д форм нужно делать FrmGotoForm или FrmPopupForm.
не модальность бессмысленна на маленьком экране, вносит осложнения для пользователя и требует больших усилий со стороны ОС, следовательно и большего количества кода.

События которые происходят на форме (нажатие кнопки, ввод буквы, команда меню выделение строки списка) приходят в процедуру – обработчик сообщений формы ( FormEvtHandler рис) c параметром event – структура с информацией о событии.
event->eType – тип события:
ctlSelectEvent Нажали на кнопку
event->data.ctlEnter.controlID – номер кнопки
MenuEvent Команда из меню
event->data.menu.itemID –
номер команды меню
FrmCloseEvent
FrmOpenEvent Форма закрывается
PopSelectEvent
LstSelectEvent Выбрали строку в
Выбрали строку в списке

Меню
Меню а Палм существует для того чтобы снять нагрузку с Формы и убрать все второстепенные элементы интерфейса в меню. Однако нужно помнить что, для того чтобы добраться до меню пользователь делает 3 клика стилусом, поэтому там обычно находятся редко употребляемые команды.
Command Shortkut – это ускоряет выполнение комманд из меню

Меню создается в файле ресурсов как и формы, а при описании формы можно указать какое меню использует форма. Каждая строка меню представлена текстом и командой(номер) которая будет послана приложению
- для быстрого доступа к командам из меню приложение может использовать Command Toolbar для того чтобы вставить туда пиктограммы наиболее частых команд

Ограничения Palm GUI:
1. Для элементов интерфейса отсутствует такое понятие как Disabled.
2. Меню не всегда видно на экране.
3. Отсутствуют: StatusBar, TAB control, Контекстные меню (нужно делать самому),
4. Нет контекстной помощи , подсказок (ToolTips). В PalmOS каждый диалог может иметь свой HELP диалог, который открывается поверх старого если кликнуть на ?

Интерфейс можно создавать динамически , а также создавать нестандартные элементы, но это довольно сложная задача.

При работе с fields (editBox) приходится сталкиваться с непривычными моментами, например: многострочному полю можно установить текст по FldSetTextHandle(filed , Handle) после этого о Handle можно «забыть» т.к. им управляет сам editBox. Получить его обратно можно по FldGetTextHandle но чтобы он стал полностью вашим нужно еще сделать FldSetTextHandle(filed , NULL). Иначе Handle нельзя удалять. Аналогичная комбинация действий в Windows выглядит по другому , SetWindowText копирует текст к себе в буфер, и после этого оригинальный буфер ни как не привязан к editBox‘у – его можно удалять, а получение текста обратно не накладывает никаких ограничений.
Подобные тонкости являются частью стратегии управлением памяти, к ним быстро можно привыкнуть (после WinAPI).

Графика
В PalmOS также существует набор функций для работы с простейшей графикой : точки, линии, круги, прямоугольники, заливка, инверсия, картинки. Функции из группы Window Manager также позволяют следить за состоянием Графики – устанавливать цвет пера, заливки, текущий шрифт. Для быстрой графики можно писать прямо в видео буфер.
PalmOS 4.0 поддерживает 1-, 2-, 4- 8 и 16-битовые цвета и оттенки а PalmOS 3.0 – 4 градации серого.
Сервис ОС
В этой главе я перечислю некоторые возможности PalmOS которыми пользуются все приложения.

В начале следует сказать о Системных Менеджерах ( Managers ) это компоненты ОС которые выполняют различные задачи, например DataBase Manager, Memory Manager.
Для программиста, менеджер это группа функций относящиеся к нему, первые 2ве-3 буквы имени функции - это абривиатура имени менеджера, например DmOpen, MmAloc. Если знать все префиксы то удобно читать исходный код программ .

Имя Manager Префикс имени функций
Alarm Manager Alm
Time Manager Tim (Date*)
Sound Manager Snd
System Manager Sys
Form Manager Frm


Для более детального изучения Менеджеров обязательно нужно прочитать соответствующий раздел в «Palm OS® Programmer's Companion vol. 1» (на сайте palm.com) , документация написано хорошо , также я рекомендую всем программистам которые перешли на PalmOS с др. системы прочитать 2 главу «Good Design Practices», это обзор наиболее важных моментов для PalmOS приложения, эту главу нужно читать несколько раз.
Итак «Good Design Practices» - must read всем программерам под Палм.

System Features
Аналог переменных окружения в ДОС (типа PATH, SET значения ), т.е. глобальное значение (только 4 байта )которое можно установить и до полного ресета они будут установлены. В PalmOS есть системные значения типа версии ОС - sysFtrNumROMVersion, или версии библиотеки
при написании приложений нужно проверять версию ОС , т.к. программа может использовать функции которых нет в старых верисиях.
Устанавливается или считывается Feature с помощью CrID (кто создал этот фтр). Для получения системных Feature в качестве CrID используется sysFtrCreator. Этим сервисом удобно пользоваться если необходимо хранить какие ни будь 2-3 числовых настройки, или если функции доступа к файлам временно недоступны (например из хаков)

Preferences
Аналог реестра в Windows. Это общий файл для хранения настроек приложения( PrefGetAppPreferences). так-же Есть системные Preferences - там хранятся значения типа формата даты, времени ед. измерения PrefGetPreference(prefTimeFormat )

Звук
SoundManager позволяет генерировать простые сигналы, разной частоты и длительности.
PalmOS, начиная с версии 3.5 поддерживает воспроизведение стандартных MIDI-звуков.

Notifications
Используя Notification Feature Set приложение может получать различные уведомления о системных событиях. Notifications это те-же launch code. Уведомления могут получать не только приложения но и библиотеки и хаки (см. хаки).
вставка/извлечение доп. Модуля, удаление файла, изменение настроек экрана, сети, времени, подключение/откл. от сети, спячка, ресет, синхронизация.

Attentions and alarms
Приложения может поставить «будильник» для себя, когда время подойдет то Palm сообщит приложению что время пришло, если приложение закрыто то PalmOS запустит его. Attention Manager может не запускать приложение, а только показать диалог с сообщением от этого приложения, и если пользователь захочет то может отложить это событие на пару минут.

Reset, и Жесткий Reset
Приложение может самостоятельно делать Reset - это отчистка Dynamic RAM памяти, проверка целостности Storage RAM , потом дефрагментация памяти ,
Жесткий Reset это обнуление всей памяти (уничтожение всей файловой системы) и создание файловой системы заново, потом туда копируются приложения.

Комуникации
Infra Red, Serial Port, Network – это 3 основных типа коммуникаций в PalmOS ,
InfraRed и SerialPor - приложение может пользоваться инфракрасным портом на нескольких уровнях – высокий уровень это например - пересылка файлов, низкий уровень эта работа с портом напрямую.
Network – можно используя TCP/IP протокол работать с интернетом или локальной сетью, присутствует Berkley Sockets функции. Можно работать в Асинхроном или Синхроном режимах (неблокируемые вызовы и блокируемые)
Совместимость версий
Этот вопрос очень важный для PalmOS, сейчас самые распространенные версии 3.0 – 4.0. Концептуальной разницы в них нет, главное отличие это сревис ОС для приложений (так называемый Feature Set – наборы сервисов). Palm OS SDK содержит главу Compatibility Guide – в которой объясняется различие версий. , Приложение должно проверять версию чтобы быть уверенным что необходимый сервис присутствует в данной версии Palm OS, и не запускаться в случае неподдерживаемой версии. Например Alarm Manager присутствует не во всех версиях.
Расширения PalmOS
Как уже ранее говорилось все приложения вызывают функции PalmOS для выполненеия каких либо действий ( в Windows такой набор функций называется WinAPI ), например открытие файла, вывод на экран, ввод/вывод. Но PalmOS так устроена что в ней можно переопределять поведение этих функций.
в Windows тоже можно подменить любую API функцию, но в PalmOS этот механизм упрощен и офиально поддерживается на уровне системы.

Рассмотрим на пример что происходит при открытии файла:
при вызове DmOpenDatabase (открытие файла) вызывается функция с номером sysTrapDmOpenDatabase в специальной таблице указателей. Этот механизм называется - Palm OS trap dispatch mechanism – т.е. когда вызывается функция то на самом деле приложение обращается к trap dispatch механизму и просит его вызвать такой-то номер функции (а параметры передаются в стеке). Эту таблицу указателей можно спокойно изменять с целью подмены функций.

Подменить системную функцию может любое приложение (например CyrHack, оно видно в системе как приложение но подменяет ряд функция для русификации PalmOS). Но есть еще специальный вид приложений для PalmOS – это Хаки (от слова hach, а фициальное название System Extention), это проложения которые созданы по спецификации HackMaster API (независимый стандарт). Это стандарт который облегчает создание Хаков, а так-же делает более безопасным их присутствие в системе. Согласно этому стандарту за всеми хаками в системе следит Менеджер Хаков. Это обычное приложение в котором можно посмотреть сисок всех хаков, настроить их, и активизировать.

Программирование хаков требует более глубокого знания системы.

Пример Разработки Приложения для PalmOS

Рассмотрим пример простого приложения - example1.prc(1,5кб) оно состоит из одной формы. На Форме расположена кнопка , надпись, и текстовое поле, к форме прикреплено меню . При нажатии на кнопку появляется сообщение. Проект приложения состоит из 3х файлов:
Example1.c – исходный код на языке С.
Example1.h – имена и номера елементов формы
Example1.rcp – описание ресурсов приложения (форма, меню, кнопка, диалог сообщения).

файл example1.c
#include <PalmOS.h>
#include "hw.h"
static FormPtr gpForm;

Boolean Form1_HandleEvent(EventPtr event)
{
switch(event->eType) {
case ctlSelectEvent:
if ( event->data.ctlEnter.controlID == Button1)
FrmCustomAlert(Alert1, "MessageBox !", "", "");
break;
case menuEvent:
if ( event->data.menu.itemID == IDM_about)
FrmCustomAlert(Alert1, "This is Example", "", "");
break;
case frmOpenEvent:
gpForm=FrmGetActiveForm();
FrmDrawForm(gpForm);
break;
case frmCloseEvent:
FrmEraseForm(gpForm);
FrmDeleteForm(gpForm);
break;

default:
return false;

}
return true;
}

static Boolean ApplicationHandleEvent(EventPtr event)
{
FormPtr frm;
Boolean handled=false;

switch(event->eType) {
case frmLoadEvent:
frm = FrmInitForm (event->data.frmLoad.formID);
FrmSetActiveForm (frm);
FrmSetEventHandler(frm , Form1_HandleEvent);
handled = true;
break;
}
return handled;
}
UInt32 PilotMain(UInt16 launchCode, void *cmdPBP, UInt16 launchFlags)
{
EventType event;
UInt16 error;

if(launchCode==sysAppLaunchCmdNormalLaunch) {
FrmGotoForm(Form1);
do {
EvtGetEvent(&event,evtWaitForever);
if(!SysHandleEvent(&event))
if(!MenuHandleEvent(0,&event,&error))
if(!ApplicationHandleEvent(&event))
FrmDispatchEvent(&event);
}
while(event.eType!=appStopEvent);
FrmCloseAllForms();
}
return 1;
}

файл example1.rcp

#include "hw.h"

FORM ID Form1 AT (0 0 160 160) FRAME USABLE
MENUID MenuBar1
BEGIN
TITLE "Example 1"
LABEL "This is an example" AUTOID AT (10 10+5) FONT 1
LABEL "of small GUI programm" AUTOID AT (PREVLEFT PREVBOTTOM+5) FONT 2
FIELD ID IDB_Edit1 AT (PREVLEFT PREVBOTTOM+5 110 20) MAXCHARS 50 UNDERLINED FONT 2
BUTTON "Hello" ID Button1 AT (10 80 AUTO AUTO)
END

MENU ID MenuBar1
BEGIN
PULLDOWN "Help"
BEGIN
MENUITEM "About" ID IDM_about "A"
END
END

ALERT ID Alert1
INFORMATION
BEGIN
TITLE "Example 1"
MESSAGE "^1 ^2 ^3"
BUTTONS "Ok"
END

Файл example1.h
#define Form1 1000
#define Button1 1003
#define Edit1 1006
#define MenuBar1 1000
#define Alert1 1102

#define IDM_about 1001
#define IDB_Edit1 1002


Теги: Полезная информация

Статьи по теме:

Palm Pilot
КПК Palm для пользователя
Дополнительные устройства для КПК
Сенсорный дисплей
История Развития Карманных Компьютеров
Создание CSS
Создание Web-страниц
Средства создания Web-страниц
Распространение Internet
Подключение КПК к Компьютеру. Синхронизация
Ввод текста, Граффити и Клавиатура
КПК сегодня
Основные объекты Web-страницы
Стандартные Приложения
КПК - Карманный Персональный Компьютер
| Полезная информация | vitek |
 


Пн Вт Ср Чт Пт Сб Вс
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | Полезная информация | PalmOS для программиста . Регион сайта: Москва и Санкт-Петербург