Свойства,
события и методы основных компонентов Kylix
Давайте рассмотрим свойства,
события и методы основных компонентов Kylix. Это необходимо для использования
всех возможностей, предоставляемых средой Kylix. Более того, когда вы будете
создавать собственные компоненты, знание основных компонентов очень вам пригодится
(можно создавать компоненты на основе уже имеющихся в Kylix).
Типы свойств
Следует отметить, что к
свойствам применимы те же правила, которые используются для описания типов в
Object Pascal. Типы свойств компонента нужны в первую очередь для отображения
и редактирования его в окне инспектора объектов. Перечислим основные типы свойств
компонентов Kylix (табл. 8.12).
Таблица
8.12. Типы свойств компонентов Kylix
Тип свойства |
Отображение
свойств в окне инспектора объектов |
Простой ( |
Числовые, символьные
и строковые свойства отображаются соответственно как числа, символы
и строки. Разработчик может редактировать значения данных свойств непосредственно
в окне инспектора объектов |
Перечисляемый |
Свойства перечисляемых
типов (включая булевы) отображаются в инспекторе объектов как редактируемые
строки. Разработчик может, кроме непосредственного ввода значения свойства,
переключать допустимые значения свойства двойным щелчком кнопки мыши
в поле значения свойства инспектора объектов либо выбрать допустимое
значение из выпадающего списка |
Таблица
8.12 (окончание)
Тип свойства |
Отображение
свойств в окне инспектора объектов |
Множество ( |
Свойства типа "множество"
отображаются в инспекторе объектов как множества. При помощи двойного
щелчка мыши на значении свойства разработчик может расширить множество
и установить каждому элементу множества булево значение ( |
Объект ( |
Свойства такого
типа часто имеют собственный редактор свойств. Свойства типа "объект"
должны быть потомками класса |
Массив ( |
Свойства типа "массив"
должны иметь собственный редактор свойств. Инспектор объектов Kylix
не поддерживает редактирование свойств данного типа. Разработчик должен
при регистрации компонента определить редактор свойств |
Свойства основных компонентов
Kylix
Рассмотрим свойства, которые
имеют стандартные компоненты Kylix. Для начала — основные свойства, которые
присущи компонентам — наследникам класса TControl.
Кроме краткого
описания свойства, мы будем приводить строку кода, описывающего данное свойство
внутри класса TControl.
Это поможет вам понять,
какой тип имеет данное свойство.
Action
предназначено для определения действия, связанного с элементом управления
(меню, кнопкой и т. д). Оно описывается в классе TControl
следующим
образом:property Action:
TBasicAction;
TActionList
и задания его свойств.ActionLink
устанавливает связь между элементом управления и действием, определенным в
свойстве Action.
Оно описывается следующим образом:property ActionLink: TControlActionLink;
Align
предназначено для задания способа выравнивания компонента внутри компонента
контейнерного типа. Оно описывается так:property Align:
TAlign;
Перечислим возможные значения
данного свойства:
• alNone
—
компонент остается на том месте, где он был размещен во время разработки приложения.
Данное значение присваивается свойству Align
по умолчанию;
• alTop
—
компонент занимает всю верхнюю часть компонента-контейнера. Во время выполнения
приложения ширина компонента зависит от ширины компонента-контейнера. Высота
компонента остается неизменной, независимо от высоты контейнера;
• alBottom
- аналогичен alTop
, за исключением того, что компонент занимает
всю нижнюю часть компонента-контейнера;
• alLeft
—
компонент занимает всю левую часть компонента-контейнера. Во время выполнения
приложения высота компонента зависит от высоты компонента-контейнера. При изменении
ширины компонента-контейнера ширина компонента остается неизменной;
• alRight
— аналогичен alLeft
, за исключением того, что компонент занимает
всю правую часть компонента-контейнера;
• alClient
— компонент занимает всю клиентскую часть компонента-контейнера. При изменении
высоты и ширины компонента-контейнера изменяются высота и ширина компонента.
Если в клиентской части компонента контейнерного типа уже имеются другие компоненты,
то данный компонент занимает всю оставшуюся незанятой часть компонента-контейнера.
Примечание
Значения
alTop
иalBottom
имеют больший приоритет по сравнению со значениямиalLeft
иalRight
. Таким образом, если вы вывели на форму два компонента, присвоив свойствуAlign
одного из них значениеalTop
, а другому —alRight
, то первый компонент вытеснит верхнюю часть второго компонента (рис. 8.12).
Anchors
предназначено для определения привязки компонента к родительскому компоненту
при изменении размеров родительского компонента. Оно определяется следующим
образом:property Anchors:
TAnchors;
Это свойство
имеет тип множества (TAnchors
), которое может содержать такие
элементы:
•
akTop
— компонент привязан к верхнему краю родительского компонента;
• akLeft
— компонент привязан к левому краю родительского компонента;
• akBottom
—
компонент привязан к нижнему краю родительского компонента;
• akRight
—
компонент привязан к правому краю родительского компонента.
Рис.
8.12. Применение свойства Align
В случае, когда существует
привязка к противоположным сторонам родительского компонента, при изменении
его размеров будет происходить сжатие или растяжение дочернего компонента вплоть
до полного исчезновения его изображения. Таким образом, данное свойство определяет
как бы фиксацию расстояния от компонента до краев родительского компонента.
BoundsRect
применяется для получения одновременно координат всех четырех вершин компонента.
Данное свойство определяется так:property BoundsRect:
TRect
; Примечание
Настоящие координаты
можно получить из следующих свойств компонента: Left
(левый
край компонента), Tор
(верхний край), Width
(ширина
компонента) и Height
(высота). Описание этих свойств приводится
ниже.
Таким образом, запись
R := Control.BoundsRect;
эквивалентна записи
R.Top := Control.Top;
R.Left := Control.Left;
R.Right :- Control.Left
+ Control.Width;
R.Bottom := Control.Top
+ Control.Height;
Началом координат считается
левый верхний угол окна, содержащего данный компонент.
property Caption:
TCaption;
По
умолчанию свойство устанавливается таким же, как имя компонента (свойство Name
).
Для пунктов меню и кнопок с помощью этого свойства можно задать кнопку быстрого
вызова, для чего перед символом кнопки быстрого вызова ставится символ амперсанда
(&
). Например, для быстрого вызова меню Файл перед буквой
"Ф" в свойстве Caption
данного пункта меню можно
поставить знак амперсанда: &Файл.
При этом буква "Ф"
в пункте меню станет подчеркнутой. Теперь для вызова данного пункта меню пользователю
будет достаточно воспользоваться комбина-цией клавиш <Alt>+<Ф>.
Для того чтобы отобразить в заголовке символ &, вы можете использовать такую
запись: &&.
ClientHeight
предназначено для установки или чтения высоты клиентской области компонента.
Это свойство описывается так:property ClientHeight:
Integer;
Оно применяется
при изменении размеров компонента, которые содержат в себе другие компоненты.
При таком изменении будет происходить изменение компонентов, содержащихся
в компоненте-контейнере.ClientOrigin
предназначено для получения экранных координат (х и у) левого
верхнего угла клиентской области компонента. Началом координат является верхний
левый угол экрана. Возвращаемые координаты передаются в структуре типа TPoint.
Данное свойство предназначено только для чтения. Оно описано следующим образом:property ClientOrigin: TPoint
; ClientRect
возвращает координаты углов клиентской области компонента. Данное свойство
также предназначено только для чтения. Координаты возвращаются в структуре
типа TRect
. Свойство описывается так:property ClientRect:
TRect
;Вместо
вызова данного свойства можно воспользоваться свойствами Rect,
ClientWidth
и
ClientHeight
(они описаны ниже):
Rect (0, 0, ClientWidth,
ClientHeight)
ClientWidth
предназначено для установки или чтения горизонтального размера клиентской
области компонента. Данное свойство описано следующим образом:property ClientWidth: Integer;
Сolor
определяет цвет фона компонента. Значение данного свойства может быть или
числом, определяющим интенсивность трех основных цветов (красного, зеленого
и синего), или константой, определенной в Kylix (табл. 8.13).Таблица
8.13. Константы цвета в среде Kylix
Константа |
Цвет |
|
Бесцветный (белый) |
|
Черный |
|
Темно-бордовый |
|
Зеленый |
|
Оливковый |
|
Темно-синий |
|
Пурпурный |
|
Морской |
|
Серый |
|
Серебристый |
|
Красный |
|
Лимонный |
|
Синий |
|
Желтый |
|
Сиреневый |
|
Голубой |
|
Светло-серый |
|
Темно-серый |
|
Белый |
|
Базовый цвет фона |
|
Цвет фона для включенных
неактивных компонентов |
|
Базовый цвет фона
для текстовых компонентов |
|
Цвет фона для включенных
неактивных текстовых компонентов |
|
Цвет фона для отключенных
текстовых компонентов |
Таблица
8.13 (продолжение)
Константа |
Цвет |
|
Цвет фона для активных
текстовых компонентов |
|
Цвет полос прокрутки |
|
Цвет фона полосы
заголовка активного окна |
|
Цвет фона полосы
заголовка неактивного окна |
|
Цвет фона меню |
|
Цвет фона окна |
|
Цвет рамки окна |
|
Цвет текста меню |
|
Цвет текста окна |
|
Цвет текста заголовка
в активном окне |
|
Цвет бордюра активного
окна |
|
Цвет бордюра неактивного
окна |
|
Цвет рабочей области
приложения |
|
Базовый цвет фона
для выбранного или подсвеченного компонента |
|
Цвет фона для включенных
неактивных подсвеченных компонентов |
|
Цвет фона для отключенных
подсвеченных компонентов |
|
Цвет фона для активных
подсвеченных компонентов |
|
Базовый цвет букв
подсвеченного текста |
|
Цвет букв включенных
неактивных подсвеченных компонентов |
|
Цвет букв отключенных
подсвеченных компонентов |
|
Цвет букв отключенных
подсвеченных компонентов |
|
Цвет поверхности
кнопки |
|
Цвет тени, отбрасываемой
кнопкой |
|
Цвет текста недоступных
элементов окна |
|
Цвет текста кнопки |
|
Цвет заголовка
в неактивном окне |
Таблица
8.13 (продолжение)
Константа |
Цвет |
|
Цвет выделенной
кнопки |
|
Цвет темных теней
трехмерных элементов окна |
|
Светлый цвет на
краях трехмерных элементов окна |
|
Цвет текста советов
(всплывающих подсказок) |
|
Цвет фона советов
(всплывающих подсказок) — обычно светло-коричневый |
|
Подсвеченный текст |
|
Базовый цвет линий
или текста |
|
Цвет линий или
текста для включенных неактивных компонентов |
|
Цвет линий или
текста для отключенных компонентов |
|
Цвет линий или
текста для активных компонентов |
|
Базовый цвет букв |
|
Цвет букв для включенных
неактивных текстовых компонентов |
|
Цвет букв для отключенных
текстовых компонентов |
|
Цвет букв для активных
текстовых компонентов |
|
Базовый цвет фона
кнопок |
|
Цвет фона включенных
неактивных кнопок |
|
Цвет фона отключенных
кнопок |
|
Цвет фона активных
кнопок |
|
Базовый цвет букв
кнопок |
|
Цвет букв включенных
неактивных кнопок |
|
Цвет букв отключенных
кнопок |
|
Цвет букв активных
кнопок |
|
Базовый контрастный
цвет букв |
|
Контрастный цвет
букв включенных неактивных компонентов |
|
Контрастный цвет
букв отключенных компонентов |
|
Контрастный цвет
букв активных компонентов, |
|
Базовый цвет для
светлых областей в 3D-эффектах |
|
Цвет светлых областей
в 3D-эффектах для включенных неактивных компонентов |
|
Цвет светлых областей
в 3D-эффектах для отключенных компонентов |
Таблица
8.13 (окончание)
Константа |
Цвет |
|
Цвет светлых областей
в 3D-эффектах для активных компонентов |
|
Базовый цвет для
среднеосвещенных областей в 3D-эффектах |
|
Цвет среднеосвещенных
областей в 3D-эффектах для включенных неактивных компонентов |
|
Цвет среднеосвещенных
областей в 3D-эффектах для отключенных компонентов |
|
Цвет среднеосвещенных
областей в 3D-эффектах для активных компонентов |
|
Базовый цвет для
темных областей в 3D-эффектах |
|
Цвет темных областей
в 3D-эффектах для включенных неактивных компонентов |
|
Цвет темных областей
в 3D-эффектах для отключенных компонентов |
|
Цвет темных областей
в 3D-эффектах для активных компонентов |
|
Базовый цвет для
очень темных областей в 3D-эффектах |
|
Цвет очень темных
областей в 3D-эффектах для включенных неактивных компонентов |
|
Цвет очень темных
областей в 3D-эффектах для отключенных компонентов |
|
Цвет очень темных
областей в 3D-эффектах для активных компонентов |
|
Базовый цвет тени
в 3D-эффектах |
|
Цвет тени в 3D-эффектах
для включенных неактивных компонентов |
|
Цвет тени в 3D-эффектах
для отключенных компонентов |
|
Цвет тени в 3D-эффектах
для активных компонентов |
Данные константы цвета,
начиная с clBackground
, определяются той цветовой схемой Х-Windows,
которая установлена пользователей на конкретном компьютере. Эти цвета рекомендуется
использовать при разработке приложений для передачи третьим лицам.
Components
хранит в себе массив компонентов, владельцем которых является данный компонент.
Параметр свойств Index
позволяет выбрать
любой компонент из массива, благодаря свойству Component Index
(см.
далее). Индексы компонентов нумеруются, начиная с нуля. Число компонентов,
содержащихся в массиве, можно определить с помощью свойства ComponentCount
(см. далее).ComponentIndex
определяет индекс (порядковый номер) компонента, содержащегося в компоненте-контейнере,
а свойство ComponentCount
— число компонентов, входящих в данный
компонент контейнерного типа. Рассмотрим пример применения
данных свойств.Предположим, что на форме имеется несколько компонентов. Задача
— сместить все компоненты, которые присутствуют на форме, кроме компонента Button1,
вправо на 10 единиц. Для этого можно использовать следующий код:
for i := 0 to ComponentCount
- 1 do
if (Components[
i ].Name <> 'Button1') then
(Components[
i ] as TControl).Left: = (Components[ i ] as TControl).Left + 10;
Constraints
определяет размер ограничений, т. е. максимальную и минимальную величины ширины
и длины компонента. Оно описывается следующим образом:property
Constraints: TSizeConstraints;
Примечание
He
устанавливайте данное свойство, если вы используете свойства Align
или Anchors
, т. к. это может привести к конфликту свойств
и неправильной работе приложения.
Control
State
предназначено для определения текущего состояния компонента во
время выполнения приложения. Данное свойство описано следующим образом:property ControlState:
TControlState;
Значение
свойства ControlState
состоит из набора флагов, обозначения которых
приведены в табл. 8.14.
Таблица
8.14. Флаги значения свойства ControlState
Флаг |
Значение |
|
Левая кнопка мыши
нажата |
|
То же, что и |
|
Палитра изменена,
и элемент управления не закончил регулировку этой палитры |
Таблица
8.14 (окончание)
Флаг |
Значение |
|
Элемент управления
считывает свое состояние из потока |
|
Элемент управления
нуждается в перестроении |
|
Приложение обрабатывает
сообщения, предназначенные для передами фокуса элементу управления.
Данный флаг не гарантирует, что элемент управления получит фокус, но
предотвращает рекурсивные вызовы |
|
Элемент управления
и (или), его владелец начинают создаваться. Данный флаг сбрасывается
после завершения процесса создания |
|
Элемент управления
начинает копирование (собственное) |
|
Элемент управления
обрабатывает выбранные сообщения о закрашивании |
|
Окно элемента управления
находится в процессе уничтожения |
|
Элемент управления
начинает устанавливаться |
|
Основное окно |
|
Основное окно |
ControlStyle
определяет различные атрибуты компонента. Например, может ли компонент быть
захвачен мышью, имеет ли компонент фиксированные размеры и др. Данное свойство
определяет не экземпляры класса, а класс в целом. Оно описано следующим образом:property ControlStyle:
TControlStyle;
Значение данного свойства
также состоит из флагов (табл. 8.15).
Таблица
8.15. Флаги значения свойства ControlStyle
Флаг |
Значение |
|
Элемент управления
получает своего предка от одного из компонентов, созданных во время
разработки приложения |
|
Элемент управления
перехватывает событие нажатия кнопки мыши |
|
Элемент управления
преобразует щелчки правой кнопкой мыши во время разработки приложения
в щелчки левой Кнопкой мыши |
Таблица
8.15 (окончание)
Флаг , |
Значение |
|
Элемент управления
может принимать и обрабатывать щелчки мыши |
|
Элемент управления
имеет вид трехмерной рамки |
|
Значение свойства
|
|
Элемент управления
полностью занимает клиентскую прямоугольную область |
|
Элемент управления
может принимать и обрабатывать двойные щелчки мыши. Иными словами, преобразовывать
двойные щелчки в одинарные |
|
Ширина элемента
управления не может быть изменена |
|
Длина элемента
управления не может быть изменена |
|
Элемент управления
является невидимым при разработке приложения |
|
Элемент управления
может быть скопирован с помощью метода |
|
Стандартные события,
такие как щелчки мыши, нажатие клавиш клавиатуры и др., игнорируются
приложением. Установка данного флага позволяет приложению работать быстрее
и применяется в тех случаях, когда обработки стандартных событий не
требуется |
|
Элемент управления
может содержать изображение из списка изображений |
|
Элемент управления
привязан к объекту типа |
|
Элемент управления
реагирует на команды системного меню |
Cursor
определяет вид указателя мыши, когда он находится над данным компонентом.
Оно описывается следующим образом:property Cursor:TCursor;
В свою очередь, тип TCursor
описан так:
type TCursor = -32768
.. 32768;
Kylix имеет встроенные
виды указателей. Кроме встроенных, разработчик может помещать в приложение собственные
виды указателя мыши. В табл. 8.16 приводятся встроенные типы указателей мыши.
Таблица
8.16. Указатели мыши
Значение свойства |
Числовое значение |
Изображение
указателя мыши |
|
0 |
Указатель, принятый
по умолчанию. Обычно |
|
-1 |
Без изображения
указателя |
|
-2 |
Стрелка |
|
-3 |
Крест |
|
-4 |
Указатель в виде
курсора для ввода текста |
|
-22 |
Указатель изменения
размера окна |
|
-6 |
Указатель изменения
размера окна в правом верхнем углу или в левом нижнем |
|
-7 |
Указатель изменения
размера окна вверху или внизу (по вертикали) |
|
-8 |
Указатель изменения
размера окна в левом верхнем углу или в правом нижнем |
|
-9 |
Указатель изменения
размера окна слева или справа (по горизонтали) |
|
-10 |
Стрелка вверх |
|
-11 |
Песочные часы |
|
-12 |
Перетаскивание
компонента |
|
-13 |
Указатель, показывающий
невозможность переноса компонента в данную область |
|
-14 |
Горизонтальный
сплиттер |
|
-15 |
Вертикальный сплиттер |
|
-16 |
Перетаскивание
нескольких компонентов |
|
-17 |
Ожидание выполнения
SQL-запроса |
|
-18 |
Указатель, показывающий
невозможность действия |
|
-19 |
Ожидание старта
приложения (стрелка с песочными часами) |
|
-20 |
Стрелка с вопросом |
|
-21 |
Указатель в форме
руки |
DragMode
определяет поведение компонента в процессе его перетаскивания. Свойство
описывается следующим образом:property DragMode: TDragMode;
Данное свойство
может принимать одно из двух значений: dmAutomatic
или dmManual.
В первом случае от разработчика не требуется обработки событий. Достаточно
щелкнуть кнопкой мыши на компоненте и начать его перетаскивание. Во втором
случае компонент не может начать процесс перетаскивания, пока приложение не
вызовет метод BeginDrag
.DragObject
содержит значение, определяющее объект перетаскивания, ассоциированный с элементом
управления. Данное свойство описано так:property DragObject: TDragObject;
Enabled
показывает, будет ли компонент доступен пользователю во время работы приложения.
Это свойство описывается следующим образом:property Enabled: Boolean
;Enabled = false
) отображается серым цветом.
Он игнорирует события клавиатуры, мыши и таймера. Данное свойство применяется
для временного ограничения доступа пользователя к компонентам. Например, если
вы хотите сделать временно недоступной кнопку, нужно в свойстве Enabled
кнопки установить значение false:
Button1.Enabled := false;
Font
предназначено для установки шрифта, а также всех его атрибутов (размера,
стиля, цвета и т. д.). Описано так:property Font: TFont;
Height
применяется для задания высоты компонента. Описывается это свойство
так:property Height: Integer;
HelpContext
определяет номер, используемый в контекстно-зависимой справке. То есть задается
номер страницы справки, которая будет отображаться на экране, когда пользователь
нажмет клавишу <F1>. Данное свойство описано следующим образом:property HelpContext: THelpContext;
HelpFile
описано следующим образом:property HelpFile: String
;HelpKeyword
предназначено
для осуществления поиска в файле контекстно-зависимой справки по ключевому
слову. Данное свойство описано следующим образом:property HelpKeyword: String;
Hint
применяется для задания текста всплывающей подсказки. Это свойство описано
так:property Hint: String;
Данное свойство обычно состоит из двух частей, разделяемых символом
" |". Например,Button1.Hint := "Открыть|Выбор и открытие файла рисунка
";ShowHint
в
true
(см. далее). Left
применяется для задания координаты левого края компонента. За начало
координат всех компонентов берется левый верхний угол клиентской области родительского
компонента. Для форм началом координат является левый верхний угол экрана.property Left: Integer;
MouseCapture
используется для определения факта захвата мышью элемента управления. Данное
свойство имеет логический тип и описано следующим образом:property MouseCapture: Boolean;
True
, иначе
—False.
Name
определяет имя компонента, по которому на него ссылаются другие компоненты
и которое в дальнейшем используется разработчиком. Данное свойство описано
так:property Name: TComponentName;
Button1, Button2, Label1
и т. п. Рекомендуется изменять
эти имена на более осмысленные.Parent
определяет родительский компонент контейнерного типа, в пределах которого
располагается данный компонент. Это свойство описано следующим образом:property Parent:
TWidgetControl;
Примечание
Важно различать два похожих свойства. Свойство
Parent
определяет родительский компонент, т. е. тот компонент, на котором располагается данный компонент. СвойствоOwner
определяет владельца компонента. Владелец — это компонент, который передается в качестве параметра в конструктор данного компонента и который владеет им. Например, форма является владельцем всех расположенных на ней компонентов и одновременно — родителем.
ParentColor
указывает, будет ли данный компонент иметь такой же цвет, как и его предок.
Свойство описано так:property
ParentColor: Boolean;
Ecли вы хотите, чтобы компонент
унаследовал значения цвета от своего предка, то установите данное свойство в
true
. Если это свойство будет иметь значение False
,
компонент будет использовать цвета, заданные в его собственных свойствах.
ParentFont
предназначено для определения, будет ли для данного компонента использоваться
шрифт, применяемый в родительском компоненте контейнерного типа. Например,
если на форме находится кнопка, то при установке у данной кнопки свойства
ParentFont
в true
приведет к тому, что надпись на
кнопке будет выполнена тем шрифтом, который указан в свойстве Font
формы. Данное свойство описано так:property ParentFont: Boolean
;ParentShowHint
предназначено для включения и выключения родительского свойства ShowHint
.
Оно описано следующим образом:property ParentShowHint: Boolean
;РорupMenu
служит для сопоставления с данным компонентом всплывающего по щелчку правой
кнопки мыши меню. Данное свойство описано так:property PopupMenu: TPopupMenu;
ScalingFlags
служит для определения, какие атрибуты элемента управления могут изменять
размеры (масштабироваться). Данное свойство описано следующим образом:property ScalingFlags:
TScalingFlags
;Тип TScalingFlags
представляет собой набор флагов, которые описаны в табл. 8.17.
Таблица 8.17. Флаги TScalingFlag
Флаг |
Значение |
|
Левая сторона элемента
управления не может масштабироваться |
|
Верх элемента управления
не может масштабироваться |
|
Ширина элемента
управления не может масштабироваться |
|
Высота элемента
управления не может масштабироваться |
|
Шрифт элемента
управления не может масштабироваться |
ShowHint
применяется для включения или выключения показа всплывающих подсказок при
задержке указателя мыши над компонентом. Текст подсказки задается в свойстве
Hint
. Свойство ShowHint
описано следующим образом:property ShowHint: Boolean;
Text
предназначено для задания или чтения строки текста, связанной с данным
компонентом. Данное свойство описано так:property Text: TCaption;
Это свойство применяется в компонентах типа TEdit
и в
компонентах-списках.Tор
применяется для задания или чтения значения, определяющего координату верхнего
края компонента. Данное свойство описано следующим образом:property Top: Integer;
Visible
применяется для определения, будет ли виден компонент на форме во время выполнения
программы. Оно описано так:property Visible:
Boolean;
Если свойство имеет значение
true
, то компонент будет виден, иначе — невидим.
Width
применяется для установки горизонтального размера
компонента, а также для чтения текущего значения ширины компонента. Данное
свойство имеет целый тип и описано следующим образом:property Width:
Integer;
Рассмотрим
теперь свойства, характерные для класса TWidgetControl
и его наследников.
Bitmap
служит для задания растрового изображения, которое отображается как
фоновый рисунок элемента управления. Данное свойство в классе TWidgetControl
описано следующим образом:property Bitmap: TBitmap;
Brush
предназначено для установки цвета и кисти для закраски фонового изображения
элемента управления. Данное свойство описано так:property Brush: TBrush;
ChlidHandle
возвращает ссылку на элемент управления. Данная ссылка является дескриптором
дочернего окна, который применяется, когда происходит вызов родительского
окна. Свойство используется только для чтения и описано следующим образом:property ChildHandle: QwidgetH; library
;ControlCount
возвращает число дочерних элементов управления от данного. Оно описано так:property ControlCount: Integer;
Controls
ниже), т. к. первый индекс всегда равен
нулю.Controls
представляет собой массив, содержащий список всех дочерних элементов управления
по отношению к данному элементу. Это свойство описывается следующим образом:property Controls[Index:
Integer]: TControl
;
Примечаниe
He путайте
свойство Controls
со свойством Components
. Свойство
Controls
содержит список всех дочерних окон от данного, а свойство
Components
— список всех компонентов, владельцем которых этот
компонент является.
Данное свойство применяется
только для чтения. Для добавления или удаления дочерних элементов управления
используйте соответствующие методы InsertControl
и Remove
Control
.
Handle
обеспечивает доступ к дескриптору окна элемента управления. Описано следующим
образом:property Handle: QWidgetH read GetHandle; library;
Данное свойство применяется только для чтенияInputKeys
определяет тип клавиш, которые могут применяться для ввода информации внутри
данного элемента управления при получении им фокуса. Свойство описано следующим
образом;property InputKeys:
TInputKeys;
Стоит
сказать несколько слов о типе TInputKeys.
Этот тип представляет
собой перечисляемый тип, значения которого показаны в табл. 8.18.
Таблицa
8.18. Значения типа TInputKeys
Значение |
Описание |
|
Ввод любых символов
клавиатуры |
|
Клавиши со стрелками
(<влево>, <вправо>, <вверх>, <вниз>) |
|
Любые нефункциональные
клавиши без <Ctrl> и <Alt> |
|
Клавиша ввода (<Enter>) |
|
Клавиша табуляции
(<Таb>) и комбинация клавиш обратной табуляции (<Shtft>+<Tab>) |
|
Клавиши редактирования
(<Backspace>, <lnsert>, <Delete>) |
|
Клавиши навигации
по тексту (<вверх>, <вниз>, <влево>, <вправо>,
<Home>, <End>, <PageUp>, <PageDown>) |
|
Клавиша <Esc> |
Masked
включает или выключает свойство Automask
для отображения непрямоугольных
окон. Описано следующим образом:property Masked: Boolean;
Принимает значение True
, если окно имеет непрямоугольную
форму. Palette
хранит значение текущей палитры, которая используется для рисования данного
элемента управления. Описано следующим образом:property Palette: TWidgetPalette;
ParentWidget
служит для ссылки на родительский элемент управления, т.е. на дескриптор окна
родителя данного элемента управления. Описано следующим образом:property ParentWidget: QWidgetH;
Style
предназначено для задания стиля компонента. Описано так:property Style:
TWidgetStyle;
TabOrder
применяется для задания последовательности перехода от одного компонента формы
к другому при помощи клавиши <Таb>. Свойство описано следующим образом:property TabOrder: TTabOrder
;TabOrder
компонента значение -1, этот компонент не сможет получить фокус при помощи
клавиши <Таb>. Предположим, что на форме расположены три кнопки: Button1,
Button2
и Button3
. Для того чтобы фокус между этими кнопками
передавался следующим образом: сначала активна кнопка Button2
,
затем — Button1
и потом уже Button3
, нужно установить
свойство TabOrder
для кнопки Button1
равным 1, для
Button2
— 0, а для Button3
— 2.TabStop
применяется для указания возможности передачи фокуса на компонент при помощи
клавиши <Таb>. Оно описывается следующим образом:property TabStop:
Boolean
;Если значение данного свойства
равно true
, то при помощи клавиши <Таb> можно передать фокус
этому компоненту, в зависимости от его свойства TabOrder
. Если
значение свойства TabStop
равно false
, то независимо
от свойства TabOrder
фокус будет невозможно передать при помощи
клавиши <Таb>.
Методы
Методы — это процедуры
или функции, принадлежащие объекту. Методы определяют поведение объекта. Для
вызова метода объекта нужно указать объект, с которым ассоциирован данный метод,
затем, через точку, — название метода. Например:
Button1.Click
Вызывается метод нажатием
(Click
) кнопки (Button1
).
Для создания метода его
нужно сначала объявить внутри описания класса или компонента, содержащего данный
метод. Например:
typeTMyComponent = class(TObject)
. . .
procedure DoSomething; . . .
end;
Здесь, внутри описания
нового компонента, мы объявляем метод DoSomething
с помощью служебного
слова procedure
. После того как мы объявили новый метод, необходимо
создать тело данного метода. Эта процедура может находиться где угодно внутри
модуля, в котором был описан компонент. Например:
procedure TMyComponent.DoSomething; begin// Здесь размещаем команды и операторы, которые должны выполняться
// при вызове метода DoSomething на выполнение end;
Заметим, что при
создании процедуры DoSomething
мы должны указывать его полное имя
вместе с указанием имени компонента или класса
(procedure TMyComponent.DoSomething;
)
.
Рассмотрим основные методы
среды Kylix.
Add
предназначен для добавления нового элемента в список типа TList, TStringList
или TStrings
. Если список не отсортирован, то новый элемент добавляется
в самый конец списка. Если список отсортирован, новый элемент добавляется
в позицию списка, определяемую сортировкой. Вызов настоящего метода увеличивает
значение свойства count для этого списка. При выполнении данного метода может
возникнуть исключение EListError
в случае, когда список отсортирован,
добавляемая строка уже присутствует в списке и для данного списка свойствоDuplicates
установлено в dupError
. Рис.
8.13. Координаты точек, задаваемых при вызове метода Arc
Arc
предназначен
для рисования дуги окружности или эллипса. В качестве параметров метода передаются
координаты четырех точек. Первые две точки (X1, Y1
) и (X2,
Y2
) определяют прямоугольник, описывающий эллипс. Следующая точка (X3,
Y3
) определяет начальную точкуX3, Y3
). Точка (X4, Y4
) определяет конечную точку
дуги, которая находится на пересечении прямой, проходящей через центр окружности
или дуги и точки (Х4, Y4
). Дуга рисуется против часовой стрелки,
от начальной до конечной точки (рис. 8.13).Arc:
Image1,Canvas.Arc
(0,0, 200,100, 200,10, 0,0);
Assign
применяется для копирования данных одного объекта в другой. Настоящий
метод имеет отличие от простого присваивания: объект1 : = объект2
,
которое заключается в том, что при присваивании указатель на объект-назначение
начинает указывать на объект-источник, а метод Assign
создает
новую копию объекта. После применения метода Assign
получается
два объекта с одинаковыми данными. Если объекты разного типа, то при вызове
D.Assign(S)
тип D
должен "знать", как
скопировать в него тип S
(тип S
может ничего не
знать о преобразовании типов). Если метод Assign
не может осуществить
преобразование типов, он вызывает защищенный метод AssignTo
,
объявленный в классе TPersistent
и перегруженный в классах, производных
от него. Вызов имеет вид S.AssignTo(D)
. Если и метод AssignTo
не может осуществить преобразование или если он не перегружен, вызывается
AssignTo
класса TPersistent
и генерируется исключение.
Метод Assign
можно применять в разных ситуациях." Хорошей
иллюстрацией применения данного метода может служить копирование изображения
из буфера обмена в графический компонент TImage
:Image1.Picture.Assign
(Clipboard)
;Clipboard.Assign
(Image1.Picture);
BeginDrag
вызывается, когда начинается процесс перетаскивания
компонента. Данный метод применяется только в том случае, если свойство DragMode
компонента имеет значение dmManual
. В случае, когда свойство
имеет значение dmAutomatic
, перетаскивание компонента осуществляется
автоматически. Вызов данного метода обычно вставляют в обработчик события
OnMouseDown
. Параметр Immediate
метода BeginDrag
показывает, сразу ли после нажатия кнопки мыши указатель курсора сменит вид
на тот, который определен в свойстве DragCursor
, и сразу ли начнется
процесс перетаскивания. В случае, если параметр Immediate
имеет
значение false
, перетаскивание начинается только после того,
как пользователь щелкнет на компоненте и сместит указатель мыши на расстояние
и пять пикселов. Это удобно для того, чтобы обрабатывать щелчок на компоненте,
не начиная его немедленного перетаскивания.BringToFront
применяется для переноса компонента наверх в так называемой Z-последовательности,
Z-последовательность определяет порядок
компонентов в свойстве Controls
родительского оконного компонента
(см. разд "Иерархия визуальных компонентов" данной главы). Тот
компонент, который расположен в Z-последовательности выше других, в случае
частичного или полного перекрытия компонентов будет виден. Таким образом,
вызов метода BringToFront
позволит переместить "наверх"
компонент, скрытый под другими компонентами. Данный метод можно применять
как к неоконным, так и к оконным компонентам. Однако все неоконные компоненты
располагаются в Z-последовательности ниже оконных, поэтому в случае, если
неоконный компонент перекрыт оконным, например кнопка перекрыта компонентом
типа TMеmо
, вызов метода BringToFront
для кнопки
ничего не даст.BrushCopy
вызывается для копирования части изображения битовой матрицы на область вывода
(канву) и замены указанного цвета в изображении на значение, установленное
для кисти канвы.CanFocus
применяется для определения, может ли данный компонент получать фокус. Данный
метод возвращает значение true, если у компонента и всех его родителей свойства
Visible
и Enabled
имеют значения true
.ChangeScale
применяется для изменения масштаба компонента и всех его дочерних элементов
При вызове настоящего метода масштабируются такие свойства компонента, как
Tор
, Left, Width, Height
. Данный метод имеет два
параметра, определяющих множитель и делитель масштаба: M
и D
.
Приведем пример использования этого метода. Допустим, мы хотим увеличить размер
формы Form1
в два раза, для этого зададим множитель масштаба,
равный двум, а делитель - равный единице:Form1.ChangeScale (2,1);
При выполнении данной строки размеры формы Form1
увеличатся
в два раза.M
,
равное eдинице, а значение D
— равное трем:Form1.ChangeScale (1,3);
Chord
применяется для рисования замкнутой фигуры, границами которой являются дуга
окружности или эллипса и хорда. Параметры данного метода аналогичны параметрам
метода Arc
. Результатом работы настоящего метода могут стать
фигуры, изображенные на рис. 8.14.ClassName
применяется для определения имени типа компонента.Clear
предназначен для удаления всех элементов, входящих в данный список, или для
удаления всего текста, входящего в рассматриваемый компонент. Примеры:ListBox1.Clear;
Memo1. Clear
;
Рис.
8.14. Фигуры, получаемые после вызова метода Chord
Настоящий метод можно применять
и к объекту Clipboard.
Вызов метода Clear
для буфера
обмена удалит все содержимое буфера.
Click
служит для вызова обработчика события OnClick
данного компонента.
Применяется для имитации нажатия левой кнопки мыши над объектом. Например,
для вызова обработчика события OnClick
кнопки Button1
можно проделать следующее;Button1.Click
;
ClientToScreen
применяется для преобразования координат клиентской области компонента в координаты
экрана. Началом координат клиентской области является левый верхний угол клиентской
области компонента, Началом координат экрана является левый верхний угол экрана.
Для обратного преобразования координат можно использовать метод ScreenToClient
.ContainsControl
определяет, каким наследником (прямым или косвенным) является данный компонент
по отношению к какому-либо оконному компоненту. Если этот компонент прямой
наследник, то метод возвращает true
, иначе — false
.ControlAtPos
предназначен для оконных компонентов. Он применяется для того, чтобы определить,
какой дочерний компонент находится в позиции с координатами, задаваемыми параметром
Pos
. В случае, если в заданной позиции нет ни одного дочернего
компонента, данный метод возвращает в качестве результата значение nil.
Второй параметр AllowDisabied
определяет, нужно ли учитывать
при вызове метода те компоненты, которые отключены (свойство Disabled
= true).
CopyRect
применяется для копирования прямоугольной части изображения с одной
канвы на другую. Копирование осуществляется в том режиме, который определен
свойством CopyMode
.Delete
применяется по отношению к таким компонентам, как TList, TStringList,
TStrings
и TMenuItem
. Данный метод вызывается при необходимости
удаления какого-либо элемента из списка. В качестве параметра этого метода
передается число, определяющее индекс удаляемого элемента. Нумерация элементов
начинается с нуля. При удалении пункта меню, содержащего Подменю, удаляется
и этот пункт, и его подменю. Примечание
Обратите внимание на
то, что при удалении элемента списка происходит перестройка данного списка.
То есть, если вы удалили третий элемент, то после его удаления на место
третьего элемента будет поставлен четвертый. Таким образом, пустых мест
в списках не бывает.
Destroy
применяется для вызова деструктора объекта. То есть вызов данного метода
уничтожает данный объект и освобождает занимаемую память. Примечание
Не рекомендуется вызывать
непосредственно метод Destroy
для уничтожения объекта Для этих
целей лучше использовать метод Free
, который проверяет, не
была ли уже раньше освобождена занимаемая объектом память, после чего вызывает
метод Destroy
. Более того, метод Free
генерирует
меньший код для уничтожения форм используйте метод Release
.
DisableAlign
применяется для временного запрета выравнивания дочерних компонентов оконного
компонента. Обратное действие можно получить,
воспользовавшись методом EnableAlign
. Dormant
используется для создания битовой матрицы в оперативной памяти для
освобождения дескриптора матрицы. Использование данного метода позволяет сократить
расходы ресурсов графической подсистемы Linux, которые используются приложением.
Приведем пример (листинг 8.1). Листинг 8.1. Освобождение
ресурсов графической подсистемы
// загрузка картинки
в Bitmap1
Bitmap1.
LoadFromFile ('mypicture.bmp') ;
//копирование
в Bitmap2 из Bitmap1
Bitmap2.Assign
(Bitmap1);
// применение
метода Dormant и освобождение ресурсов графической подсистемы
Bitmap2.Dormant;
Draw
применяется для рисования изображения, хранящегося в объекте, который определен
параметром Graphic
, в координаты, задаваемые параметрами X и
Y. Изображение может быть либо битовой матрицей, либо пиктограммой, либо метафайлом.
Например:Image1.Canvas.Draw
(10, 10, Image2.Picture.Bitmap);
Таким
образом, в координаты (10,10) канвы картинки Image1
будет занесен
рисунок из канвы картинки Image2
.DrawFocusRect
применяется для рисования прямоугольника с помощью булевой операции XOR
.
То есть повторное рисование такого же прямоугольника на том же месте удалит
этот прямоугольник. Пример:Image1.Canvas.DrawFocusRect (Rect (0,0,30,30);
Ellipse
применяется для рисования окружности или эллипса. Параметры — точки (X1,
Y1
) и (X2
, Y2
), определяющие прямоугольник,
в который вписан эллипс.Error
вызывается при необходимости генерации исключения при работе с объектом типа
TList
. Вызов данного метода дает лучший результат по сравнению
с командой Raise
. Примером вызова этого метода может служить
следующая строка:List.Error ('Ошибка в элементе %u списка List', I);
Выполнение данной строки вызовет сообщение об ошибке в какой-либо строке
списка.Exchange
предназначен для обмена местами двух элементов списка. Позиции этих двух элементов
задаются параметрами Index1
и Index2
.
Примечаниe
Не применяйте
метод Exchange
для отсортированных списков— это может нарушить
упорядоченность списков.
Expand
применяется для увеличения емкости списка типа TList
. Вызов данного
метода приводит к выделению дополнительной памяти для быстрого добавления
новых элементов списка. В случае, если при вызове данного метода список не
заполнен, его емкость не изменяется, иначе — увеличивается. FillRect
применяется для заполнения указанного прямоугольника канвы цветом, определенным
значением свойства Brush
. Например, приведенный ниже код заполняет
всю область канвы компонента Image1 фоновым цветом, определенным свойством
Brush
:with Image1.Canvas do
FillRect (Rect (0, 0, Width, Height) );
FindNextControl
применяется для определения следующего за указанным в параметре CurControl
дочернего оконного компонента, соответствующего последовательности
табуляции. Если в качестве параметра выступает не дочерний элемент данного
оконного компонента, то метод возвращает первый в последовательности табуляции
компонент. Второй параметр GoForward
определяет направление поиска
компонента. Если данный параметр имеет значение true, то ищется следующий
компонент, иначе — предыдущий. Следующий параметр CheckTabStop
—
определяет,TabStop
установлено в false
. Если значение данного параметра равно true,
то такие компоненты не учитываются, иначе — учитываются. Последний параметр
CheckParent
применяется для того, чтобы указывать, учитывать
ли при поиске только те компоненты, которые являются прямыми потомками данного
оконного компонента. Если данный параметр равен false,
то просматриваются
все компоненты, иначе — только прямые потомки.First
возвращает первый элемент списка типа TList
.FloodFill
применяется для закрашивания замкнутой области канвы произвольной формы каким-либо
цветом. В качестве параметров данного метода выступают: начальная точка закрашивания,
цвет и стиль заполнения. Начальная точка закрашивания (X, Y) должна находиться
внутри закрашиваемой области. Два других параметра применяются для задания
границы этой области. Параметр color применяется для указания цвета, который
является границей закрашивания. Параметр FillStyle
может иметь
два значения. Если он равен fsSurface,
то происходит закрашивание
именно той области, которая окрашена цветом color, а на других цветах закрашивание
не происходит. Если же параметр FillStyle
имеет значение fsBorder
,
то заполняется область, в которой могут присутствовать любые цвета, кроме
color, который является цветом границы закрашивания. Focused
применяется для определения, является ли в настоящий момент времени данный
оконный компонент активным. Данный метод возвращает значение true
,
если фокус принадлежит данному оконному компоненту, иначе — false
.FrameRect
применяется для рисования на канве прямоугольной рамки. Данный метод использует
установки текущей кисти (Brush
). Толщина рамки равна одному пикселу.
Внутренняя часть рамки не заполняется никаким цветом. В качестве примера приведем
код, который рисует на канве компонента Image1
красную прямоугольную
рамку:with Image1.Canvas do begin
Brush.Color := clRed;FrameRect ( Rect (10,10,150,100) )
;end
;
Free
применяется для вызова деструктора объекта. Данный метод проверяет, не была
ли уже ранее высвобождена память, предназначенная для данного объекта, после
чего вызывает метод Destroy
.GetTabOrderList
предназначен для построения списка типа TList
дочерних оконных
компонентов, расположенных в последовательности табуляции. Свойство TabStop
во внимание не принимается. В список входят как прямые, так и косвенные потомки
данного оконного компонента.HandleAllocated
предназначен для проверки наличия дескриптора окна у данного компонента. В
случае, если дескриптор, окна есть, метод возвращает значение true
.
Данный метод удобно применять, если нет необходимости создавать дескриптор
окна компоненту, у которого его нет. Непосредственная проверка свойства Handle
компонента приводит к созданию дескриптора окна.HandleNeeded
применяется для создания дескриптора окна для компонента, у которого его не
было. При работе настоящий метод вызывает сначала метод CreateHandle
у родительского компонента, а затем создает дескриптор для данного компонента.Hide
применяется
для того, чтобы сделать компонент невидимым. Вызов данного метода эквивалентен
командеComponent.Visible
:= false;
Если данный
компонент является оконным и содержит в себе другие компоненты, то эти компоненты
также становятся невидимыми.
Примечание
Обратите внимание
на тот факт, что хотя компонент является невидимым, все его свойства и методы
являются доступными.
IndexOf
применяется для определения индекса первого вхождения в компонент типа TList
данного элемента. Если такого элемента в списке нет, метод возвращает значение
—1.Insert
предназначен для вставки нового элемента списка в заданную позицию.
Единственный параметр данного метода Index
показывает, в какую
именно позицию будет вставлен новый элемент списка. При вставке нового элемента
все последующие элементы сдвигаются (их индексы увеличиваются на единицу).
В случае, если происходит попытка вставить новый элемент в отсортированный
список, генерируется исключение EListError
. Тогда лучше использовать
метод Add.
Invalidate
используется для полной перерисовки компонента. Применяется, когда с компонентом
произошли какие-либо визуальные изменения.Last
возвращает значение, равное последнему указателю списка типа Tlist
и значению Count -1.
LineTo
применяется для рисования на канве объекта прямой линии. Начало линии совпадает
с текущим значением координат пера (PenPos
) и заканчивается в
точке с координатами (X, Y
), за исключением самой точки, которые
передаются в качестве параметров метода. LoadFromClipboardFormat
применяется для загрузки изображения в графический компонент из буфера
обмена. LoadFromFile
предназначен для загрузки изображения в графический компонент из файла, задаваемого
параметром FileName
. Если данный графический файл по каким-либо
причинам не может быть загружен (несоответствие типов, незарегистрированный
графический формат файла), то генерируется исключение EInvalidGraphic
.LoadFromStream
позволяет загружать графическое изображение из потока, задаваемого параметром
Stream
. Данный метод может использоваться при загрузке, например,
графических полей в наборе данных из объекта типа TBlobStream
.Lock
применяется для блокировки канвы компонента и запрета рисования на ней из
других потоков многопоточного приложения. Обратный результат достигается при
помощи метода unlock. При многократном вызове метода Lock
будет
увеличиваться свойство LockCount
, в котором фиксируется количество
блокировок. Канва будет недоступной из других потоков, пока не снимется последняя
блокировка. Если вы не хотите использовать многократную блокировку, можно
воспользоваться методом TryLock.
После блокирования канвы общая
производительность приложения может существенно снизиться.Mask
применяется для преобразования цветного изображения в черно-белую маску. В
результате замены цвет TransparentColor
переходит в белый, а
все остальные цвета — в черный.Move
предназначен для перемещения элемента списка, находящегося в позиции, задаваемой
параметром CurIndex
, в позицию, задаваемую параметром NewIndex
.MoveTo
применяется
для изменения текущей позиции пера (PenPos
) в заданную параметрами
(X, Y). При перемещении пера на канве ничего не рисуется. Данный метод аналогичен
прямой установке координат пера в свойстве PenPos
.OpenBit
предназначен для возврата индекса первого элемента массива типа TBits,
имеющего значение false
.Pack
предназначен для удаления из списка типа TList
всех элементов,
значение которых равно nil.
После удаления происходит переиндексация
всех элементов списка.Pie
рисует
замкнутый сегмент окружности или эллипса. Параметры данного метода аналогичны
параметрам метода Arc
. В результате выполнения данного метода
может получиться рисунок, похожий на рис. 8.15.Polygon
рисует на канве многоугольник по заданному множеству точек, определенных
массивом Points
, причем первая точка соединяется с последней,
после чего многоугольник закрашивается цветом, определенным свойством кисти
Brush
.Image1.Canvas.Polygon
( [ Point (10, 10), Point (30,10),
Point (130, 30), Point (240, 120) ] );Вышеприведенный код рисует на канве компонента
Image1
закрашенный четырехугольник, координаты
которого заданы непосредственно. Рис.
8.15. Результат выполнения метода Pie
PolyLine
рисует да канве незамкнутый многоугольник, т. е. кусочно-линейную кривую.
Основное отличие этого метода от метода Polygon
заключается в
том, что PolyLine
не соединяет первую и последнюю точки массива
Points
.Rectangle
предназначен для рисования на канве прямоугольника. В качестве параметров
метода передаются координаты двух точек: верхнего левого и правого нижнего
углов прямоугольника. Прямоугольник рисуется текущим пером Реn
и закрашивается цветом, определенным в свойстве Brush
. Примечание
Для рисования прямоугольника
без рамки используйте метод FillRect
. Для рисования прямоугольника
со скругленными углами используйте метод RoundRect
. Чтобы нарисовать
незакрашенный прямоугольник, используйте метод FrameRect
.
Refresh
служит для немедленной перерисовки изображения компонента. Данный метод вызывает
метод Repaint
.Remove
предназначен для удаления элемента со значением, равным параметру Item
из списка типа TList.
Данный метод удобно применять, когда неизвестен
индекс удаляемого элемента, а известно лишь его значение. В противном случае
можно применять метод Delete
.Repaint
применяется для перерисовки изображения компонента. Данный метод можно применять
вместо метода Refresh
. Метод Repaint
вызывает сначала
метод Invalidate
, а затем — Update
.RoundRect
применяется для рисования прямоугольника со скругленными углами. Прямоугольник
закрашивается цветом, установленным в свойстве Brush
. Два параметра
(X1, Y1
) и (Х2, Y2
) задают координаты углов
прямоугольника (как в методе Rectangle
). Два других параметра
X3
и Y3
задают эллипс с шириной X3
и высотой Y3
. Углы прямоугольника скругляются с помощью данного
эллипса.SaveToClipboardFormat
применяется для создания копии изображения и передачи его в буфер обмена.
Однако записать изображение в буфер обмена можно гораздо проще: воспользовавшись
методом Assign
.SaveToFile
сохраняет графическое изображение в файл, задаваемый параметром FileName
.SaveToStream
сохраняет графическое изображение в поток, задаваемый параметром Stream
.ScreenToClient
служит для преобразования координат экранной области в координаты клиентской
части данного компонента.ScrollBy
предназначен для сдвига содержимого данного оконного компонента, включая
все его дочерние компоненты. Два параметра DeltaX
и DeltaY
задают, соответственно, сдвиг по горизонтали и по вертикали. Положительные
значения задают сдвиг вправо и вниз, отрицательные — влево и вверх. Например,
нижеприведенный код сдвигает содержимое формы Form1
на 10 пикселов
влево:Form1.ScrollBy (-10, 0);
SelectFirst
предназначен для передачи фокуса компоненту, находящемуся первым в последовательности
табуляции. Например, кодForm1.SelectFirst;
выберет первый находящийся в последовательности табуляции компонент
для формы Form1
.SelectNext
передает фокус следующему компоненту, расположенному в последовательности
табуляции после указанного в параметре CurControl.
Второй параметр
GOForward
определяет направление поиска компонента: если он равен
true — то вперед, иначе — назад. Последний параметр CheckTabStop
определяет, должен ли следующий компонент иметь значение true
свойства TabStop
.SendCancelMode
предназначен для прекращения модального состояния данного компонента. Модальным
состоянием называется такое состояние компонента, когда он ожидает от
пользователя какого-либо действия, причем ни один другой компонент приложения
не доступен. Вызов данного метода прекращает ожидание действия со стороны
пользователя.SendToBack
перемещает указанный компонент в самый конец Z-последовательности. Таким образом,
компонент может стать невидимым из-за его перекрытия другими компонентами.
Если данный компонент до вызова метода имел фокус, он его потеряет после выполнения
метода.SetBounds
предназначен для одновременного изменения четырех свойств компонента: Left,
Toр, Width
и Height.
Параметры, соответственно,
ALeft, ATop, AWidth
и AHeight
. Вызов данного метода
позволяет сделать код приложения более компактным. Кроме того, перерисовка
компонента произойдет здесь всего один раз, а не четыре, как если бы вы изменяли
последовательно эти четыре свойства.SetChildOrder
применяется для изменения позиции компонента, задаваемого параметром Child,
в списке дочерних компонентов данного оконного компонента. Компоненту присваивается
новый индекс, задаваемый параметром Order.
Пример:Form1.SetChildOrder (Button1, 5)
;Button1
будет расположена в последовательности
дочерних элементов формы Form1
на шестом месте (нумерация начинается
с нуля).SetFocus
предназначен для передачи фокуса данному компоненту. Например:Memo1. SetFocus
;SetZOrder
предназначен для перемещения данного компонента в начало или конец Z-последовательности.
Если параметр TopMost
имеет значение true
, то компонент
перемещается в начало Z-последовательности, иначе — в конец.Show
предназначен для того, чтобы сделать видимым невидимый компонент. То есть
метод равносилен установке свойства Visible
данного компонента
в true
.Sort
предназначен для быстрой сортировки элементов списка типа TList
.StretchDraw
применяется для рисования графического изображения, содержащегося в компоненте,
указанным параметром Graphic
в прямоугольную область канвы, заданную
параметром Rect
, путем растягивания или сжимания изображения
под размер данной области. Например, нижеприведенный код уменьшает изображение,
находящееся в компоненте Image2
и имеющее размер больше чем 20x20
точек, до размера 20x20 точек и помещает его в компонент Image1:Image1,Canvas.StretchDraw ( Rect (0,0,19,19), Image2.Picture.Bitmap)
;
TextExtent
применяется для получения и длины, и ширины текста Text
, который
предполагается вывести на канву данного компонента, используя текущий шрифт.
Возвращаемое методом значение имеет тип TSize
.TextHeight
возвращает значение, равное высоте текста Text
, который предполагается
вывести на канву с использованием текущего шрифта.TextOut
предназначен для вывода строки текста, задаваемой параметром Text
,
на канву в позицию с координатами (X, Y). Например:Image1.Canvas.TextOut (10, 100, 'Мне нравится Kylix');
выведет строку 'Mне нравится Kylix
' на канву компонента
Image1
, начиная с координаты (10, 100).TextRect
похож на метод TextOut
за исключением того, что текст, выходящий
за границы определенной прямоугольной области, урезается.TextWidth
предназначен для определения в пикселах длины текста Text,
который
предполагается вывести на канву компонента текущим шрифтом.TryLock
блокирует канву компонента, не позволяя другим потокам многопоточного приложения
рисовать на ней. Данный метод возвращает значение true
и устанавливает
свойство LockCount
в единицу, если канва не была ранее блокирована.
Если канва была ранее блокирована, метод возвращает false
и не
увеличивает значение свойства LockCount
.Unlock
предназначен для разблокирования канвы компонента. Каждый вызов метода Unlock
уменьшает значение свойства LockCount
на единицу.Update
предназначен для немедленной перерисовки компонента, без ожидания завершения
каких-либо других процессов.Поля
Поле (Field) компонента
или класса - это данные, находящиеся в компоненте или классе. Можно представить
поле в виде переменной, которая описывается внутри компонента или класса. Например:
type
TMyComponent = class private
FMyField1: char; FMyField2: real; FMyField3: string; FMyField4: boolean; end;
На приведенном выше примере,
внутри описания компонента TmyComponent
,описываются
четыре поля FMyField1, FMyField2, FMyField3
и FMyField4
,
имеющие различный тип. Поля могут быть тех же типов, что и обычные переменные.
Примечание
При создании наследников компонента (класса) они будут наследовать все поля от своего класса предка. Например, на приведенном выше примере компонентTMyComponent
будет содержать все поля своего предка — базового классаTObject ,
и дополнительные четыре поля, описанные выше. Заметим, что удалить или переопределить поля, перешедшие от класса-предка, невозможно, поэтому чем больше предков имеет компонент или класс, тем больше он имеет полей.
События
Любая программа, написанная
в среде Kylix, постоянно обрабатывает какие-либо события. Событием может быть
движение мышкой, нажатие клавиши на клавиатуре или на мышке, закрытие окна и
т. д. Программисту остается лишь перехватывать эти события и писать методы,
которые будут выполняться при генерации какого-либо события.
Событие (event)
— это механизм, который связывает какое-либо системное происшествие с конкретным
кодом, называемым обработчиком события (event handler).
Рассмотрим простой случай,
когда происходит системное событие нажатия кнопкой мыши на форме. С точки зрения
программиста, событие — это всего лишь имя, связанное с системным событием,
в нашем случае — OnClick
, которое связано с обработчиком события.
Например, кнопка Button1
имеет метод OnClick
. По умолчанию
Kylix генерирует обработчик события — метод Button1Click
, связанный
с событием OnClick
. Программист должен добавить код, который выполняется
при нажатии на кнопку Button1
внутри метода Button1Click
.
Итак, для наглядного представления
процесса обработки рассмотрим про-стуш схему (рис. 8.16).
Рис.
8.16. Схема обработки события
Рассмотрим основные события,
которые может обрабатывать компилятор Kylix. Для начала перечислим эти события:
OnChange
OnClick
OnDblClick
OnDragDrop
OnDragOver
OnKeyPress
OnKeyUp
OnMouseDown
OnMouseMove
OnPain
OnEndDrag
OnEnter
OnExit
OnKeyDown
OnProgress
OnStartDrag
OnMouseUp
Рассмотрим каждое событие
более подробно.
OnChange
наступает после изменения какого-либо графического объекта. Создавайте обработчик
такого события для выполнения каких-либо операций, происходящих, после изменения
графического объекта.OnClick
какого-либо компонента наступает в случае, если пользователь нажал и отпустил
левую кнопку мыши в тот момент, когда указатель мыши находился на компоненте.
Кроме того, событие OnClick
происходит в следующих случаях:• при выборе пользователем
путем нажатия клавиш управления курсором элемента в сетке (Grid
),
дереве (Trее
), списке (List
) или выпадающем списке
(DropDown List
);
• при нажатии пользователем
клавиши < Пробел> или <Enter> в тот момент, когда компонент
(например, кнопка) был в фокусе (Component.
Focused = True
);
• при нажатии пользователем
клавиши <Enter> в случае, если активная форма имеет кнопку по умолчанию;
• при нажатии пользователем
клавиши <Esc> в случае, если активная форма имеет кнопку прерывания;
• при нажатии пользователем
комбинации клавиш быстрого доступа ("горячих" клавиш) для доступа
к кнопке или пункту меню. Например, в свойстве Caption
кнопки
формы записано &Пуск
, при этом надпись на кнопке имеет
вид Пуск. В этом случае, если пользователь нажимает комбинацию клавиш
<Alt>+<П>, происходит событие OnClick
;
• при установке приложением
свойства Сhecked
переключателя RadioButton
в true
;
• при изменении приложением
свойства Checked
индикатора CheckBox
;
• при вызове метода
Click
элемента меню приложения.
OnClick
возникает для формы в том случае, когда пользователь щелкнул на любом месте
формы, незанятом компонентами.OnDblClick
наступает тогда, когда пользователь дважды щелкнул левой кнопкой мыши на компоненте,
причем отпустил кнопку мыши после второго щелчка над компонентом. Примечаниe
К одному и тому
же компоненту нельзя написать обработчики событий OnClick
и
OnDblClick
, поскольку первый из них всегда перехватит первый
из щелчков.
OnStartDrag
наступает, когда пользователь начинает перетаскивать компонент, т. е. нажал
над компонентом левую кнопку мыши и, не отпуская ее, начал смещать курсор
мыши. Событие имеет параметр Sender
, который содержит наименование
перетаскиваемого компонента, или объекта перетаскивания (в случае, если компонент
является компонентом контейнерного типа).OnDragDrop
компонента наступает, когда пользователь отпускает перетаскиваемый компонент
над другим компонентом. В обработчике события нужно описать, что должно происходить
в момент отпускания перетаскиваемого компонента. При этом параметр Source
должен соответствовать перетаскиваемому компоненту, а параметр sender должен
соответствовать компоненту, над которым компонент будет отпущен. Кроме того,
два параметра (X и Y) служат для хранения координат курсора мыши над компонентом.
Система координат в данном случае соответствует клиентской части компонента.OnDragOver
компонента наступает, когда перетаскиваемый компонент пересекает границу
данного компонента и оказывается над ним. Это событие возникает все время,
пока пользователь перемещает компонент над компонентом-приемником. Как только
пользователь отпускает компонент (отпускает левую кнопку мыши), происходит
событие OnDragDrop
, описанное выше. Для того чтобы определить,
компоненты какого типа принимает данный компонент, используют параметр Accept
.
Если компонент может принимать любые компоненты, можно оставить обработчик
OnDragOver
пустым, но он обязательно должен присутствовать. Например:procedure TForm1.ListBox2DragOver(Sender, Source: TOtrject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin
// Данный комментарий нужен, чтобы компилятор не удалил этот пустой // обработчик end;
Во время перетаскивания
компонента форма указателя мыши может изменяться. Для установки этого свойства
служит свойство DragCursor
компонента, на который будет переноситься
другой компонент.
Приведем простой пример
использования событий OnDragDrop
и OnDragOver
.
Для наглядного применения
события OnDragDrop
создадим приложение, которое позволит пользователю
перетаскивать строки одного списка в другой. Итак, расположим на форме два списка
ListBox; ListBox1
и ListBox2
. Добавим строки в первый
список путем редактирования его свойства Items
. Назовем строки
Cтрока 1 Cтрока 10
(рис. 8.17).
Для простоты будем перетаскивать
строки из первого списка во второй. Поменяем значение свойства DragMode
списка ListBox1
на dmAutomatic
, что обеспечит
автоматическое начало перетаскивания. Теперь для второго списка (ListBox2
)
напишем обработчик события OnDragOver
(листинг 8.2).
Рис.
8.17. Пример применения событий OnDragDrop
и OnDragOver
Листинг 8.2.Обработка
события OnDragOver
procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin
Accept := Source is TListBox; end;
В данном обработчике мы
указываем, что на компонент ListBox2
можно перетаскивать компоненты
типа TListBox
. Затем в обработчике события OnDragDrop
запишем следующий код (листинг 8.3).
Листинг 8.3. Код обработки
OnDragOver
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);begin
ListBox2. Items .Add (ListBox1. Items[ListBox1. ItemIndex]); end;
Таким образом, мы добавляем
выбранную строку компонента ListBox1
в компонент ListBox2
.
Все! Можно запускать приложение
при помощи клавиши <F9>. Попробуйте перетащить любую строку из первого
списка, во второй.
OnEndDrag
— последнее из событий, которые предназначены для обработки переноса одного
компонента на другой. Оно наступает при любом окончании процесса переноса,
как успешного, так и неудачного (когда компонент отпущен над формой или компонентом,
неспособными его принять). Данное событие наступает в перетаскиваемом компоненте.
Это событие может применяться для реакции приложения на перетаскивание (например,
"выполнено успешно" или "неудача"). В обработчике этого
события параметр Sender
— это сам объект перетаскивания, а параметр
Target
принимает значение компонента-приемника (при успешном
перетаскивании) или значение nil
— при неудачном переносе. Приведем
пример (листинг 8.4). Листинг 8.4.Oбработчик
события OnEndDrag
procedure TForm1.Component1EndDrag (Sender,
Target: TObject; X, Y: Integer); begin
If Target = Nil then ShowMessage ('Перенесение объекта '+
(Sender as TControl).Name + ' завершалось неудачно') else
ShowMessage((Sender as TControl).Name + ' перенесен в '
+
(Target as TControl).Name); end;
Добавим код, записанный
в листинге 8.3, в вышеописанное приложение. При этом код нужно поместить в обработчике
события OnEndDrag
для первого списка (ListBox1
). В
результате, при каждом успешном перетаскивании строки из первого списка во второй
будет выдаваться окно-сообщение (рис. 8.18), а при неудачном — окно-сообщение,
изображенное на рис, 8.19.
OnEnter
наступает, когда компонент получает фокус. Данное событие не наступает при
переключении между разными формами приложения или между различными приложениями.
При переключении между компонентами контейнерного типа (т. е. между компонентами,
которые могут размещать на себе другие компоненты, например панели) событие
OnEnter
наступает сначала для компонента контейнерного типа,
а затем — для содержащегося в нем компонента. Рис.
8.18. Окно, выдаваемое при успешном перетаскивании строки
из ListBox1
в ListBox2
Рис.
8.19. Окно, выдаваемое при неудачном перетаскивании строки
из ListBox1
в ListBox2
OnExit
является противоположным по отношению к ОnEnter.
Событие
наступает в момент, когда компонент теряет фокус, т. е. когда фокус переходит
к другому компоненту. Это событие также не наступает при переключении между
разными формами или приложениями. В отличие от события OnEnter
,
событие OnExit
наступает сначала для компонента, содержащегося
в компоненте-контейнере, а затем — для самого компонента контейнерного типа. Приведем пример, иллюстрирующий
события OnEnter
и OnExit
. Расположим на форме кнопку
Button1
и группу переключателей RadioGroup1
(рис. 8.20).
Добавим в группу переключателей несколько строк (путем редактирования свойства
Items
).
Рис.
8.20. Пример, иллюстрирующий работу событий OnEnter
и OnExit
Запустим приложение. Фокус
при запуске будет передан компоненту, который был размещен на форме первым (в
нашем случае это кнопка Button1
).
Если теперь выбрать щелчком
мыши любой переключатель группы переключателей, то произойдет следующее:
OnExit
;RadioGroup1
наступит событие OnEnter
;OnEnter
. Если после этого выбрать
щелчком мыши кнопку Button1
, то события произойдут в следующем
порядке:
OnExit
;OnExit ;
Button1
наступит событие OnEnter
.
OnKeyDown
наступает, когда пользователь нажимает любую клавишу. Данное событие происходит
для компонента, имеющего фокус в момент нажатия кнопки. С помощью данного
события можно обрабатывать все клавиши, включая <Shift>, <Alt>
и <Ctrl>. В процедуру-обработчик передаются, кроме параметра Sender
,
такие параметры, как Key
и Shift.
Параметр Key
определяет нажатую клавишу. В случае, если нажата не алфавитно-цифровая клавиша,
в параметр передается виртуальный код клавиши. Приведем таблицу кодов клавиш
(табл. 8.19). Таблица
8.19. Коды клавиш
Символическое
имя клавиши |
Название клавиши |
Символическое
имя клавиши |
Название клавиши |
|
<Esc> |
|
<.> |
Key_ Tab |
<Tab> |
|
</> |
|
<Shift>+<Tab> |
|
<0> |
|
<Backspace> |
|
<1> |
|
<Return> |
|
<2> |
|
<Enter> |
|
<3> |
|
<Insert> |
|
<4> |
|
<Delete> |
|
<5> |
|
<Pause> |
|
<6> |
|
<PrintScreen> |
|
<7> |
|
<SysRq> |
|
<8> |
Таблица
8.19 (продолжение)
Символическое
имя клавиши |
Название клавиши |
Символическое
имя клавиши |
Название клавиши |
|
<Home> |
|
<9> |
|
<End> |
|
<:> |
|
<стрелка влево> |
|
<;> |
|
<стрелка вверх> |
|
<меньше> |
|
<стрелка вправо> |
|
<=> |
|
<стрелка вниз> |
|
<6ольше> |
|
<PageUp> |
|
<?> |
|
<PageDown> |
|
<@> |
|
<Shift> |
|
<[> |
|
<Ctrt> |
|
<\> |
|
<Alt> |
|
<]> |
Key
_CapsLock |
<Caps
Lock> |
Key_AnsiiCircum |
<^> |
|
<NumLock> |
|
< > |
|
<Scroll Lock> |
Key_BraceLeft |
<{> |
|
<F1> |
|
<|> |
|
<F2> |
|
<}> |
|
<F3> |
|
<~> |
|
<F4> |
|
<параграф> |
|
<F5> |
|
Неизвестная клавиша |
|
<F6> |
|
<А> |
|
<F7> |
|
<В> |
|
<F8> |
|
<С> |
|
<F9> |
|
<D> |
|
<F10> |
|
<F> |
|
<F11> |
|
<G> |
|
<F12> |
|
<l> |
|
<пробел> |
|
<J> |
Таблица
8.19 (окончание)
Символическое
имя клавиши |
Название клавиши |
Символическое
имя клавиши |
Название клавиши |
|
<!> |
|
<K>
|
Key_NumberSign |
<#> | Key_L |
<L> |
|
<$> |
|
<М> |
|
<%> |
|
<N> |
|
<&> |
|
<0> |
|
<'> |
|
<Р> |
|
<*> |
|
<Q> |
|
<+> |
|
<R> |
|
<,> |
... |
|
|
<-> |
|
<Z> |
Параметр Shift
является множеством, которое может быть пустым или может содержать следующие
элементы:
ssShift
— при нажатой клавише <Shift>;ssAlt
—
при нажатой клавише <Alt>;ssCtrl
— при нажатой клавише <Ctrl>. Приведем пример использования
события OnKeyDown
. Предположим, что нам необходимо распознать,
когда пользователь нажмет комбинацию клавиш <Ctrl>+<Shift>+<L>.
В обработчике события OnKeyDown
напишем следующий код:
if ( (Key = ord ('L') ) and (ssShift in Shift) and (ssCtrl in Shift) )
then ShowMessage ('Нажата комбинация клавиш <Ctrl>+<Shift>+<L>');
В
вышеприведенном примере мы использовали функцию ord
( ), которая
позволяет по символу клавиши получить код клавиши (в нашем случае, код клавиши
<L>). Теперь всякий раз, когда фокус будет у компонента, к которому привязан
данный обработчик, и как только пользователь нажмет комбинацию клавиш <Ctrl>+<Shift>+<L>,
будет выводиться окно (рис. 8.21).
Рис.
8.21. Окно, появляющееся при обработке события OnKeyDown
OnKeyPress
наступает при нажатии пользователем символьной клавиши. Данное событие имеет
параметр Key
, который содержит символ нажатой, клавиши и имеет
тип Сhar
. При этом различаются символы верхнего и нижнего регистров,
а также раскладка клавиатуры. Примечание
С помощью данного
события невозможно обработать нажатие функциональных клавиш и клавиш <Shift>,
<Ctrl> или <Alt>. Таким образом, когда вы нажмете комбинацию
клавиш <Shift>+<b>, в параметр Key
события OnKeyPress
поступит значение "В" — клавиша <Shift> только поменяет
регистр символа. При нажатии комбинации клавиш <Аlt>>+<любая
символьная клавиша> событие OnKeyPress
не наступает. При
нажатой комбинации клавиш <СtrlМ>+<любая символьная клавиша>
событие OnKeyPress
наступает, но в параметр Key
ничего не передается.
ОnKеyUр
наступает при отпускании пользователем любой ранее нажатой клавиши. Данное
событие позволяет обрабатывать все клавиши, как и событие OnKeyDown
.
По своим параметрам и поведению событие OnKeyUp
равносильно событию
OnKeyDown
.OnMouseDown
наступает при нажатии пользователем любой кнопки мыши в тот момент, когда
указатель мыши находится над компонентом. Данное событие имеет параметры Button,
Shift,
X
и Y
. Параметр Button
определяет, какая кнопка мыши нажата:mbLeft
—
левая кнопка;mbMiddle
— средняя кнопка;mbRight
— правая кнопка. Shift
равносилен параметру Shift
для событий, связанных с обработкой
клавиатуры. Таким образом, можно обрабатывать нажатие любой кнопки мыши одновременно
с клавишами <Shift>, <Ctrl> или <Alt>.X
и Y
содержат координаты указателя мыши в области компонента.OnMouseUp
наступает, когда пользователь отпускает любую кнопку мыши над компонентом.
По своим функциям и параметрам данное событие аналогично событию OnMouseDown
. OnMouseMove
наступает при перемещении указателя мыши над компонентом. Данное событие возникает
независимо от того, нажаты какие-либо кнопки мыши или нет. Примечание
При нажатой левой
кнопке мыши данное событие не возникает. Эта особенность почему-то не документирована.
Shift,
X
и Y
, аналогичные
вышеописанным.OnPaint
наступает, когда приложение получает сообщение о необходимости перерисовки
испорченного изображения. Изображение может испортиться от перекрытия окон
одного или нескольких приложений. В обработчике данного события программист
должен разместить процедуру, выполняющую перерисовку изображения. Например,
если на форме был размещен рисунок, хранящийся в компоненте BitMap
,
можно для перерисовки изображения использовать следующий обработчик события
OnPaint
:Canvas.Draw
(0, 0, BitMap )
;OnProgress
наступает при прохождении медленных процессов, связанных с изменением графического
изображения. Данное событие позволяет строить индикаторы хода выполнения процесса.
Событие OnProgress
имеет следующие параметры: Stage, PercentDone, RedrawNow
,R
и Msg
. Параметр Stage
предназначен для указания
стадии прогресса (начало, продолжение, окончание) и может принимать значения
psStarting
(начало), psRunning
(продолжение), psEnding
(окончание). Параметр PercentDone
показывает, какая часть процесса
выполнена. Параметр RedrawNow
показывает, может ли в настоящий
момент изображение успешно отобразиться на экране. Параметр R
служит для указания области изображения, которая изменена и требует перерисовки.
Наконец, параметр Msg
служит для отображения сообщений о ходе
процесса. Этот параметр имеет строковый тип. Параметр Msg
может
быть пустым.