Главная » Просмотр файлов » Руководство программиста в Photon

Руководство программиста в Photon (953920), страница 23

Файл №953920 Руководство программиста в Photon (Руководство программиста в Photon) 23 страницаРуководство программиста в Photon (953920) страница 232013-09-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

или

  • Вы можете вызвать PtRemoveHotkeyHandler(), чтобы удалить горячую клавишу, и впоследствии вызвать PtAddHotkeyHandler(), чтобы включить её снова.

Обработчики событий – необработанные и отфильтрованные ответные реакции

Обработчики событий позволяют Вам реагировать непосредственно на события Photon'а. Вы можете присоединить обработчики событий к любому виджету; они похожи на другие ответные реакции виджета, но с дополнением в виде маски событий. Используя эту маску, Вы можете выбрать, какие события будут получать Ваши ответные реакции.

Вы найдёте это крайне полезным для получения событий Pt_EV_DRAG для конкретного окна. Для получения более подробной информации по перетаскиванию см. раздел "Перетаскивание" в главе "События".

Pt_Widget определяет следующие ресурсы обработки событий:

Pt_CB_FILTER

Вызывается перед тем, как событие достигло виджета

Pt_CB_RAW

Вызывается после того, как виджет обработал событие (даже если виджет поглотил событие)

 Описание необработанных и отфильтрованных обработчиков событий и их использования см. в разделе "Обработчики событий – необработанные и отфильтрованные ответные реакции" в главе "События".

Для получения более подробной информации о добавлении обработчиков событий в программный код приложения см. "Обработчики событий" в главе "Управление виджетами в программном коде приложения".

Чтобы присоединить необработанную или отфильтрованную ответную реакцию:

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

  2. Щёлкните на ресурсе Pt_CB_RAW (необработанные события) или Pt_CB_FILTER (отфильтрованные), чтобы открыть редактор ответных реакций.

  3. Всплывёт редактор с областью "Event Mask" в зоне связанной информации:

Рис. 6-12. Область маски событий в редакторе ответных реакций

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

Щёлкните на иконке рядом с этой областью, чтобы открыть селектор событий:

Рис. 6-13. Селектор событий

  1. Выберите события, к которым должен быть чувствителен виджет, затем закройте селектор.

Для получения более полной информации см. типы событий, описанные в структуре PhEvent_t в "Справочнике библиотеки Photon'а".

Глава 7. Управление геометрией

Эта глава описывает, как задать или точно регулировать геометрию Ваших виджетов.

Она включает:

  • Контейнер виджетов

  • Согласование геометрии

  • Абсолютное позиционирование

  • Выравнивание виджетов с использованием групп

  • Удерживающее управление с использованием анкеров

  • Удерживание позиции или ограничение изменения размеров без анкеров

Контейнер виджетов

Контейнерный виджет является порождением виджетного класса PtContainer. Контейнерными виджетами являются только те виджеты, которые могут иметь потомков. Любой виджет, не имеющий окна в своём владении, всегда визуализируется внутри границ своего родителя. Только виджеты, принадлежащие к производному классу от виджетного класса PtWindow, получают в свою собственность окно.

Контейнерные виджеты отвечают за выполнение управления геометрией. Первой обязанностью контейнерного виджета является позиционирование каждого потомка и установка его размеров так, чтобы обеспечить желаемое расположение для всех своих потомков. Контейнер также может накладывать на своих потомков ограничения по размерам (например, заставляет их все быть одного и того же размера). Кроме того, контейнер должен ограничивать потомков так, чтобы они не появлялись вне границ контейнера. Обычно это достигается путём обрезания потомков.

Для понимания того, как различные контейнеры выполняют управление геометрией, важно понимать геометрию виджета. См. "Геометрия виджета" во введении к настоящему руководству.

Согласование геометрии

При реализации виджета во всех виджетах иерархии семейства виджета запускается процесс согласования геометрии. Каждому потомку виджета даётся благоприятная возможность просчитать свои размеры. Это проходит волной вниз через все виджеты семейства, в результате чего пересчитываются размеры каждого потомка.

Как только каждый потомок пересчитал свои желаемые размеры, родительский виджет может попытаться определить расположение для своих потомков. Компоновка, выполняемая виджетом, зависит от:

  • политики компоновки виджетов;

  • любого размера, установленного для виджета;

  • размерами и желаемой позицией для каждого из потомков.

Если приложение задаёт размер для виджета, то он может выбирать, как располагать потомков, используя только это доступное пространство. На это влияет политика изменения размеров, установленная для виджета. Ресурс Pt_ARG_RESIZE_FLAGS устанавливает флаги, определяющие политику изменения размеров для виджета. Флаги задают в отдельности политику изменения ширины и высоты виджета. Если для какого-либо из измерений политика не определена, виджет не пытается изменять свои размеры а этом измерении при выполнении компоновки. Любая другая политика изменения размеров позволяет виджету увеличиваться в этом измерении, чтобы приспособиться под своих потомков. Более детально это описано в разделе "Политика изменения размеров" ниже.

Если виджет не имеет предопределённых размеров, он пытается изменить свои размеры, чтобы приспособиться по всем потомкам, используя соответсвующую политику компоновки. Таким образом, он вначале пытается определить правильную компоновку и затем определяет пространство, необходимое для подгонки под эту компоновку.

Процесс компоновки определяет желаемое местоположение каждого потомка. Политика компоновки, используемая для виджета, управляет, как процесс компоновки пытается позиционировать потомков один относительно другого. Она должна принимать в расчёт размеры потомков. Контейнер отвечает за фиксирование позиции каждого потомка, так что политика компоновки может выбирать, принимать или нет во внимание атрибуты позиции потомков.

Выполняя компоновку, виджет может также принимать во внимание политику изменения размеров. Основываясь на этой политике, он определяет, должен ли он корректировать их ширину или высоту, или же изменять компоновку, что объясняется ограничением пространства. Виджет пытается выбрать компоновку, которая бы наилучшим образом совмещала ограничения, налагаемые какими-либо ограничениями размеров и политикой компоновки. После определения желаемой позиции для каждого из своих потомков виджет вычисляет ширину и высоту, требуемые им для размещения потомков в этих местоположениях. Он изменяет при необходимости их размеры, чтобы приладить каждый из потомков в желаемой позиции. Если это невозможно, потому что этого не позволяет политика изменения размеров, виджет пересчитывает позицию, чтобы пристроить потомков внутри доступного свободного места.

После того как компоновка успешно установлена, виджет устанавливает позицию для каждого потомка путём внесения изменения в атрибуты позиции потомков.

Политика изменения размеров

Любые изменения виджета, которые могут оказать действие на объём пространства, требуемого для отображения его содержания, могут приводить к изменению размеров самого этого виджета, с тем чтобы вместить его содержание. На это влияет политика изменения размеров, назначенная виджету.

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

Политикой изменения размеров управляет ресурс Pt_ARG_RESIZE_FLAGS. Этот ресурс состоит из отдельного набора флагов для ширины и высоты. Значение флагов определяет условия, в которых виджет пересчитывает соответствующий размер. Значения проверяются каждый раз, когда виджет реализуется или изменяется его содержание.

 Если политика изменения размеров конфликтует с анкерами, Pt_ARG_RESIZE_FLAGS переписывает Pt_ARG_ANCHOR_OFFSETS и Pt_ARG_ANCHOR_FLAGS.

Имеются следующие флаги изменения размеров:

Pt_RESIZE_X_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера x. Виджет растёт или сжимается в горизонтальном направлении в соответствии с изменением его содержания.

Например, следующий рисунок показывает кнопку с установленным флагом Pt_RESIZE_X_ALWAYS при изменении надписи с "Hello" к "Hello, world" и к "Hi".

Pt_RESIZE_Y_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера y. Виджет растёт или сжимается в вертикальном направлении в соответствии с изменением его содержания.

Pt_RESIZE_XY_ALWAYS

Пересчитывает размер виджета всякий раз, когда изменяется значение размера x или y. Виджет растёт или сжимается в обоих направлениях в соответствии с изменением его содержания.

 Флаг Pt_RESIZE_XY_ALWAYS в PhAB не определён. Он представляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Pt_RESIZE_X_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера x и не производит подгонку при наличии свободного пространства. Например, следующий рисунок показывает кнопку с установленным флагом Pt_RESIZE_X_AS_REQUIRED при изменении надписи с "Hello" к "Hello, world" и к "Hi".

Pt_RESIZE_Y_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера y и не производит подгонку при наличии свободного пространства.

Pt_RESIZE_XY_AS_REQUIRED

Пересчитывает размер виджета всякий раз при изменении размера x или y и не производит подгонку при наличии свободного пространства.

 Флаг Pt_RESIZE_XY_AS_REQUIRED в PhAB не определён. Он предоставляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Эти флаги также могут быть модифицированы значениями другого набора флагов, а именно

  • Pt_RESIZE_X_INITIAL

  • Pt_RESIZE_Y_INITIAL

  • Pt_RESIZE_XY_INITIAL

 Флаг Pt_RESIZE_XY_INITIAL в PhAB не определён. Он предоставляется для Вашего удобства, когда установка флагов изменения размеров осуществляется из Вашего программного кода.

Если Вы установили какой-либо из этих "инициализирующих" флагов, виджет не будет изменять свои размеры в ответ на изменение данных – он изменяет свои размеры только в процессе согласования геометрии всякий раз, когда реализуется. Виджет либо делает себя в точности по размерам своего содержимого, либо увеличивается в размерах, чтобы разместить своё содержимое, если его размеры в этот момент недостаточно велики.

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

Например, следующий рисунок показывает кнопку, у которой не установлены никакие флаги изменения размеров, при изменении надписи с "Hello" к "Hello, world" и к "Hi":

Установка политики изменения размеров в PhAB

Вы можете установить эти флаги в PhAB при редактировании флагов изменения размеров контейнера Pt_ARG_RESIZE_FLAGS, как показано ниже:

Установка политики изменения размеров в программном коде приложения

Вы можете также установить флаги изменения размеров контейнера в Вашем программном коде, используя метод, описанный в главе "Управление ресурсами в программном коде приложения".

Предоставляются битовые маски, позволяющие управлять путём установки битов. Имеется по одной битовой маске для политики изменения размеров по x и по y:

  • Pt_RESIZE_X_BITS

  • Pt_RESIZE_Y_BITS

  • Pt_RESIZE_XY_BITS

Например, чтобы сделать контейнер вырастающим для размещения всех своих потомков, если его размеры при реализации виджета недостаточно велики, установите оба флага установки размеров initial (начальный) и required (требуемый) по координатам x и y:

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

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

Список файлов книги

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