AppBuilder (1037668), страница 4

Файл №1037668 AppBuilder (Раздаточные материалы) 4 страницаAppBuilder (1037668) страница 42017-12-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

.

6. Выбираем виджет PtButton и изменяем его ресурс текста кнопки на Done. Тогда измените его имя образца на about_done.

7. Выравняем по центру виджеты горизонтально в диалоге. Выберем PtLabel виджет и PtButton виджет, выберите Align из меню Widget, и затем выберите Alignment Tool из подменю. Вы будете видеть диалог выравнивания Виджетов:

8. В столбце Horizontal, нажмите Align Centers, и на Align to Container. Потом нажмите кнопку Align. Две метки и кнопка должны теперь должны быть центрированы горизонтально в пределах вашего диалога. Ваш aboutdlg модуль должен теперь выглядеть следующим образом

Добавление callback вызова к кнопке Done

Теперь давайте добавлять callback вызов к кнопке Done так, чтобы диалог закрылся, когда пользователь нажимает на кнопку.

1. Выбирают кнопку Done, затем переключают к панели управления callback вызовов.

2. Щелкнем Activate, чтобы добавить активизирующийся callback вызов. Вы увидите редактор callback вызова.

3. Выбираем Done тип кода, затем нажимают Apply. Не введите ничто в поле Function. Выбор Done типа кода говорит виджету исполнять операцию “Done”, когда виджет активизирован. То есть виджет вызывает функцию указанной в поле Function (если определены) и затем закрываете модуль диалога.

4. Закрываем редактор. Список callback вызовов теперь указывает, что Вы добавили активизирующийся callback вызов по имени Done:

Модификация сгенерированного кода функции

Теперь необходимо изменить сгенерированную функцию aboutdlg setup() так, чтобы она изменяла метку about version, чтобы показать номер версии.

1. Выберем Build>Generate UI. Это сохраняет ваше приложение, и генерирует необходимые файлы.

2. Когда генерация объектного кода закончена, выберем Window>Show Project чтобы принести

окно Browse Files на передний план. Выберите aboutdlg setup.c в списке файлов, и нажмите Edit, или дважды щелкните имя файла. Если Вы используете PhAB из интегрированной среды разработки, Вы можете открыть и редактировать этот файл в интегрированной среде разработки.

Измените код :

int

aboutdlg setup( PtWidget t *link instance,

ApInfo t *apinfo,

PtCallbackInfo t *cbinfo )

{

/* eliminate ’unreferenced’ warnings */

link instance = link instance,

apinfo = apinfo,

cbinfo = cbinfo;

return( Pt CONTINUE );

}

На следующий:

int

aboutdlg setup( PtWidget t *link instance,

ApInfo t *apinfo,

PtCallbackInfo t *cbinfo )

{

/* eliminate ’unreferenced’ warnings */

link instance = link instance, apinfo = apinfo,

cbinfo = cbinfo;

PtSetResource( ABW about version, Pt ARG TEXT STRING,

"1.00", 0);

return( Pt CONTINUE );

}

код помещает номер версии (1.00) в текстовый строковый ресурс для виджета about version. Чтобы сделать это, код вызывает PtSetResource (), чтобы установить ресурс для about version

виджета. Код использует PhAB-сгенерированную декларацию ABW_about version, которая обеспечивает доступ к указателю образца виджета. Мы можем использовать эту декларацию безопасно, так как мы имеем дело с модулем диалога — PhAB, гарантирует, что только один образец диалога будет существовать в любое данное время.

3. Сохраняем изменения и выходим из текстового редактора.

Компилирование и Выполнение

Теперь мы готовы компилировать и выполнить программу:

1. Скомпонуем и выполним наше приложение. Если наша программа компилируется и связывается без ошибок (так должно быть, если Вы редактировали функцию правильно), все будет работать.

2. Из выполняющейся прикладной программы, откройте Help и выберите About Demo. Диалог откроется, и Вы будете видеть номер версии (1.00) под меткой About this Demo. Обратите внимание, что диалог появляется в местоположении, которое Вы определили.

3. Теперь попробуем исполнить второй образец диалога. Как Вы видите, это не работает. PhAB всегда гарантирует, что есть только один образец виджета Диалога.

4. Нажимает Done, чтобы закрыть диалог, затем выходить из приложения, выбирая Quit из его меню File.

Обучающая программа 5. — создание окон

Из предыдущей программы tut4, Вы узнали, как обработать модули диалога, которые поддерживают только один экземпляр окна. В этой программе Вы узнаете, как обработать модули окна, которые поддерживают многооконный режим.

Эта программа использует приложение, которое было создано в предыдущей программе tut4.

Поддерживая многооконный режим, оконные модули обеспечивают больше гибкости чем диалоги. Но используя эту гибкость, Вы должны следить за именем каждого экземпляра окна. Выполнение приложения гарантирует что Вы правильно ссылаетесь на виджеты в пределах каждого экземпляра окна. Вы не можете безопасно использовать сгенерированную глобальную переменную ABW_xxx декларацию, так как она относится только к последнему созданному экземпляру. Чтобы упростить задачу работы в многооконном режиме, PhAB обеспечивает библиотечные функции API, которые позволяют Вам обращаться к любому виджету посредством имени его глобальной переменной (ABN_xxx).

Создание окна

Давайте создадим оконный модуль и прикрепим его к пункту меню New в разделе меню File в приложении tut4. Это окно будет содержать кнопки, которые изменяют цвет другого виджета.

В предыдущей программе tut4, Вы создавали модуль диалога изнутри редактора callback вызовов. Но на сей раз, Вы добавите окно из меню Project. В будущем, используйте любой метод, который Вы предпочитаете.

1. Делаем копию приложения tut4. и называем его tut5.

2. Отображаем модуль диалога aboutdlg.

3. Из меню Project, выберите Add Window. Когда PhAB запрашивает Вас относительно стиля окна, выбираем Plain (простой) стиль.

4. Изменяем имя экземпляра нового окна вместо Window0 на newwin, печатая новое имя в поле Name в панели управления.

5. Оконный модуль должен теперь быть выбранным пунктом.

Прикрепление callback вызовов

Поскольку модуль окна поддерживает многооконный режим, Вы должны создать функции кода, которые будут вызываться всякий раз, когда окно открывается или закрывается (то есть всякий раз, когда окно создается или удаляется). Так что давайте сначала устанавим callback вызов, чтобы обнаружить, когда окно закрывается:

1. Переключимся к панели управления callback вызовов, в случае необходимости.

2. Из списка callback вызовов, выберите Window Manager. Вы хотите использовать callback

вызов Администратора полиэкранного режима, так как он вызывается, когда Администратор полиэкранного режима Фотона закрывает окно.

3. В поле Function, напечатайте newwin_close. Вы не должны выбирать тип callback вызова заданный по умолчанию, выберите тот тип, который вам необходим. Нажмите Apply, потом Done.

4. Переключитесь в панель управления Ресурсов и выберите Flags. Удостоверьтесь, что Ph_WM_CLOSE флажок установлен (то есть подсвечен), затем нажмите Done. Этот флажок говорит Администратору полиэкранного режима уведомлять ваше приложение, когда окно закрывается.

5. Теперь давайте установим функцию, которая вызывается при открытии окна. Откройте модуль меню filemenu, затем выберите ресурс Menu Items в панели управления Ресурсов. Вы увидите редактор меню.

6. Удостоверимся, что пункт меню New в настоящее время выбран в списке Menu Items, затем нажимать значок Callback, чтобы открыть редактор callback вызовов.

7 Выбираем тип модуля Window, затем нажимают стрелку рядом с полем Name. Вы увидите список существующих оконных модулей.

8. Выбираем newwin, которое является окном, которое Вы только что создали.

9. В поле Setup Function, введите newwin_setup, как имя функции установки. Позже, Вы измените newwin_setup(), чтобы поддерживать многооконный режим.

10. Щелчкнем Apply, затем Done. Нажмем Done снова, чтобы закрыть редактор меню.

Добавление виджетов

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

1. Добавим PtRect виджет и четыре PtButton виджета следующим образом:

2. Теперь изменяем левую кнопку:

_Заменим текст метки кнопки с Button на Red.

_ Дадим имя экземпляру кнопки btn_red.

_ Прикрепим callback вызов Activate, определяя тип кода "Code", и имя функции color_change.

3. Изменяем среднюю кнопку:

_ Заменим текст метки кнопки с Button на Green.

_ Дадим имя экземпляру кнопки btn_green.

_Прикрепим также callback вызов Activate/Code, и дадим имя функции color_change.

4. Изменяем правую кнопку:

_ Заменим текст метки кнопки с Button на Blue.

_ Дадим имя экземпляру кнопки btn_blue.

_Прикрепим также callback вызов Activate/Code, и дадим имя функции color_change как и раньше.

5. Изменяем большую кнопку:

_ Заменим текст метки кнопки с Button на Change previous window’s сolor.

_ Дадим имя экземпляру кнопки btn_prev.

_Прикрепим также callback вызов Activate/Code, и дадим имя функции color_change как и раньше.

6. Наконец дадим имя прямоугольнику color_rect. Вы должны определить это имя так, чтобы функция color_change() могла изменять цвет прямоугольника. Ваше окно теперь должно выглядеть подобно этому:

Генерация и изменение кода

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

Генерация кода

Открывает меню Build и выбирает Generate UI.

Измененим функцию newwin setup() так, чтобы она:

_ ограничивала номер возможных экземпляров до пяти

_сохраняла копию каждого указателя окна

_отображала номер экземпляра окна в оконном заголовке.

Редактируем файл newwin_setup.c следующим образом:

int win ctr = 0;

PtWidget t *win[5];

int

newwin setup( PtWidget t *link instance,

ApInfo t *apinfo,

PtCallbackInfo t *cbinfo )

{

char buffer[40];

/* eliminate ’unreferenced’ warnings */

link instance = link instance, apinfo = apinfo;

cbinfo = cbinfo;

/* Примечание: Возвращаем Pt_END в вызывающую функцию говоря PhAB уничтожить модуль, не реализуя это */

/* Разрешаем 5 окон максимум */

if ( win ctr == 5. ) {

return( Pt END );

}

/* сохраняем указатель экземпляра модуля окна */

win[win ctr] = link instance;

sprintf( buffer, "Window %d", win ctr + 1. );

PtSetResource( win[win ctr], Pt ARG WINDOW TITLE,

buffer, 0 );

win ctr++;

return( Pt_CONTINUE );

}

Изменение функции выбора цвета

Теперь изменим функцию color_change() так:

_ нажимая кнопки Red, Green, или Blue изменяем цвет прямоугольника на цвет кнопки

_ нажимая кнопку Change Previous Window Color изменяем цвет фона предыдущего окна на цвет из массива.

Если бы это было модулем диалога, Вы могли бы использовать декларацию ABW_color_rect, чтобы модифицировать цвет прямоугольника. Однако, потому что мы имеем дело с оконными модулями, Вы должны использовать указатель экземпляра окна, в котором кнопка нажимается.

Чтобы получить указатель экземпляра виджета в текущем окне, Вы должны вызвать:

_ ApGetInstance (), чтобы получить указатель на окно, которое содержит виджет, который вызвал callback вызов

_ ApGetWidgetPtr (), чтобы получить указатель на виджет с данной ABN_... декларацией. Если бы существовал только один экземпляр окна, то можно было бы сделать следующим образом:

PtSetResource( ABW color rect, Pt ARG FILL COLOR,buffer, 0 );

Но в нашем случае функция color_change() должна использоваться так:

Характеристики

Тип файла
Документ
Размер
1,14 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее