Четвертый BORLAND С++ и его окружение

       

Производные классы


TGadget предусматривает ряд функций protected, которые вы

можете использовать для создания производных классов, а также пару виртуальных функция для инициализации и очистки реквизита Inserted и Remove. Inserted вызывается после включения реквизита в оно реквизитов, a Removed вызывается перед удалением реквизита

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

Функция PaintBorder рисует границу реквизита. Она реализует

стандартные стили границы. Для создания нового стиля нужно переопределить эту функцию. Для использования стандартных стилей нужно также вызывать версию TGadget этой функции.

Функция Paint аналогична функции Paint TWindow. Paint описывается как virtual. Функция PaintGadgets в TGadget при изображении окна реквизита вызывает функцию Paint каждого реквизита. Заданная по умолчанию функция Paint только вызывает функцию PaintBorder. Вам нужно переопределить эту функцию.

При самостоятельном изображении реквизита с помощью функции

Paint часто требуется найти область внутри границ и полей реквизита. Эта область называется внутренним прямоугольником. Его можно определить с помощью функции GetInnerRect, которая помещает в

передаваемую ей структуру TRect координаты внутреннего прямоугольника.

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

две функции - Invalidate и InvalidateRect, аналогичные соответствующим функциям TWindow. Invalidate работает как соответствующая

функция API Windows, но не требуется параметра HWND. Родственной

функцией является функция Update, которая пытается обновить реквизит. Она аналогичная функции API Windows UpdateWindow.

Вы можете отслеживать события "мыши", происходящие внутри и

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

класса TGadget. Эти функции во многом аналогичны стандартным

функциям обработки событий ObjectWindows, но имена функций не

имеют префикса ev.

Так как реквизит на самом деле не является окном, он не имеет таблиц реакции, как другие классы ObjectWindows. Вся связь


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

Когда в окне реквизитов происходит событие "мыши", окно пытается

определить, на какой из реквизитов оно влияет. C этой целью вы

можете вызвать функцию PtIn, которая возвращает True, если заданная аргументом точка находится внутри ограничивающего прямоугольника реквизита. Когда "мышь" попадает внутрь ограничивающего прямоугольника реквизита, окно реквизита вызывает функцию MouseEnter, первый аргумент которой содержит ключевую информацию, необходимую для передачи стандартного сообщения ObjectWindows EvMouseMove. Это указывает на нажатие различных виртуальных клавиш.

После того как окно реквизита вызывает функцию реквизита MouseEnter и информирует реквизит, что "мышь" вошла в его область.

Реквизит перехватывает перемещения "мыши", вызывая функцию GadgetSetCapture, обеспечивая вызов функции MouseLeave (эта функция

вызывается после выхода "мыши" за пределы ограничивающего прямоугольника). Функции LButtonDown и LButtonUp позволяют определить

положение левой кнопки "мыши".


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