Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОУК / 09 семестр / Книги и методические указания / Руководство программиста в Photon.doc
Источник:
Скачиваний:
364
Добавлен:
04.03.2014
Размер:
7.99 Mб
Скачать

Использование базы данных виджетов

Модули картинок служат двум целям:

  • позволять приложению заменять содержание какого-либо контейнерного виджета;

  • служить в качестве баз данных виджетов.

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

Вот пример базы данных виджетов – это является частью базы данных виджетов, которую PhAB использует в своём собственном интерфейсе:

Рис. 13-2. Пример базы данных виджетов

Создание базы данных

Чтобы создать базу данных виджетов:

  1. Создайте модуль картинки в своём приложении

  2. Создайте внутреннюю связь к модулю картинки

  3. Создайте виджеты, к которым Вам необходимо иметь доступ из Вашего программного кода.

Например, скажем, Вам надо в Вашем приложении много раз создавать некую иконку. Создав иконку внутри модуля картинки, Вы сможете создать при выполнении программы столько копий иконки, сколько Вам понадобится.

Предварительно прикреплённые ответные реакции

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

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

 Предварительное прикрепление ответных реакций работает только с модулями и функциями, которые являются частью Вашего исполняемого файла. Если Ваше приложение открывает внешний файл как базу данных виджетов, библиотека PhAB'а не будет в состоянии найти код, чтобы прикрепить ответную реакцию.

Назначение уникального имени экземпляра

Присвойте каждому виджету в базе данных виджетов уникальное имя – это позволит Вам ссылаться на виджеты при использовании функций API, относящихся к базам данным.

Создание динамической базы данных

Вы также можете создать базу данных виджетов, которую Вы сможете изменять динамически. Чтобы сделать это, откройте внешнюю базу данных виджетов – т.е. такую, которая не подвязана к Вашему исполняемому файлу – функцией ApOpenDBaseFile() вместо вызова функции ApOpenDBase(). Функция ApOpenDBaseFile() позволяет Вам получить непосредственный доступ к файлу модуля и открыть его как базу данных.

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

Функции базы данных виджетов

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

ApOpenDBase(),

ApCloseDBase()

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

ApOpenDBaseFile(), ApSaveDBaseFile()

Они позволяют Вам открыть и сохранить файл внешнего модуля как базу данных внутри Вашего приложения.

ApAddClass()

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

ApCreateDBWidget(), ApCreateDBWidgetFamily(), ApCreateWidget(), ApCreateWidgetFamily()

Они создают виджеты из базы данных виджетов. Функции ApCreateWidget() и ApCreateDBWidget() создают только один виджет, невзирая на класс виджета. Для виджета неконтейнерного класса функции ApCreateWidgetFamily() и ApCreateDBWidgetFamily() создают одиночный виджет; для виджета контейнерного класса они создают все виджеты внутри контейнера. Эти функции отличаются по родителю, используемому для виджетов:

  • Функции ApCreateDBWidget() и ApCreateDBWidgetFamily() используют аргумент parent; если он установлен в NULL, виджет не имеет родителя.

  • Функции CreateWidget() и ApCreateWidgetFamily() отдают новый виджет(ы) текущему родителю. Чтобы быть уверенным в правильности передачи виджета текущему родителю, перед вызовом любой из этих двух функций выполните вызов функции PtSetParentWidget().

 Не используйте декларации, генерируемые для модуля картинки базы данных виджетов. Вместо этого используйте указатели, возвращаемые функцией ApCreateWidget() или ApCreateDBWidget().

ApCopyDBWidget()

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

ApDeleteDBWidget()

Удаляет виджет из базы данных виджетов

ApGetDBWidgetInfo()

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

ApGetImageRes()

Извлекает данные по ресурсам образа из виджета и использует эти данные для установки виджета, уже изображённого в Вашем приложении. Эта функция позволяет Вам добиться простейшей анимации.

 Если вы используете базу данных виджетов для создания виджетов, имеющих данные PhImage_t, прикреплённые к ним, не закрывайте базу данных функцией ApCloseDBase() до тех пор, пока эти виджеты не будут уничтожены. (Закрытие базы данных освобождает память, используемую для образа). Если Вы должны закрыть базу данных, убедитесь, что скопировали данные образа внутри программного кода Вашего приложения, и переустановите ресурс данных образа, так чтобы он указывал на Вашу новую копию.

ApGetTextRes()

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

ApRemoveClass()

Удаляет класс виджета. Если Вы загрузили DLL, которая определяет класс виджетов, Вы должны будете удалить их перед выгрузкой DLL. Для более полной информации см. раздел "Существование DLL в приложениях PhAB" главы "Генерация, компиляция и запуск программного кода на выполнение".

Для получения более полной информации о функциях баз данных виджетов см. "Справочник библиотечных функций Photon".