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

Давайте рассмотрим свойства, события и методы основных компонентов Kylix. Это необходимо для использования всех возможностей, предоставляемых средой Kylix. Более того, когда вы будете создавать собственные компоненты, знание основных компонентов очень вам пригодится (можно создавать компоненты на основе уже имеющихся в Kylix).

Типы свойств

Следует отметить, что к свойствам применимы те же правила, которые используются для описания типов в Object Pascal. Типы свойств компонента нужны в первую очередь для отображения и редактирования его в окне инспектора объектов. Перечислим основные типы свойств компонентов Kylix (табл. 8.12).

Таблица 8.12. Типы свойств компонентов Kylix

Тип свойства

Отображение свойств в окне инспектора объектов

Простой (Simple)

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

Перечисляемый
(Enumerated)

Свойства перечисляемых типов (включая булевы) отображаются в инспекторе объектов как редактируемые строки. Разработчик может, кроме непосредственного ввода значения свойства, переключать допустимые значения свойства двойным щелчком кнопки мыши в поле значения свойства инспектора объектов либо выбрать допустимое значение из выпадающего списка

Таблица 8.12 (окончание)

Тип свойства

Отображение свойств в окне инспектора объектов

Множество (Set)

Свойства типа "множество" отображаются в инспекторе объектов как множества. При помощи двойного щелчка мыши на значении свойства разработчик может расширить множество и установить каждому элементу множества булево значение (True, если данный элемент входит в множество)

Объект (Object)

Свойства такого типа часто имеют собственный редактор свойств. Свойства типа "объект" должны быть потомками класса Tpersistent

Массив (Array)

Свойства типа "массив" должны иметь собственный редактор свойств. Инспектор объектов Kylix не поддерживает редактирование свойств данного типа. Разработчик должен при регистрации компонента определить редактор свойств

Свойства основных компонентов Kylix

Рассмотрим свойства, которые имеют стандартные компоненты Kylix. Для начала — основные свойства, которые присущи компонентам — наследникам класса TControl. Кроме краткого описания свойства, мы будем приводить строку кода, описывающего данное свойство внутри класса TControl.

Это поможет вам понять, какой тип имеет данное свойство.

Перечислим возможные значения данного свойства:

alNone — компонент остается на том месте, где он был размещен во время разработки приложения. Данное значение присваивается свойству Align по умолчанию;

alTop — компонент занимает всю верхнюю часть компонента-контейнера. Во время выполнения приложения ширина компонента зависит от ширины компонента-контейнера. Высота компонента остается неизменной, независимо от высоты контейнера;

alBottom - аналогичен alTop, за исключением того, что компонент занимает всю нижнюю часть компонента-контейнера;

alLeft — компонент занимает всю левую часть компонента-контейнера. Во время выполнения приложения высота компонента зависит от высоты компонента-контейнера. При изменении ширины компонента-контейнера ширина компонента остается неизменной;

alRight — аналогичен alLeft, за исключением того, что компонент занимает всю правую часть компонента-контейнера;

alClient — компонент занимает всю клиентскую часть компонента-контейнера. При изменении высоты и ширины компонента-контейнера изменяются высота и ширина компонента. Если в клиентской части компонента контейнерного типа уже имеются другие компоненты, то данный компонент занимает всю оставшуюся незанятой часть компонента-контейнера.

Примечание

Значения alTop и alBottom имеют больший приоритет по сравнению со значениями alLeft и alRight. Таким образом, если вы вывели на форму два компонента, присвоив свойству Align одного из них значение alTop, а другому — alRight, то первый компонент вытеснит верхнюю часть второго компонента (рис. 8.12).

8-02-1.jpg

Рис. 8.12. Применение свойства Align

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

Таким образом, запись

R := Control.BoundsRect;

эквивалентна записи

R.Top := Control.Top;

R.Left := Control.Left;

R.Right :- Control.Left + Control.Width;

R.Bottom := Control.Top + Control.Height;

Началом координат считается левый верхний угол окна, содержащего данный компонент.

По умолчанию свойство устанавливается таким же, как имя компонента (свойство Name). Для пунктов меню и кнопок с помощью этого свойства можно задать кнопку быстрого вызова, для чего перед символом кнопки быстрого вызова ставится символ амперсанда (&). Например, для быстрого вызова меню Файл перед буквой "Ф" в свойстве Caption данного пункта меню можно поставить знак амперсанда: &Файл. При этом буква "Ф" в пункте меню станет подчеркнутой. Теперь для вызова данного пункта меню пользователю будет достаточно воспользоваться комбина-цией клавиш <Alt>+<Ф>. Для того чтобы отобразить в заголовке символ &, вы можете использовать такую запись: &&.

Вместо вызова данного свойства можно воспользоваться свойствами Rect,

ClientWidth и ClientHeight (они описаны ниже):

Rect (0, 0, ClientWidth, ClientHeight)

Таблица 8.13. Константы цвета в среде Kylix

Константа

Цвет

clNone

Бесцветный (белый)

clBlack

Черный

clMaroon

Темно-бордовый

clGreen

Зеленый

clOlive

Оливковый

clNavy

Темно-синий

clPurple

Пурпурный

clTeal

Морской

clGray

Серый

clSilver

Серебристый

clRed

Красный

clLime

Лимонный

clBlue

 

Синий

clYellow

Желтый

clFuchsia

Сиреневый

сlAqua

Голубой

clLtGray

Светло-серый

clDkGray

Темно-серый

clWhite

Белый

clBackground

Базовый цвет фона

clNormalBackground

Цвет фона для включенных неактивных компонентов

dBase

Базовый цвет фона для текстовых компонентов

clNormalBase

Цвет фона для включенных неактивных текстовых компонентов

clDisabledBase

Цвет фона для отключенных текстовых компонентов

Таблица 8.13 (продолжение)

Константа

Цвет

clActiveBase

Цвет фона для активных текстовых компонентов

clScrollBar

Цвет полос прокрутки

clActiveCaption

Цвет фона полосы заголовка активного окна

clInactiveCaption

Цвет фона полосы заголовка неактивного окна

clMenu

Цвет фона меню

clWindow

Цвет фона окна

clWindowFrame

Цвет рамки окна

clMenuText

Цвет текста меню

clWindowText

Цвет текста окна

clCaptionText

Цвет текста заголовка в активном окне

clActiveBorder

Цвет бордюра активного окна

clInactiveBorder

Цвет бордюра неактивного окна

clAppWorkSpace

Цвет рабочей области приложения

clHighlight

Базовый цвет фона для выбранного или подсвеченного компонента

clNormalHighlight

Цвет фона для включенных неактивных подсвеченных компонентов

clDisabledHighlight

Цвет фона для отключенных подсвеченных компонентов

clActiveHighlight

Цвет фона для активных подсвеченных компонентов

clHighlightedText

Базовый цвет букв подсвеченного текста

clNormalHighlightedText

Цвет букв включенных неактивных подсвеченных компонентов

clDisabledHighlightedText

Цвет букв отключенных подсвеченных компонентов

clActiveHighlightedText

Цвет букв отключенных подсвеченных компонентов

clBtnFace

Цвет поверхности кнопки

clBtnShadow

Цвет тени, отбрасываемой кнопкой

clGrayText

Цвет текста недоступных элементов окна

clBtnText

Цвет текста кнопки

clInactiveCaptionText

Цвет заголовка в неактивном окне

Таблица 8.13 (продолжение)

Константа

Цвет

clBtnHighlight

Цвет выделенной кнопки

cl3DDkShadow

Цвет темных теней трехмерных элементов окна

cl3DLight

Светлый цвет на краях трехмерных элементов окна

clInfoText

Цвет текста советов (всплывающих подсказок)

clInfoBk

Цвет фона советов (всплывающих подсказок) — обычно светло-коричневый

clHighlightText

Подсвеченный текст

clForeground

Базовый цвет линий или текста

clNormalForeground

Цвет линий или текста для включенных неактивных компонентов

clDisabledForeground

Цвет линий или текста для отключенных компонентов

clActiveForeground

Цвет линий или текста для активных компонентов

clText

Базовый цвет букв

clNormalText

Цвет букв для включенных неактивных текстовых компонентов

clDisabledText

Цвет букв для отключенных текстовых компонентов

clActiveText

Цвет букв для активных текстовых компонентов

clButton

Базовый цвет фона кнопок

clNormalButton

Цвет фона включенных неактивных кнопок

clDisabledButton

Цвет фона отключенных кнопок

clActiveButton

Цвет фона активных кнопок

clButtonText

Базовый цвет букв кнопок

clNormalButtonText

Цвет букв включенных неактивных кнопок

clDisabledButtonText

Цвет букв отключенных кнопок

clActiveButtonText

Цвет букв активных кнопок

clBrightText

Базовый контрастный цвет букв

clNormalBrightText

Контрастный цвет букв включенных неактивных компонентов

clDisabledBrightText

Контрастный цвет букв отключенных компонентов

clActiveBrightText

Контрастный цвет букв активных компонентов,

clLight

Базовый цвет для светлых областей в 3D-эффектах

clNormalLight

Цвет светлых областей в 3D-эффектах для включенных неактивных компонентов

clDisabledLight

Цвет светлых областей в 3D-эффектах для отключенных компонентов

Таблица 8.13 (окончание)

Константа

Цвет

clActiveLight

Цвет светлых областей в 3D-эффектах для активных компонентов

clMidlight

Базовый цвет для среднеосвещенных областей в 3D-эффектах

clNormalMidlight

Цвет среднеосвещенных областей в 3D-эффектах для включенных неактивных компонентов

clDisabledMidlight

Цвет среднеосвещенных областей в 3D-эффектах для отключенных компонентов

clActiveMidlight

Цвет среднеосвещенных областей в 3D-эффектах для активных компонентов

clMid

Базовый цвет для темных областей в 3D-эффектах

clNormalMid

Цвет темных областей в 3D-эффектах для включенных неактивных компонентов

clDisabledMid

Цвет темных областей в 3D-эффектах для отключенных компонентов

clActiveMid

Цвет темных областей в 3D-эффектах для активных компонентов

clDark

Базовый цвет для очень темных областей в 3D-эффектах

clNormalDark

Цвет очень темных областей в 3D-эффектах для включенных неактивных компонентов

clDisabledDark

Цвет очень темных областей в 3D-эффектах для отключенных компонентов

clActiveDark

Цвет очень темных областей в 3D-эффектах для активных компонентов

clShadow

Базовый цвет тени в 3D-эффектах

clNormalShadow

Цвет тени в 3D-эффектах для включенных неактивных компонентов

ClDisabledShadow

Цвет тени в 3D-эффектах для отключенных компонентов

clActiveShadow

Цвет тени в 3D-эффектах для активных компонентов

Данные константы цвета, начиная с clBackground, определяются той цветовой схемой Х-Windows, которая установлена пользователей на конкретном компьютере. Эти цвета рекомендуется использовать при разработке приложений для передачи третьим лицам.

Рассмотрим пример применения данных свойств.Предположим, что на форме имеется несколько компонентов. Задача — сместить все компоненты, которые присутствуют на форме, кроме компонента 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;

Значение свойства ControlState состоит из набора флагов, обозначения которых приведены в табл. 8.14.

Таблица 8.14. Флаги значения свойства ControlState

Флаг

Значение

csLButtonDown

Левая кнопка мыши нажата

csClicked

То же, что и csLButtonDown, но устанавливается только в случае, если в свойстве ControlStyle также установлен флаг csClickEvents

csPalette

Палитра изменена, и элемент управления не закончил регулировку этой палитры

Таблица 8.14 (окончание)

Флаг

Значение

csReadingState

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

csAlignmentNeeded

Элемент управления нуждается в перестроении

csFocusing

Приложение обрабатывает сообщения, предназначенные для передами фокуса элементу управления. Данный флаг не гарантирует, что элемент управления получит фокус, но предотвращает рекурсивные вызовы

csCfeating

Элемент управления и (или), его владелец начинают создаваться. Данный флаг сбрасывается после завершения процесса создания

csPaintCopy

Элемент управления начинает копирование (собственное)

csCustomPaint

Элемент управления обрабатывает выбранные сообщения о закрашивании

csDestroyingHandle

Окно элемента управления находится в процессе уничтожения

csDocking

Элемент управления начинает устанавливаться

csRecreating

Основное окно Qt начинает создаваться

esWidgetPainting

Основное окно Qt в процессе перерисовки

Значение данного свойства также состоит из флагов (табл. 8.15).

Таблица 8.15. Флаги значения свойства ControlStyle

Флаг

Значение

CsAcceptsControls

Элемент управления получает своего предка от одного из компонентов, созданных во время разработки приложения

CsCaptureMouse

Элемент управления перехватывает событие нажатия кнопки мыши

CsDesignlnteractive

Элемент управления преобразует щелчки правой кнопкой мыши во время разработки приложения в щелчки левой Кнопкой мыши

Таблица 8.15 (окончание)

Флаг ,

Значение

CsClickEvents

Элемент управления может принимать и обрабатывать щелчки мыши

CsFramed

Элемент управления имеет вид трехмерной рамки

CsSetCaption

Значение свойства Caption элемента управления должно соответствовать значению свойства Name этого же элемента управления, если оно не было явно установлено в какое-то другое значение

СsOpaque

Элемент управления полностью занимает клиентскую прямоугольную область

CsDoubleClick

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

CsFixedWidth

Ширина элемента управления не может быть изменена

CsFixedHeight

Длина элемента управления не может быть изменена

CsNoDesignVisible

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

CsReplicatable

Элемент управления может быть скопирован с помощью метода PaintTo

CsNoStdEvents

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

CsDisplayDragImage

Элемент управления может содержать изображение из списка изображений

CsActionClients

Элемент управления привязан к объекту типа TBasicAction. Этот флаг устанавливается, если у элемента управления используется свойство Action, и сбрасывается в противном случае

CsMenuEvents

Элемент управления реагирует на команды системного меню

В свою очередь, тип TCursor описан так:

type TCursor = -32768 .. 32768;

Kylix имеет встроенные виды указателей. Кроме встроенных, разработчик может помещать в приложение собственные виды указателя мыши. В табл. 8.16 приводятся встроенные типы указателей мыши.

Таблица 8.16. Указатели мыши

Значение свойства
Cursor

Числовое значение

Изображение указателя мыши

CrDefault

0

Указатель, принятый по умолчанию. Обычно
это сrArrow

CrNone

-1

Без изображения указателя

CrArrow

-2

Стрелка

CrCross

-3

Крест

CrIBeam

-4

Указатель в виде курсора для ввода текста

CrSize

-22

Указатель изменения размера окна

CrSizeNESW

-6

Указатель изменения размера окна в правом верхнем углу или в левом нижнем

CrSizeNS

-7

Указатель изменения размера окна вверху или внизу (по вертикали)

CrSizeNWSE

-8

Указатель изменения размера окна в левом верхнем углу или в правом нижнем

CrSizeWE

-9

Указатель изменения размера окна слева или справа (по горизонтали)

CrUpArrow

-10

Стрелка вверх

CrHourGlass

-11

Песочные часы

CrDrag

-12

Перетаскивание компонента

CrNoDrop

-13

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

CrHSplit

-14

Горизонтальный сплиттер

CrVSplit

-15

Вертикальный сплиттер

CrMultiDrag

-16

Перетаскивание нескольких компонентов

CrSQLWait

-17

Ожидание выполнения SQL-запроса

CrNo

-18

Указатель, показывающий невозможность действия

CrAppStart

-19

Ожидание старта приложения (стрелка с песочными часами)

CrHelp

-20

Стрелка с вопросом

CrHandPoint

-21

Указатель в форме руки

Ecли вы хотите, чтобы компонент унаследовал значения цвета от своего предка, то установите данное свойство в true. Если это свойство будет иметь значение False, компонент будет использовать цвета, заданные в его собственных свойствах.

Тип TScalingFlags представляет собой набор флагов, которые описаны в табл. 8.17.

Таблица 8.17. Флаги TScalingFlag

Флаг

Значение

sfLeft

Левая сторона элемента управления не может масштабироваться

sfTop

Верх элемента управления не может масштабироваться

sf Width

Ширина элемента управления не может масштабироваться

sfHeight

Высота элемента управления не может масштабироваться

sfFont

Шрифт элемента управления не может масштабироваться

Если свойство имеет значение true, то компонент будет виден, иначе — невидим.

Рассмотрим теперь свойства, характерные для класса TWidgetControl и его наследников.

Данное свойство применяется только для чтения. Для добавления или удаления дочерних элементов управления используйте соответствующие методы InsertControl и Remove Control.

Стоит сказать несколько слов о типе TInputKeys. Этот тип представляет собой перечисляемый тип, значения которого показаны в табл. 8.18.

Таблицa 8.18. Значения типа TInputKeys

Значение

Описание

ikAll

Ввод любых символов клавиатуры

ikArrows

Клавиши со стрелками (<влево>, <вправо>, <вверх>, <вниз>)

ikChars

Любые нефункциональные клавиши без <Ctrl> и <Alt>

ikReturns

Клавиша ввода (<Enter>)

ikTabs

Клавиша табуляции (<Таb>) и комбинация клавиш обратной табуляции (<Shtft>+<Tab>)

ikEdit

Клавиши редактирования (<Backspace>, <lnsert>, <Delete>)

ikNav

Клавиши навигации по тексту (<вверх>, <вниз>, <влево>, <вправо>, <Home>, <End>, <PageUp>, <PageDown>)

ikEsc

Клавиша <Esc>

Если значение данного свойства равно true, то при помощи клавиши <Таb> можно передать фокус этому компоненту, в зависимости от его свойства TabOrder. Если значение свойства TabStop равно false, то независимо от свойства TabOrder фокус будет невозможно передать при помощи клавиши <Таb>.

Методы

Методы — это процедуры или функции, принадлежащие объекту. Методы определяют поведение объекта. Для вызова метода объекта нужно указать объект, с которым ассоциирован данный метод, затем, через точку, — название метода. Например:

Button1.Click

Вызывается метод нажатием (Click) кнопки (Button1).

Для создания метода его нужно сначала объявить внутри описания класса или компонента, содержащего данный метод. Например:

type
   TMyComponent = class(TObject)
. . .
procedure DoSomething; . . .
end;

Здесь, внутри описания нового компонента, мы объявляем метод DoSomething с помощью служебного слова procedure. После того как мы объявили новый метод, необходимо создать тело данного метода. Эта процедура может находиться где угодно внутри модуля, в котором был описан компонент. Например:

procedure TMyComponent.DoSomething; 
begin
// Здесь размещаем команды и операторы, которые должны выполняться
// при вызове метода DoSomething на выполнение end;

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

(procedure TMyComponent.DoSomething;).

Рассмотрим основные методы среды Kylix.

8-02-2.jpg

Рис. 8.13. Координаты точек, задаваемых при вызове метода Arc

8-02-3.jpg

Рис. 8.14. Фигуры, получаемые после вызова метода Chord

Настоящий метод можно применять и к объекту Clipboard. Вызов метода Clear для буфера обмена удалит все содержимое буфера.

Листинг 8.1. Освобождение ресурсов графической подсистемы

// загрузка картинки в Bitmap1
Bitmap1. LoadFromFile ('mypicture.bmp') ;
//копирование в Bitmap2 из Bitmap1
Bitmap2.Assign (Bitmap1);
// применение метода Dormant и освобождение ресурсов графической подсистемы
Bitmap2.Dormant;

8-02-4.jpg

Рис. 8.15. Результат выполнения метода Pie

Поля

Поле (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-02-5.jpg

Рис. 8.16. Схема обработки события

Рассмотрим основные события, которые может обрабатывать компилятор Kylix. Для начала перечислим эти события:

Рассмотрим каждое событие более подробно.

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-02-6.jpg

Рис. 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>. Попробуйте перетащить любую строку из первого списка, во второй.

Листинг 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.

8-02-7.jpg

Рис. 8.18. Окно, выдаваемое при успешном перетаскивании строки из ListBox1 в ListBox2

8-02-8.jpg

Рис. 8.19. Окно, выдаваемое при неудачном перетаскивании строки из ListBox1 в ListBox2

Приведем пример, иллюстрирующий события OnEnter и OnExit. Расположим на форме кнопку Button1и группу переключателей RadioGroup1 (рис. 8.20). Добавим в группу переключателей несколько строк (путем редактирования свойства Items).

8-02-9.jpg

Рис. 8.20. Пример, иллюстрирующий работу событий OnEnter и OnExit

Запустим приложение. Фокус при запуске будет передан компоненту, который был размещен на форме первым (в нашем случае это кнопка Button1).

Если теперь выбрать щелчком мыши любой переключатель группы переключателей, то произойдет следующее:

Если после этого выбрать щелчком мыши кнопку Button1, то события произойдут в следующем порядке:

Таблица 8.19. Коды клавиш

Символическое имя клавиши

Название клавиши

Символическое имя клавиши

Название клавиши

Key_Escape

<Esc>

Key_Period

<.>

Key_ Tab

<Tab>

Key_ Slash

</>

Key_ Backtab,
Key_ BackTab

<Shift>+<Tab>

Key_0

<0>

Key_Backspace, Key_BackSpace

<Backspace>

Key_1

<1>

Key_Return

<Return>

Key_2

<2>

Key_Enter

<Enter>

Key_3

<3>

Key_Insert

<Insert>

Key_4

<4>

Key_Delete

<Delete>

Key_5

<5>

Key_ Pause

<Pause>

Key_6

<6>

Key_Print

<PrintScreen>

Key_7

<7>

Key_SysReq

<SysRq>

Key_8

<8>

Таблица 8.19 (продолжение)

Символическое имя клавиши

Название клавиши

Символическое имя клавиши

Название клавиши

Кeу_ Ноmе

<Home>

Кеу_9

<9>

Key_ End

<End>

Key_Colon

<:>

Key_Left

<стрелка влево>

Key_Semicolon

<;>

Key_Up

<стрелка вверх>

Key_Less

<меньше>

Key_Right

<стрелка вправо>

Key_Equal

<=>

Key_ Down

<стрелка вниз>

Key_Greater

<6ольше>

Key_PageUp

<PageUp>

Key_Question

<?>

Key_ PageDown

<PageDown>

Key_At

<@>

Key_Shift

<Shift>

Key_BracketLeft

<[>

Key_Control

<Ctrt>

Key_BackSlash

<\>

Key_Alt

<Alt>

Key_BracketRight

 

<]>

Key _CapsLock <Caps Lock>
Key_AnsiiCircum <^>

Key _NumLock

<NumLock>

Key_Underscore

< >

Key_ScrollLock

<Scroll Lock>

Key_BraceLeft

<{>

Key_F1

<F1>

Key_Bar

<|>

Key_F2

<F2>

Key_BraceRight

<}>

Key_F3

<F3>

Key_AsciiTilde

<~>

Key_F4

<F4>

Key_paragraph

<параграф>

Key_F5

<F5>

Key_unknown

Неизвестная клавиша

Key_F6

<F6>

Key_A

<А>

Key_F7

<F7>

Key_B

<В>

Key_F8

<F8>

Key_C

<С>

Key_F9

<F9>

Key_D

<D>

Key_F10

<F10>

Key_F

<F>

Key_F11

<F11>

Key_G

<G>

Key_F12

<F12>

Key_I

<l>

Key_Space

<пробел>

Key_J

<J>

 

Таблица 8.19 (окончание)

Символическое имя клавиши

Название клавиши

Символическое имя клавиши

Название клавиши

Key_Exclam

<!>

Кеy_К

<K>

Key_NumberSign <#> Key_L <L>

Key_Dollar

<$>

Кеy_М

<М>

Key _Percent

<%>

Key_N

<N>

Key_Ampersand

<&>

Кеy_O

<0>

Key_Apostrophe

<'>

Кеy_Р

<Р>

Key_Asterisk

<*>

Key_Q

<Q>

Key_ Plus

<+>

Key_R

<R>

Кеy_Соmmа

<,>

...


Key_Minus

<->

Key_Z

<Z>

Параметр Shift является множеством, которое может быть пустым или может содержать следующие элементы:

Приведем пример использования события 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-02-10.jpg

Рис. 8.21. Окно, появляющееся при обработке события OnKeyDown

Hosted by uCoz