Руководство программиста в Photon (953920), страница 15
Текст из файла (страница 15)
Иконка модуля диалога
Большинство модулей диалогов включают следующие кнопки:
-
"Done" – позволяет пользователю указать, что он завершил ввод информации
-
"Cancel" или "Close" – позволяют пользователю закрыть диалог без ответа.
С точки зрения PhAB модули диалогов почти идентичны модулям окна, с одним важным отличием – модуль диалога может иметь только один активный экземпляр. Так что если Вы вызываете диалог, который уже открыт, API PhAB просто выводит существующий экземпляр диалога на передний план. Это свойство связано с природой диалога – Вам редко когда может понадобиться вводить одну и ту же информацию дважды. Если несмотря на все соображения, Вам потребуется диалог, который мог бы поддерживать множественность экземпляров, используйте модуль окна.
Ограничение диалога одним экземпляром упрощает обработку ответной реакции, поскольку Вы можете использовать декларации виджета, генерируемые PhAB, для получения доступа к виджетам внутри диалога. Для получения более полной информации см. раздел "Имена экземпляров" в главе "Создание виджетов в PhAB".
Изменение размеров модуля диалога
Когда Вы устанавливаете размеры модуля диалога в PhAB, это и будут его размеры при запуске приложения.
Предопределённые диалоги
Библиотеки Photon включают удобные функции, определяющие различные полезные диалоги:
ApError() | Отображает диалог сообщения об ошибке |
PtAlert() | Отображает сообщение и требует подтверждения |
PtFileSelection() | Создаёт диалог выбора файла |
PtFontSelection() | Создаёт диалог выбора шрифта |
PtMessageBox() | Вызывает всплывающее табло с сообщением |
PtNotice() | Отображает сообщение и ждёт уведомления |
PtPassword() | Запрашивает пароль |
PtPrintPropSelect() | Изменяет опции печати для выбранного принтера через модальный диалог |
PtPrintSelect() | Отображает модальный диалог настройки для выбора опций печати |
PtPrintSelection() | Отображает модальный диалог для выбора опции настройки |
PtPrompt() | Отображает сообщение и получает текстовый ввод от пользователя |
Модули меню
класс виджета | расширение файла | создание виджета |
PtMenu | .wgtm | Специальный редактор |
Модуль меню предоставляет многоуровневое текстовое меню. В отличие от остальных модулей, модуль меню не позволяет Вам создавать виджеты непосредственно внутри него. Вместо этого Вы используете редактор меню PhAB для создания пунктов меню.
Иконка модуля меню
Открытие редактора меню
Чтобы открыть редактор меню:
-
Выберите модуль меню
-
Щёлкните на "Menu Items" на панели управления ресурсами, и PhAB отобразит редактор меню:
Рис. 4-3. Редактор меню PhAB
В верхнем правом углу Вы можете видеть кнопки, представляющие типы создаваемых Вами меню:
-
Command – вызывает ответную реакцию PhAB
-
Submenu – отображает порождённое меню
-
Separator – вставляет линии или разрядку между другими пунктами меню
-
Toggle или Excl Togg (эксклюзивный переключатель) – изменяет или отображает состояние приложения
-
Function – задаёт функцию приложения, которая может динамически добавлять пункты меню в меню.
Эти кнопки расположены в нижней части диалога:
Когда Вы хотите: | Используйте кнопку: |
Принять все изменения и закрыть редактор | Done |
Принять все изменения и продолжить редактировать меню | Apply |
Отменить все изменения, сделанные с момента открытия редактора | Cancel |
Задание имён экземпляров
Чтобы создать любой командный или переключаемый пункт меню (т.е. любой пункт, который может вызывать ответную реакцию), Вы должны ввести уникальное имя экземпляра – этого требует PhAB. Имя экземпляра позволяет Вам получить доступ к пунктам меню из программного кода Вашего приложения.
Когда PhAB генерирует код Вашего приложения, он генерирует глобальную переменную ABN_... для каждого пункта меню, который требует этого. Вы используете эту переменную в функциях API, связанных с пунктами меню – ApModifyItemState() и ApModifyItemText().
Например, пусть, скажем, пункт меню не должен быть доступен, когда пользователь щёлкает на виджете, вызывающем меню. Используя имя экземпляра, Вы можете сделать тусклым этот пункт перед тем, как отображать меню. Для получения более полной информации см. "Инициализация меню" в главе "Работа с программным кодом".
Создание "горячих клавиш" и "кнопок быстрого доступа" (hotkeys and shortcuts)
Чтобы помочь пользователю выбрать пункт меню более быстро, Вы можете:
-
обеспечить клавиатурную кнопку быстрого доступа, по которой бы выбирался пункт
-
обеспечить горячую клавишу, которая бы напрямую вызывала команду, представленную пунктом меню, даже когда меню невидимо.
Клавиатурная кнопка быстрого доступа работает только когда меню в настоящий момент видимо. С другой стороны, горячая клавиша работает вне зависимости от того, видимо или нет меню.
Создание кнопки быстрого доступа просто. Когда Вы вводите "Item Text", просто поместите символ "&" перед символом, который будет действовать как кнопка быстрого доступа. Например, пусть мы создаём пункт "Save As". Вы можете ввести "Save &As", результатом чего будет подчёркнутая буква "А". Когда меню открывается, пользователь может нажать либо "А" либо вызвать ответную реакцию, связанную с "Save As".
Создание горячей клавиши вынуждает затратить ненамного больше труда, но так же легко делается. Во-первых, Вы должны убедиться, что горячая клавиша появилась рядом с пунктом меню, когда меню отображается. Чтобы это сделать, используйте область "Accel Text". Например, пусть скажем, горячей клавишей для пункта меню "Save" будет <Ctrl>+<S>. В этом случае Вы должны ввести "S" в области "Accel Text" и включить переключатель "Ctrl".
Далее, Вам необходимо создать ответную реакцию горячей клавиши для сочетания <Ctrl>+<S>. Поскольку меню может быть не создано на момент, когда пользователь нажал <Ctrl>+<S>, Вы не можете прикрепить ответную реакцию горячей клавиши к меню или к пункту меню. Вместо этого Вы должны прикрепить ответную реакцию к главному модулю приложения, которым обычно является модуль базового окна. При задании функции ответной реакции горячей клавиши, используйте ту же самую функцию, которую Вы определили для ответной реакции пункта меню.
Если по каким-либо причинам Вам необходимо различать два метода вызова ответной реакции, необходимо проверить код аргумента ответной реакции. Горячие клавиши всегда имеют код аргумента Pt_CB_HOTKEY.
Для получения более полной информации по созданию ответных реакций горячих клавиш см. раздел "Ответные реакции горячих клавиш" в главе "Редактирование ресурсов и ответных реакций в PhAB".
Изменение размеров модуля меню
Вы можете чувствовать себя совершенно свободными в возможностях изменять размеры меню для того, чтобы сделать их легче читаемыми или же для уменьшения занимаемого пространства. Когда Вы запускаете приложение, реальные размеры виджета PtMenu будут определяться пунктами меню.
Создание командных пунктов меню
Командные пункты меню позволяют Вам вызывать код приложения или отображать модуль.
Область | Описание |
Item Text | Текст, который будет отображаться |
Accel Text | Горячая клавиша для вызова команды |
Inst Name | Имя, используемое внутри программного кода приложения |
Callback | Функция, которая будет вызвана, когда пункт выбран |
Image | Иконка для использования в пункте меню |
Чтобы создать командный пункт меню:
-
Щёлкните на <NEW>
-
Щёлкните на кнопке "Command" в верхнем правом углу
-
В области "Item Text" введите текст пункта. Чтобы создать кнопку быстрого доступа, разместите символ "&" перед символом, который будет действовать как кнопка быстрого доступа. Например, скажем, Вы ввели &File. В этом случае пользователь может выбрать пункт, нажав <F>.
-
В области "Inst Name" введите имя экземпляра, которое Вы будете использовать.
-
Если Вы планируете иметь ответную реакцию горячей клавиши для этого пункта, введите строку горячей клавиши и модификатор клавиши (например, <Ctrl>+<S>) в области "Accel Text". Горячая клавиша отображается в меню как напоминание для пользователя.
-
Добавьте ответную реакцию PhAB, щёлкнув на иконке ответной реакции:
Чтобы получить более полную информацию, см. раздел "Редактирование ответных реакций" в главе "Редактирование ресурсов и ответных реакций в Phab".
-
Добавьте, если считаете целесообразным, картинку в виде образа.
-
Щёлкните на "Apply", чтобы добавить пункт в меню.
Создание пунктов подменю
Пункты подменю позволяют Вам создавать другие уровни меню.
Область | Описание |
Item Text | Текст, который будет отображаться |
Inst Name | Имя, используемое внутри программного кода приложения |
Чтобы создать пункт подменю:
-
Щёлкните на <NEW>
-
Щёлкните на кнопке "Submenu" в верхнем правом углу.
-
В области "Item Text" наберите имя подменю. Чтобы создать клавиатурную кнопку быстрого доступа, разместите символ "&" перед символом, который будет действовать как кнопка быстрого доступа (точно так же, как для командных пунктов меню выше).
-
Щёлкните на "Apply".
-
Список "Menu Items" отобразит подменю:
-
Вы можете теперь добавить пункты в подменю, выбрав <NEW> в подменю.
Создание разделителей пунктов
Разделитель пунктов позволяет Вам создавать интервалы между пунктами меню. Это может оказаться удобным при его использовании для создания логических групп пунктов меню. Вы можете выбрать из нескольких стилей разделителей.
Для создания разделителя меню:
-
Щёлкните на <NEW>
-
Щёлкните на кнопке <Separator> в верхнем правом углу.
Рис. 4-4. Стили разделителя меню
Вы увидите список стилей разделителя, которые означают соответственно:
-
Одинарная линия
-
Двойная линия
-
Одинарная пунктирная линия
-
Двойная пунктирная линия
-
"Выгравленная" внутрь
-
"Выгравленная" наружу
-
Пустая линия
-
Щёлкните на стиль разделителя, который Вам нужен, затем щёлкните на "Apply".
Создание пунктов-переключателей
Пункты-переключатели позволяют Вам изменять или отображать некие состояния приложения, которые могут быть включены или выключены.
область | описание |
Item text | Текст, который будет отображаться |
Inst Name | Имя, используемое внутри программного кода приложения |
Callback | Функция, которая будет вызвана, когда пункт выбран |
Image | Иконка для использования в пункте меню |
Чтобы создать пункт-переключатель:
-
Щёлкните на <NEW>, затем щёлкните на кнопке "Toggle".
-
Следуйте той же процедуре, что при создании командных пунктов меню.
Создание пунктов-функций
Пункт-функция позволяет Вам задать функцию приложения, которая динамически добавляет пункты меню в меню во время исполнения программы. Например, Вы можете использовать пункт меню в меню "File", чтобы отобразить последние три файла, с которыми работал пользователь.
Библиотека PhAB вызывает заданную функцию как встроенную в меню. Динамически созданные пункты меню появляются там, где Вы расположили пункт-функцию в меню.
Область | Описание |
Function | Функция, которая будет вызываться |
Чтобы создать пункт-функцию:
-
Щёлкните на <NEW>, затем щёлкните на кнопке "Function".
-
В области "Function" введите имя функции приложения, которая будет динамически добавлять пункты-меню в меню.
Если Вы зададите это имя функции, PhAB сгенерирует заготовку функции; для получения более полной информации, специфической для языка (С или С++) и имени файла, см. раздел "Имена функций и имена файлов" в главе "Работа с программным кодом".
-
Вы можете сразу же отредактировать функцию, щёлкнув на кнопке справа от имени функции.
-
Щёлкните на "Apply".
Для получения более полной информации по функциям приложения см. раздел "Генерирование пунктов меню" в главе "Работа с программным кодом".
Перемещение пунктов меню
Скроллируемый список "Menu Items" позволяет Вам перемещать пункты в меню на другую позицию в меню. Пусть, скажем, Вы хотите переместить пункт по имени "Browse", так чтобы он появлялся непосредственно перед пунктом по имени "Edit". Вы должны:
-
Перетащить пункт "Browse", пока его контур не окажется непосредственно над пунктом "Edit".
-
Отпустить кнопку мыши. Пункт "Browse" появится в новой позиции.
Использование модуля меню
Как только Вы создали модуль меню, Вы должны сделать так, чтобы Ваше приложение его отображало. Обычно Вы должны выполнить следующее:
-
Создайте PtMenuBar в верхней части окна.
-
Добавьте PtMenuButton к панели меню, присвоив ему соответствующие имя экземпляра и текстовую строку.
-
Добавьте ответную реакцию связи с модулем к списку ответных реакций Pt_CB_ARM кнопок меню.
Вы можете добавить ответную реакцию в список Pt_CB_ACTIVATE, но добавление её в Pt_CB_ARM позволяет пользователю получить доступ к ней двумя способами:
-
нажав левую кнопку мыши на виджете кнопки меню, перетащив к подсвеченному пункту меню и отпустив, чтобы это выбрать. Это известно как метод нажать-перетащить-отпустить.
-
щёлкнув на меню и затем щёлкнув на пункте меню. Если Вы используете ответную реакцию "Activate", пользователь может пользоваться только вторым методом.
-
Включите ответную реакцию, отображающую модуль меню. Смотри "Ответные реакции модуля" в главе "Редактирование ресурсов и ответных реакций в PhAB".
-
Если Вам необходимо инициализировать меню всякий раз, когда оно отображается, задайте функцию инициализации для него. Смотри раздел "Инициализация меню" в главе "Работа с программным кодом".
Если Вы хотите, чтобы меню появлялось, когда Вы нажимаете правую кнопку мыши, в то время, когда указатель мыши установлен на виджете, Вам необходимо использовать внутреннюю связь (internal link). Для получения более полной информации см. главу "Получение доступа к модулям из программного кода" – там есть даже пример.
Модули картинок
класс виджета | расширение файла | создание виджета |
Не применим | .wgtp | Непосредственно из палитры виджетов |
Используя модуль картинки, Вы можете применить содержание существующего модуля или создать подручную базу данных виджетов. Вы всегда отображаете картинку внутри виджета контейнерного класса или внутри другого модуля, такого как окно или диалог.