Говорит и показывает Palm Константин Клягин Xakep, номер #069, стр. 069-122-3 2. Определение элементов формы. Дабл-клик на названии открывает окошко редактирования свежесозданной формы. Здесь можно изменять основные параметры формы, а также добавлять элементы. Последнее осуществляется посредством перетаскивания объектов из окошка "Catalog". Одиночный клик на объекте открывает property оного. Для каждого интерфейсного элемента есть свои параметры. Их названия говорят сами за себя. Еще элементам хорошо давать названия. Автоматом Constructor называет их Unnamed<код> , и если оставлять их такими, недолго и заблудиться в трех кнопках и паре полей ввода. Чтобы этого не случилось, кликаем на значении "Object identifier" и пишем название. 3. Выход и сохранение. После того, как все элементы интерфейса программы определены, Constructor можно закрыть. Если что-то в файле ресурсов было изменено, заголовок с определениями констант интерфейса будет перезаписан. Вообще, хидер ресурсов (по умолчанию он называется StarterRsc.h, в проекте он был переименован в palmtv_rsc.h) служит для связки интерфейса и кода посредством неких ID. Заглянув в него, мы заметим такие определения: Ассоциация элементов интерфейса с ID-ами в palmtv_rsc.h // Resource: tFRM 1000 #define MainForm 1000 #define MainRecordButton 1002 #define MainPlayButton 1003 Все это участвует в вызовах API, отвечающих за интерфейс пользователя. Скажем, открываем модальную форму мы так: Открытие формы FormPtr frmP; frmP = FrmInitForm(AboutForm); FrmDoDialog(frmP); FrmDeleteForm(frmP); Это пример взят из автоматически сгенерированного кода простейшего проекта. AboutForm - константа из StarterRsc.h, связанная с формой About из ресурсов. Обработчик событий в этом случае у нас дефолтный, поэтому обработать какие-то специфические вещи мы не сможем. При наличии полей ввода, чекбоксов или других элементов, требующих дополнительный обработки, придется писать хэндлер. Кроме этого, саму форму будем вызывать по-другому. Разберем простейший проект Starter. Форма MainForm в нем обрабатывается по всем правилам событийной модели Палма. В самом начале она активируется с помощью FrmGotoForm(). FrmGotoForm(MainForm); Событие тут же попадает в AppHandleEvent(), который загружает форму и назначает ей обработчик: Обработчик событий приложения AppHandleEvent() if (eventP-> eType == frmLoadEvent) { //Загрузить форму из ресурса. formId = eventP-> data.frmLoad.formID; frmP = FrmInitForm(formId); FrmSetActiveForm(frmP); //Установить обработчик событий для формы. Обработчик формы, активной //в данный момент, вызывается из FrmHandleEvent каждый раз при получении //события. switch (formId) { case MainForm: FrmSetEventHandler(frmP, MainFormHandleEvent); break; А если заглянуть в сам обработчик, то там уже найдется вся остальная реакция формы на события. Тот же menuEvent, по которому открывается менюшка. В общем, читай код. Собственно, так ты будешь поступать со всякой более-менее сложной формой. Для открытия будешь вызывать FrmGotoForm(), после чего в AppHandleEvent() добавишь дополнительный case с ID-ом твоей формы и с помощью FrmSetEventHandler() назначишь свой обработчик. |