Четвертый Borland C++ и его окружение

       

Окна реквизитов


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

они не могут выставлять или принимать события, непосредственно

взаимодействовать с окнами или вызывать для себя функции Windows.

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

Реквизит практически не может управлять своим расположением

в окне реквизитов. Окно реквизитов отвечает за размещение и расположение всех реквизитов, который оно содержит. Обычно реквизиты

располагаются в одну линию (вертикально или горизонтально).

Реквизиты обычно включаются в другое окно. Родительским окном окна реквизитов является как правило декорированное окно-рамка, такое как TDecoratedFrame или TDecoratedMDIFrame, хотя класс

TToolBox использует обычно TFloatingFrame.

В конструкторе TGadgetWindow задается указатель на объект

родительского окна, направление (горизонтальное и вертикальное),

указатель на объект шрифта TFont и параметр TModule базового

конструктора (по умолчанию 0). Функция ~TGadgetWindow удаляет



каждый из реквизитов окна реквизитов, а затем удаляет объект

шрифта.

TGadgetWindow переопределяет заданную по умолчанию функцию-элемент Create. Версия TGadgetWindow этой функции выбирает

начальный размер на основе следующих критериев:

  • Установлена ли для реквизитов в окне автоматическая настройка размера.
  • Размера реквизитов, содержащихся в окне.
  • Направления расположения реквизитов в окне.
  • Имеет ли окно реквизитов рамку, и размера этой рамки.
  • Функция Create определяет на основе этих факторов подходящий

    размер окна, устанавливает размеры атрибутов окна, а затем для

    создания интерфейсного элемента окна вызывает базовую функцию

    TWindow::Create.

    Чтобы окно реквизитов выполняло полезные функции, оно должно

    содержать некоторые реквизиты. Чтобы поместить реквизит в окно,




    используйте функцию Insert, в параметрах которой задаются ссылка

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

    Если окно реквизитов уже создано, вам нужно после вызова Insert вызвать LayoutSession. Реквизит появится в окне после задания его схемы (LayoutSession).

    Чтобы удалить из окна реквизит, используйте функцию Remove.

    Сам объект реквизита она не удаляет. Чтобы реквизит исчез из окна, нужно вызвать LayoutSession.

    Изменить поля и схемы окна можно перед его выводом или после. Для этого используйте функции SetMargins и SetDirection. Обе

    эти функции устанавливают соответствующие элементы данных, а затем вызывают функцию LayoutSession. Направление вывода реквизитов

    определяется с помощью функции GetDirection.

    По умолчанию функция LayoutSession проверяет создание интерфейсного элемента. Если нет, то функция не выполняет никаких

    действий. Если элемент окна уже создан, то LayoutSession выводит

    реквизиты без перекрытия и запрещает модифицированной область.

    Сеанс задания схемы обычно начинается изменением полей, вставкой

    или удалением реквизитов или изменением окна реквизитов.

    TileGadget определяет необходимое каждому реквизиту пространство и поочередно их размещает. TileGadget вызывает функцию

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

    схему расположения.

    Если реквизит изменяет размер, он должен вызывать для окна

    реквизитов функцию GedgetChangedSize со ссылкой на реквизит с измененным размером. Заданная по умолчанию версия этой функции

    просто инициализирует сеанс задания схемы.

    С помощью функции SetShrinkWrap вы можете задать автоматическую настройку размера окна реквизитов. Автоматическую настройку горизонтального и вертикального размера определяют параметры shrinkWrapWidth и shrinkWrapHeight.

    Определить текущий шрифт и его размер можно с помощью функций GetFont и GetFontHeight.

    При нажатии в ограничивающем прямоугольнике левой кнопки



    "мыши" реквизит всегда получает уведомление. После нажатия кнопки, если вы хотите посылать уведомления о перемещении "мыши", вам

    нужно перехватить нажатие кнопки. Это можно сделать с помощью

    функций GedgetSetCapture и GadgetReleaseCapture. Эти функции

    обычно вызываются реквизитом через указатель на окно реквизитов.

    Режим подсказки реквизита указывает, будет ли выводиться в

    родительском окне окна реквизитов информация о реквизите. Этот

    режим устанавливается с помощью функции SetHintMode, параметр которой может иметь значения NoHints (подсказка не выводится),

    PressHints (подсказка выводится при нажатии реквизита) и EnterHints (подсказка выводится при перемещении "мыши" на реквизит).

    Определить текущий режим можно с помощью функции GetHintMode.

    Вывод подсказки определяет функция SetHintCommand. Обычно

    она вызывается реквизитом через указатель на окно реквизитов.

    Чтобы эта функция правильно работала со стандартными классами ObjectWindows, нужно чтобы:

  • декорированное окно-рамка (родительское окно окна реквизитов) имело строку сообщений или строку состояния;


  • в окне-рамке должна быть разрешена подсказка;


  • должен существовать строковый ресурс с тем же идентификатором, что и реквизит.


  • Для поиска содержащихся в окне реквизитов вы можете использовать функции FirstGadget, NextGadget, GadgetFromPoint, GadgetWidthId.


    Содержание раздела