- •9 Разработка компонентов в среде Delphi
- •9.1. Выбор класса-предка
- •9.1.1. Класс tControl
- •9.1.4. Класс tCustomControl
- •9.2. Создание модуля компонента и тестового приложения
- •Разработка тестового приложения
- •9.3.1. Простые свойства
- •9.3.6. Массив свойств
- •9.3.7. Перекрытие и переопределение свойств
- •9.3.8. Создание событий
- •9.3.9. Создание методов
- •Что такое событие? в чем отличие создания свойства от события?
9.1.1. Класс tControl
Вершину иерархии визуальных компонентов представляет класс TControl.
Класс TControl вводит понятие родительских элементов управления (parent control). Свойство Parent является окном, которое содержит элемент управления. Например, если компонент Panel 1 содержит Button 1, то свойство Parent компонента Button 1 равно Panel 1.
Свойство ControlStyle определяет различные стили, применимые только к визуальным компонентам, например:
csAcceptControls |
элемент управления становится родителем любых элементов управления, помещенных на него во время проектирования. Применим только к оконным элементам управления; |
csCaptureMouse |
элемент управления перехватываетсобытия мыши; |
сsFrames |
элемент управления имеет рамку; |
csSetCaption |
свойства Caption и Text элемента управления (если не заданы явно) устанавливаются так, чтобы совпадать со свойством Name; |
csOpaque |
элемент управления скрывает все элементы позади себя. |
В классе TControl определено большинство свойств, используемых визуальными компонентами: свойства позиционирования (Align, Left, Top, Height, Width), свойства клиентской области (ClientHeight, ClientWidth), свойства внешнего вида (Color, Enabled, Font, ShowHint, Visible), строковые свойства (Caption, Name, Text, Hint), свойства мыши (Cursor, DragCursor, DragKind, DragMode).
Кроме того, класс TControl реализует методы диспетчеризации событий.
Все визуальные компоненты подразделяют на графические элементы управления и оконные элементы управления. Каждый тип представляет свою иерархию классов, происходящую соответственно от TGraphicControl и TWinControl. Главная разница между этими типами компонент состоит в том, что графические компоненты не поддерживают идентификатор окна, и, соответственно, не могут принять фокус ввода.
Оконные компоненты далее разбиваются на две категории. Прямые потомки TWinControl являются оболочками вокруг существующих элементов управления, реализованных в Windows (например, TEdit, TButton, и др.) и, следовательно, знают, как себя рисовать.
Для компонентов, которые требуют идентификатора окна, но не инкапсулируют базовых элементов Windows, которые бы обеспечивали возможность перерисовывать себя, имеется класс TCustomControl.
9.1.2. Класс TGraphicControl
Класс TGraphicControl является базовым для компонентов, которые не нуждаются в получении фокуса ввода и не служат в качестве родительских для других элементов управления (эти функции требуют наличия идентификатора окна).
По умолчанию объекты TGraphicControl не имеют собственного визуального отображения, но для наследников обеспечиваются виртуальный метод Paint (вызывается всегда, когда элемент управления должен быть нарисован) и свойство Canvas (используется как «поверхность» для рисования).
9.1.3. Класс TWinControl
Класс TWinControl используется как базовый для создания компонентов, инкапсулирующих соответствующие оконные элементы управления Windows, которые сами себя рисуют.
Класс TWinControl обеспечивает свойство Handle, являющееся ссылкой на идентификатор окна базового элемента управления. Кроме этого свойства класс реализует свойства, методы и события, поддерживающие клавиатурные события и изменения фокуса:
-
свойства фокуса
TabStop, TabOrder;
свойства внешнего вида
Ctl3D, Showing;
методы фокуса
CanFocus, Focused;
методы выравнивания
AlignControl, EnableAlign, Re Align;
оконные методы
CreateWnd, CreateParam, RecreateWnd, CreateWindowHandle, DestroyWnd;
события фокуса
OnEnter, OnExit;
события клавиатуры
OnKeyDown, OnKeyPress, OnKeyUp.
Создание любого потомка этого класса начинается с вызова метода CreateWnd, который вначале вызывает CreateParams для инициализации записи параметров создания окна, а затем вызывает CreateWindowHandle для создания реального идентификатора окна, использующего запись параметров. Затем CreateWnd настраивает размеры окна и устанавливает шрифт элемента управления.