и поля, определяют атрибуты объекта.
Свойства
Свойства так же, как и поля, определяют атрибуты объекта. Но в отличие от полей свойства реализуют механизм доступа для чтения или изменения данных в полях объекта.
Вернувшись к примеру со столом, можно сделать следующее сравнение: поле "количество ножек" объекта "стол" будет хранить целое число, обозначающее количество ножек, а свойство "ножки" объекта "стол "может изменять это значение. С помощью данного свойства можно задать "количество ножек" равным трем, четырем и т. д.
Свойства позволяют изменять атрибуты объекта, в том числе, и вычисляемыми значениями. Объявление свойства объекта должно содержать его имя и тип, а также, как минимум, одно объявление способа доступа к данному свойству (описания). Синтаксис объявления свойства объекта имеет вид:
property Имя свойства: тип описания;
имя свойства должно быть уникальным;
тип — определяет, значения какого типа могут быть записаны в данном свойстве;
описания — объявления способов доступа к данному свойству.
Каждое свойство объекта должно иметь, как минимум, одно обязательное объявление способа доступа к свойству. Имеется два обязательных описания доступа к свойству объекта: чтение (read) значения свойства и запись (write) значения свойства.
Синтаксис обязательных описаний read и write имеет следующий вид:
read поле илиметод
write поле или метод
где поле или метод — поле, из которого берется или в которое помещается значение свойства, или метод, который берет или помещает значение свойства компонента.
Несложно догадаться, что объявление read (читать) описывает поле или метод, предназначенные для чтения значения свойства, а объявление write (писать) описывает поле или метод, предназначенные для записи значения свойства компонента.
В листинге 5.1 приведен пример описания свойств объекта.
Свойства сгруппированные по категориям
Рисунок 6.6. Свойства, сгруппированные по категориям
Свойства события и методы компонентов
Свойства, события и методы компонентов
CLX представляет собой иерархию классов Kylix, написанных на языке Object Pascal. Все классы библиотеки имеют свои свойства, события и методы. Мы их подробно рассмотрим в следующей главе. Пока же дадим здесь общее описание.
Свойства компонентов позволяют управлять их внешним видом и поведением. Установка значений большинства свойств выполняется на этапе разработки приложения с помощью инспектора объектов (см. Рисунок 6.5). Значение практически всех свойств компонентов библиотеки CLX можно изменять в процессе выполнения программы.
Компоненты CLX могут генерировать и обрабатывать несколько десятков самых разнообразных событий. События всегда принадлежат определенному типу. Большинство событий имеет тип "уведомляющее" (то есть принадлежит типу TNotifyEvent). Данный тип описывается следующим образом:
type TNotifyEvent = procedure (Sender: TObject) of object;
Таким образом, события уведомляющего типа указывают на источник события. Источник события записывается в параметре Sender.
Напомним, что все события в Kylix делятся на:
пользовательские, или оконные (widget); системные (system),. Пользовательские (оконные) события — это события, которые происходят в результате каких-либо действий пользователя (движение мышью, нажатие кнопки и т. д.).
Системные события — это события, которые происходят внутри системы независимо от действий пользователя (тикание таймера и т. д.).
Компоненты библиотеки CLX так же, как и другие объекты, могут иметь (и имеют) методы. Методы позволяют получать доступ к свойствам компонентов, скрывать и отображать компоненты, а также выполнять другие операции (в том числе создание и уничтожение компонентов).
Свойства события и методы основных компонентов Kylix
Свойства, события и методы основных компонентов Kylix
Давайте рассмотрим свойства, события и методы основных компонентов Kylix. Это необходимо для использования всех возможностей, предоставляемых средой Kylix. Более того, когда вы будете создавать собственные компоненты, знание основных компонентов очень вам пригодится (можно создавать компоненты на основе уже имеющихся в Kylix).
Типы свойств
Следует отметить, что к свойствам применимы те же правила, которые используются для описания типов в Object Pascal. Типы свойств компонента нужны в первую очередь для отображения и редактирования его в окне инспектора объектов. Перечислим основные типы свойств компонентов Kylix (табл. 8.12).
Свойствомножество MyOptions в новом компоненте TMyButton
Рисунок 19.4. Свойство-множество MyOptions в новом компоненте TMyButton
Создание свойства-объекта в компоненте
Каждый компонент может содержать в себе свойство-объект. В качестве свойства-объекта может выступать любой компонент или объект Kylix. Кроме того, свойствами-объектами нового компонента могут быть новые компоненты или объекты, которые вы создали самостоятельно. Важным условием является тот факт, что свойства-объекты должны быть потомками класса TPersistent. Это необходимо для того, чтобы свойства объекта-свойства отображались в окне инспектора объектов. Приведем пример создания свойства-объекта в нашем компоненте TMyButton.
Для начала создадим произвольный новый объект, являющийся прямым потомком класса TPersistent (листинг 19.5).
Свойствообъект MyObject в новом компоненте TMyButton
Рисунок 19.5. Свойство-объект MyObject в новом компоненте TMyButton
Обратите внимание на реализацию метода TMyObject. Assign. Здесь сначала выполняется проверка на то, правильный ли передается экземпляр объекта TMyObject. Если он правильный, то значения свойств (Source) переносятся в поля FProperty1 и FProperty2 объекта TMyButton. Результатом исполнения вышеприведенного кода будет новый компонент TmyButton, содержащий в себе свойство-объект TMyObject. В окне инспектора объектов это будет выглядеть так, как представлено на Рисунок 19.5.
Создание свойства-массива в компоненте
Свойства компонента могут быть практически любого типа, которые поддерживает язык Object Pascal. Некоторые свойства могут быть массивами. Яркими примерами свойств такого типа являются TMemo. Lines и TDBGrib.Columns.. Такие свойства требуют собственных редакторов. Мы пока остановимся на создании простого свойства, которое представляет собой простой массив (о создании собственных редакторов свойств читайте далее в этой главе). Создадим новый компонент TWeek, который будет содержать два свойства: Month и Number. Свойство Month будет представлять собой массив, который будет возвращать название месяца по переданному целому числу от 1 до 12. Свойство Number — тоже массив, который возвращает число, Соответствующее названию месяца.
Итак, в листинге 19.8 приведен код компонента TWeek.
Таблица
Таблица
Позволяет работать с произвольной информацией в таблице
Image
Рисунок
Служит для отображения графического растрового файла, иконки или метафайла
Shape
Геометрическая фигура
Позволяет отображать произвольные геометрические фигуры. Например, эллипс, треугольник, прямоугольник и др.
Bevel
Фаска
Позволяет украсить ваше приложение путем размещения "трехмерных" линий или прямоугольников
ScrollBox
Область прокрутки
Создает контейнер, который в случае необходимости автоматически, без вмешательства программиста, добавляет полосы прокрутки
CheckListBox
Список переключателей
Отображает похожий на список компонент, который позволяет выбирать сразу несколько строк одновременно
Splitter
Разделитель
/
Размещается между двумя выровненными компонентами-контейнерами и позволяет пользователю во время работы приложения изменять размеры этих компонентов с помощью перемещения разделителя
StaticText
Статический текст
Компонент похож на метку, но имеет некоторые дополнительные возможности, о которых мы поговорим в дальнейшем
ControlBar
Панель инструментов
Позволяет быстро создавать панели инструментов
LCDNumber
LCD-номер
Текстовое окно, в которое можно вводить текст или цифры. Все введенные значения будут отображаться на LCD-дисплее
Timer
Таймер
Невизуальный компонент, генерирующий событие OnTimer циклически через определенный промежуток времени
PaintBox
Окно для рисования
Размещает на форме область, в которой можно рисовать, используя графические средства Kylix
Целочисленные типы данных
Таблица 2.1. Целочисленные типы данных
Тип данных |
Диапазон значений |
Формат чисел в памяти |
Integer |
-2 147 483 648-2 147 483 647 |
32 бита со знаком |
Cardinal |
0-4 294 967 295 |
32 бита без знака |
Shortint |
-128-127 |
8 битов со знаком |
Smallint |
-32 768-32 767 |
16 битов со знаком |
Longint |
-2 147 483 648-2 147 483 647 |
32 бита со знаком |
Int64 |
-2^63-2^63-1 |
64 бита со знаком |
Byte |
0-255 |
8 битов без знака |
Word |
0-65 535 |
16 битов без знака |
Longword |
0-4 294 967 295 |
32 бита без знака |
Для записи целых чисел можно использовать знаки "+" и "—". Если знак числа отсутствует, число считается положительным.
Вещественные типы данных
Наиболее используемым вещественным типом является тип Real. Переменные этого типа могут содержать любые непорядковые числовые значения со знаком. Различия вещественных типов данных заключаются в основном в отличии числа знаков после запятой (точности). Табл. 2.2 содержит перечень вещественных типов данных языка Object Pascal.
Вещественные типы данных
Таблица 2.2. Вещественные типы данных
Тип данных |
Диапазон значений |
Точность (знаков) |
Количество байт |
Real48 |
2,9x10^- 39-1,7х10^38 |
11-12 |
6 |
Single |
1,5х10^- 45-3,4х10^38 |
7-8 |
4 |
Double |
5,0x10^- 324-1,7х10^308 |
15-16 |
8 |
Extended |
3,6х10^- 4951-1,1х10^4932 |
19-20 |
10 |
Comp |
-2^63+1- 2^63-1 |
19-20 |
8 |
Currency |
-922 337 203 685 477,5808 - 922 337 203 685 477,5807 |
19-20 |
8 |
Real |
5,0x10^- 324 -1,7х10^308 |
15-16 |
8 |
Примечание
Шестибайтовый тип Real 48 применялся в ранних версиях языка Object Pascal как Real. Если вы перекомпилируете код, который использовал ранний шестибайтовый тип Real, вы можете для удобства изменить его на Real 48. Кроме того, вы можете применить директиву компилятора {$REALCOMPATIBILITY ON} для автоматического перевода типа Real в шестибайтовый.
О вышеперечисленных типах можно еще сказать следующее:
тип Extended предлагает большую точность, чем другие вещественные типы, но является наименее компактным. Будьте осторожны при использовании данного типа, если вы хотите создавать программы сразу для нескольких платформ;
тип Comp является "родным" для семейства процессоров Intel и представляет собой 64-разрядное целое число. Данный тип не относится к целым типам, т. к. не является порядковым и при присваивании переменной данного типа вещественного числа происходит его округление до ближайшего целого. Кроме того, данный тип не поддерживает некоторые операции, допустимые над целыми порядковыми числами (Inc(x), Dec(x) и др.). Этот тип используется лишь для обратной совместимости. Для лучшего быстродействия воспользуйтесь типом Int64;
тип Currency является типом с фиксированной запятой, которая применяется для уменьшения ошибок при вычислениях, связанных с денежными суммами. Данный тип представляет собой 64-разрядное целое число с четырьмя знаками после запятой.
Над вещественными числами допускается осуществлять следующие операции:
Trunc (х) — отбрасывание дробной части числа х.
Логические типы данных
Для хранения логических значений Object Pascal использует тип данных Boolean. Переменная логического типа занимает один байт памяти и может принимать два значения: 1 или 0. Значение 1 соответствует значению True (истина). Значение 0 соответствует значению False (ложь). Из-за того, что данный тип не совместим с подобными логическими типами, применяемыми в других языках программирования, Object Pascal имеет три дополнительных логических типа:
WordBool — порядковое числовое значение от 0 до 65 535, где 0 соответствует значению False, а все остальные числа — значению True. Данный тип занимает 2 байта памяти;
LongBool — порядковое числовое значение от 0 до 4 294 967 295, где 0 соответствует значению False, а все остальные числа — значению True. Данный тип занимает 4 байта памяти.
Операции над этими типами могут привести к разным значениям. В табл. 2.3 вы найдете отличия в результатах операций над различными логическими типами.
Основным символьным типом является Сhar.
Таблица 2.3 (окончание)
Тип данных Boolean |
Типы данных ByteBool, WordBool, LongBool |
Ord(True) = 1 |
Ord(True) <> 0 |
Succ (False) = True |
Succ (False) = True |
Pred(True) = False |
Pred (False) = True |
Основным символьным типом является Сhar. Данный тип используется для хранения символа из таблицы ASCII. Каждый символ в данной таблице представлен числовым значением от 0 до 255, поэтому переменная такого типа занимает в памяти всего 1 байт.
Кроме типа Char, язык Object Pascal имеет еще два символьных типа:
AnsiChar является полным аналогом типа Сhar. Занимает 1 байт памяти;
WideChar — тип, который используется для хранения символов в кодировке Unicode. Данная кодировка ограничена не 256-ю а 65 535-ю символами. Занимает 2 байта памяти.
Над символьными типами данных допустимы следующие операции:
Chr (x) — возвращает символ с кодом, который соответствует целочисленному значению х;
UрСаsе(с) — возвращает символ с, преобразованный в верхний регистр (то есть преобразует прописные буквы в заглавные).
Отличия результатов операций над логическими типами
Таблица 2.3. Отличия результатов операций над логическими типами
Тип данных Boolean |
Типы данных ByteBool, WordBool,LongBool |
False < True |
False <> True |
Ord(False) =0 |
Ord (False) = 0 |
Строковые типы данных
Таблица 2.4. Строковые типы данных
Тип данных |
Максимальная длина |
Занимаемая память |
Используется для: |
ShortString |
255 символов |
2—256 байт |
совместимости с предыдущими версиями языка |
AnsiString |
2^31 символов |
4 байт— 2 Гбайт |
символов ANSI, строк переменной длины |
WideString |
2^30 символов |
4 байт— 2 Гбайт |
символов Unicode, COM-серверов и интерфейсов |
Кроме того, наиболее часто применяется тип данных String. Свойства данного типа зависят от директивы компилятора {$H}: если она включена {$H+}, то данный тип эквивалентен типу AnsiString. Если же она выключена {$H-}, то тип String будет равносилен типу ShortString. По умолчанию данная директива выключена.
Строки, по своему определению, являются массивами символов. Поэтому для обращения к любому символу строки достаточно указать название строковой переменной и номер символа (как при обращении к элементу массива):
var
A: Char;
MyString: String;
begin
A:=MyString[10];
end;
Кроме перечисленных в табл. 2.4 строковых типов данных, имеется еще один тип PChar, который является строкой с нулевым окончанием, т. е. в конце строки стоит код 0. Длина строки типа PChar может быть любой, но, естественно, не более чем объем памяти компьютера.
Множества
Множество — это набор данных, относящихся к одному и тому же простому типу. Значения входящих в множество элементов ограничены только своим простым типом. Количество элементов множества не должно превышать 256. Описание множественного типа можно осуществить так:
set of Тип данных;
Рассмотрим способ задания множества целых чисел путем определения промежутка чисел:
type
TSomeInts = 1..250;
TIntSet = set of TSomeInts;
В данном примере мы создаем тип множества TIntSet, который содержит набор целых чисел от 1 до 250. Перед этим мы создали свой тип TSomeInts, который является частью типа integer. Мы можем создать это же множество другим способом:
type TIntSet = set of 1..250;
В общем случае, элементы множества задаются с помощью простого их перечисления в квадратных скобках через запятую. Например, если ранее была записана представленная выше строка определения типа TIntSet, можно задать множества Set1 и Set2:
var Set1, Set2: TIntSet ;
. . .
Set1 := [1, 3, 5, 7, 9]; Set2 := [2, 4, 6, 8, 10]
Кроме того, вы можете задавать множества непосредственно в объявлении переменных с помощью конструкции set of:
var MySet: set of ' a ' . . ' z ' ;
...
MySet := [ ' a ' , ' b ' , ' c ' ] ;
В табл. 2.5 приведен список операций, которые допустимы над множествами.
если множества не являются эквивалентными,
Таблица 2.5 (окончание)
Обозначение |
Название |
Тип результата |
Результат |
Пример |
= |
Эквивалентность |
Логический |
Истина, если множества эквивалентны, иначе — ложь |
Set1 = Set2 |
о |
Неравенство |
Логический |
Истина, если множества не являются эквивалентными, иначе — ложь |
Set1 <> Set2 |
<= |
Подмножество |
Логический |
Истина, если первое множество входит во второе, |
Set1 <= Set2 |
>= |
Расширенный набор |
Логический |
ложь — в противном случае Истина, если первое множество включает в себя второе, иначе — ложь |
Set1 >= Set2 |
In |
Членство |
Логический |
Истина, если данный элемент входит в множество, иначе — ложь |
A in Set1 |
Массив — это упорядоченная совокупность элементов одного и того же типа. Элементы массива имеют уникальные индексы. Массив обязательно имеет имя.
Так как элементы массива имеют индексы, массивы могут содержать одинаковые значения неоднократно. Каждый элемент массива однозначно определяется именем массива и собственным индексом.
Массивы подразделяются на статические и динамические.
Статический массив — это массив, размеры которого задаются при объявлении, т. е. это массив с четкими границами индексов.
Статический массив определяется следующей конструкцией языка Object Pascal:
array[indexTypel , . . . , indexTypen] of baseType;
Каждый indexType внутри квадратных скобок является порядковым типом, диапазон которого не превышает 2 Гбайт. Диапазон каждого indexType ограничивает число элементов, входящих в массив.
Примечание
Хотя, по определению, индексом массива может быть любой порядковый тип, на практике обычно применяется тип Integer.
Для обращения к любому элементу массива нужно указать сначала имя этого массива, а затем — в квадратных скобках номер (индекс) элемента:
МуАггау[10];
Динамический массив — это массив, в котором при объявлении указывается только тип его элементов. Размеры динамических массивов изменяются в ходе выполнения программы.
Динамический массив задается с помощью нижеприведенной конструкции:
array of baseType;
Язык Object Pascal поддерживает многомерные массивы. Самым простым является одномерный массив. Его можно представить как пронумерованную строку переменных (Рисунок 2.1). Приведем пример создания простого одномерного массива.
Операции допустимые над множествами
Таблица 2.5. Операции, допустимые над множествами
Обозначение |
Название |
Тип результата |
Результат |
Пример |
+ |
Объединение множеств |
Множество |
Неповторяющиеся элементы первого и второго множества |
Set1 + Set2 |
- |
Разность множеств |
Множество |
Элементы из первого множества, которые отсутствуют во втором |
Set1 - Set2 |
* |
Пересечение множеств |
Множество |
Элементы, которые есть как в первом, так и во втором множестве |
Set1 * Set2 |
Арифметические операции над двумя операндами
Таблица 3.1. Арифметические операции над двумя операндами
Знак операции | Операция | Типы операндов | Тип результата | Пример |
+ | Сложение | Integer, real | Integer, real | X+Y |
- | Вычитание | Integer, real | Integer, real | X-Y |
* | Умножение | Integer, real | Integer, real | X*Y |
/ | Деление | Integer, real | Real | X/10 |
div | Целочисленное деление | Integer | Integer | X div Y |
mod | Целочисленный остаток от деления | Integer | Integer | X mod Y |
Стоит сказать несколько слов по поводу операций div и mod. Результатом целочисленного деления X div Y будет результат деления X/Y, округленный в сторону нуля до ближайшего целого числа.
Результатом операции mod будет остаток от целочисленного деления операндов. Таким образом, выражение X mod Y эквивалентно выражению X - (X div Y) *Y. Например, результатом выражения 4 div 2 будет 0, а результатом выражения 9 div 4 будет 1.
В табл. 3.2 приведены операции, осуществляемые над одним операндом.
Арифметические операции над одним операндом
Таблица 3.2. Арифметические операции над одним операндом
Знак операции | Операция | Тип операнда | Тип результата | Пример |
+ | Сохранение знака числа | Integer, real | Integer, real | +7 |
- | Отрицание знака числа | Integer, real | Integer, real | -X |
Приведем примеры использования арифметических операций с одним и двумя операндами (листинг 3.1).
Поразрядные арифметические операции
Таблица 3.3. Поразрядные арифметические операции
Знак операции | Операция | Типы операндов | Тип результата | Пример |
not | Поразрядное отрицание | Integer | Integer | not X |
and | Поразрядное умножение | Integer | Integer | X and Y |
or | Поразрядное сложение | Integer | Integer | X or Y |
xor | Поразрядное исключающее ИЛИ | Integer | Integer | X xor Y |
shl | Поразрядный сдвиг числа влево | Integer | Integer | X shl 2 |
shr | Поразрядный сдвиг числа вправо | Integer | Integer | X shr 1 |
В табл. 3.4 показаны результаты выполнения поразрядных арифметических операций.
Приведем примеры использования побитовых арифметических
Таблица 3.4 (окончание)
Знак операции | Операция | Бит1 | Бит 2 | Результирующий бит | ||
1 | 0 | 0 | ||||
1 | 1 | 1 | ||||
or | Поразрядное сложение | 0 | 0 | 0 | ||
0 | 1 | 1 | ||||
1 | 0 | 1 | ||||
1 | 1 | 1 | ||||
хоr | Поразрядное исключающее ИЛИ | 0 | 0 | 0 | ||
0 | 1 | 1 | ||||
1 | 0 | 1 | ||||
1 | 1 | 0 | ||||
Результаты выполнения поразрядных арифметических операций
Таблица 3.4. Результаты выполнения поразрядных арифметических операций
Знак операции | Операция | Бит1 | Бит 2 | Результирующий бит |
not | Поразрядное отрицание | 0 | 1 | |
1 | 0 | |||
and | Поразрядное умножение | 0 | 0 | 0 |
0 | 1 | 0 |
Логические операции языка Object Pascal
Таблица 3.5. Логические операции языка Object Pascal
Знак операции | Операция | Типы операндов | Тип результата | Пример |
not | Отрицание | Boolean | Boolean | not (С in MySet) |
Как видно из примеров табл.
Таблица 3.5 (окончание)
Знак операции | Операция | Типы операндов | Тип результата | Пример |
and | Конъюнкция (логическое И) | Boolean | Boolean | A and В |
or | Дизъюнкция (логическое ИЛИ) | Boolean | Boolean | A or В |
xor | Исключающая дизъюнкция (исключающее ИЛИ) | Boolean | Boolean | A xor В |
Результаты выполнения логических операций
Таблица 3.6. Результаты выполнения логических операций
Знак операции | Операция | Операнд 1 | Операнд 2 | Результат |
not | Отрицание | False | True | |
True | False | |||
and | Конъюнкция (логическое И) | False | False | False |
False | True | False | ||
True | False | False | ||
True | True | True | ||
or | Дизъюнкция (логическое ИЛИ) | False | False | False |
False | True | True | ||
True | False | True | ||
True | True | True | ||
xor | Исключающая дизъюнкция (исключающее ИЛИ) | False | False | False |
False | True | True | ||
True | False | True | ||
True | True | False |
Для установки отношений между двумя значениями вы можете использовать операции отношения или сравнения. В языке Object Pascal имеется шесть операций отношения:
< — меньше;
> — больше;
<= — меньше или равно;
>= — больше или равно;
<> — не равно.
Если операция отношения истинна, то результатом ее выполнения является значение True, например истинным является выражение 4 < 10; в противном случае — результат False, например 12 <> 12.
Рассмотрим теперь такой немаловажный вопрос: в каком порядке выполняются те или иные операции? Если в сложном выражении записаны несколько операций подряд, то последовательность их выполнения определяется старшинством. Для того чтобы был четкий порядок выполнения операции, в языке Object Pascal существует такое понятие, как приоритет.
Приоритет определяет старшинство операций и служит для установления порядка выполнения операций. Операции с более высоким уровнем приоритета выполняются раньше остальных.
По приоритету все операции делятся на четыре уровня:
и not;
второй уровень приоритета — операции *, /, div, mod, and, shl, shr и as; третий уровень приоритета — операции +, -, or и хоr;
четвертый (самый низкий) уровень приоритета — операции =, <>, <, >, <=, >=, in и is.
Если подряд идут несколько операций с одинаковым приоритетом, то операции выполняются слева направо.
Строковые выражения
Строковые выражения содержат строковые операции и функции. Для строк в Object Pascal определена одна операция — операция объединения строк (конкатенации строк). Знаком операции конкатенации является +. Операндами для этой операции могут быть строки, упакованные строки, а также символы. В то же время, если один из операндов имеет тип WideChar, другой операнд должен быть длинной строкой. Результат операции объединения строк — строка символов. Этот результат совместим со всеми строковыми типами языка. В то же время, если количество символов после операции объединения строк превысит 255, то результатом станут первые 255 символов, а оставшиеся будут просто отброшены.
Для строк определены также следующие функции:
Copy(S; Index, Count) — возвращает строковое значение, являющееся подстрокой строки S, начиная с символа под номером Index, и длиной Count;
Length (s) — возвращает целое число, равное количеству символов в строке s;
Pos(Substr; s) — возвращает целое число, определяющее позицию первого символа, начиная с которого подстрока Substr входит в строку s. Если такой подстроки в строке нет, то результатом будет 0;
Trim(s) — возвращает строку, полученную в результате отбрасывания от строки s пробелов и управляющих символов в начале и конце строки;
TrimLeft(s) — возвращает строку, полученную в результате отбрасывания от строки s пробелов и управляющих символов в начале строки;
TrimRight(s) — возвращает строку, полученную в результате отбрасывания от строки s пробелов и управляющих символов в конце строки.
Кроме перечисленных выше функций существует несколько дополнительных функций для преобразования одних типов данных в другие:
FioatToStr (value) — возвращает строку, полученную в результате преобразования вещественного числа value в строку;
IntToStr (value) — возвращает строку, полученную в результате преобразования целого числа value в строку;
LowerCase (s) — возвращает строку, полученную в результате преобразования строки s в строку символов нижнего регистра (прописные буквы);
StrToDate(s) — возвращает значение типа "дата", полученное в результате преобразования строки s в значение даты;
StrToDateTime(s) — возвращает значение типа "дата и время", полученное в результате преобразования строки s в значение даты и времени;
StrToFloat (s) — возвращает значение вещественного типа, полученное в результате преобразования строки s в вещественное число;
StrToInt(s) — возвращает целочисленное значение, полученное в результате преобразования строки s в целое число;
StrToTime (s) — возвращает значение типа "время", полученное в результате преобразования строки s в значение времени;
TimeToStr (time) — возвращает строку, полученную в результате преобразования значения времени time в строку;UpperCase (s) — возвращает строку, полученную в результате преобразования строки s в строку символов верхнего регистра (заглавные буквы);
Приведем примеры строковых выражений:
S:='Мама'; // Результат в переменной S - слово МамаS:=s + ' мыла'; // Результат - Мама мылаS:=s + Uppercase(' раму'); // Результат - Мама мыла РАМУМетоды для работы с RTTI
Таблица 5.1. Методы для работы с RTTI
Название метода |
Тип возвращаемого результата |
Результат |
Classlnfo |
Pointer |
Указатель на информацию о типе объекта |
ClassName |
String |
Имя класса объекта |
ClassParent |
Tclass |
Тип класса-предка объекта |
ClassType |
Tclass |
Тип объекта |
InheritsFrom |
Boolean |
Является ли объект потомком данного класса |
InstanceSize |
Word |
Размер объекта как экземпляра класса в байтах |
Для работы с информацией о типе времени исполнения в Kylix имеется два основных оператора: is и as.
Синтаксис использования оператора is:
Объект is Класс;
Данный оператор применяется для проверки того, принадлежит ли объект к указанному классу. В том случае, если объект принадлежит классу, возвращается значение True, в противном случае возвращается False.
Приведем пример использования оператора is.
if ActiveControl is TEdit then TEdit(ActiveControl).SelectAll;
В этом примере производится проверка, имеет ли активный компонент тип TEdit. И если это так, то в нем выделяется весь имеющийся текст.
Примечание
Для более глубокого понимания компонентов и их свойств обратитесь ко второй части книги.
Синтаксис использования оператора as:
Объект as Класс;
Данный оператор служит для приведения одного типа к другому.
Информация о типе времени выполнения используется в Kylix в основном для определения, с объектом какого типа сейчас работает приложение.
Средство ведения списка задач, подлежащих
Таблица 6.1 (окончание)
Возможность | Desktop Developer | Server Developer |
Средство ведения списка задач, подлежащих исполнению (список То Do) | Есть | Есть |
Расширенный менеджер проектов | Есть | Есть |
Расширенный интегрированный отладчик | Есть | Есть |
Средства многопроцессной отладки | Есть | Есть |
Набор стандартных компонентов для быстрой разработки приложений | 130 | 165 |
Поддержка фреймов для создания составных компонентов | Есть | Есть |
Интерфейс драйверов баз данных dbExpress | Есть | Есть |
Локальное ядро баз данных MyBase | Есть | Есть |
Драйверы dbExpress для MySQL и InterBase | Есть | Есть |
Драйверы dbExpress для Oracle и Db2 | Нет | Есть |
Компоненты NetCLX для разработки Интернет-приложений | Нет | Есть |
Компоненты связи через sockets | Нет | Есть |
Набор компонентов на основе WebBroker | Нет | Есть |
Поддержка приложений Apache CGI и DSO | Нет | Есть |
Контейнеры типа WebModule | Нет | Есть |
Компоненты WebDispatch | Нет | Есть |
Мастер создания Web-приложений для сервера Apache | Нет | Есть |
Набор компонентов компании Nevrona для разработки Интернет-приложений: Indylnternet protocol component suite | Есть | Есть |
Если вы знакомы со средой программирования Borland Delphi, то переход к программированию в Kylix будет достаточно легким, т. к. многое в Kylix напоминает Delphi.
Интегрированная среда Kylix является достаточно удобным средством эффективной и быстрой разработки приложений в Linux. Среда Kylix вобрала в себя много хорошего от своего предшественника — Delphi.
Интегрированная среда разработки Kylix состоит из четырех основных окон, которые отображаются при запуске среды:
главного окна (Main Window);
конструктора форм (Form Designer); инспектора объектов (Object Inspector); редактора кода (Code Editor).
Главное окно является основной частью интегрированной среды разработки (Рисунок 6.1). Оно, в свою очередь, состоит из трех частей:
меню
панели инструментов;
палитры компонентов.
Возможности Kylix
Таблица 6.1. Возможности Kylix
Возможность | Desktop Developer | Server Developer |
Высокопроизводительный оптимизирующий компилятор в платформенный исполняемый код | Есть | Есть |
Возможность создания разделяемых библиотек объектов (Shared Object libraries, .so) | Есть | Есть |
Интегрированная среда разработки (Integrated Development Environment, IDE) | Есть | Есть |
Возможность сохранения нескольких схем размещения визуальных элементов IDE | Есть | Есть |
Встроенное средство Code Explorer | Есть | Есть |
Модули данных для хранения невизуальных объектов, компонентов и других элементов | Есть | Есть |
Компоненты вкладки Standard
Таблица 8.1. Компоненты вкладки Standard
Название на английском языке | Название на русском языке | Краткое описание компонента |
Frames | Фреймы | Фрейм — это похожий на форму компонент, который используется для размещения внутри него других компонентов. Может размещаться на формах или других фреймах. Для создания нового фрейма нужно выбрать пункт меню File/New Frame (Файл/Новый Фрейм) |
Создает так называемый контейнер, который
Таблица 8.1 (окончание)
Название на английском языке | Название на русском языке | Краткое описание компонента |
GroupBox | Группа | Создает так называемый контейнер, который может содержать внутри себя компоненты. Эти компоненты объединяются в одну группу. Служит в основном для удобства работы с разными группами компонентов на одной форме |
RadioGroup | Группа переключателей | Создает группу переключателей. Эти переключатели не зависят от других групп или одиночных переключателей |
Panel | Панель | Используется для создания строк состояния или панелей инструментов. На панели могут размещаться другие компоненты |
ActionList | Список действий | Позволяет вашему приложению централизованно реагировать на какие-либо действия пользователя. Например, копирование данных из поля для ввода |
Служит для создания главного меню
Таблица 8.1 (продолжение)
Название на английском языке | Название на русском языке | Краткое описание компонента |
MainMenu | Главное меню | Служит для создания главного меню вашего приложения. Расположите этот компонент на форме и после двойного щелчка на нем добавьте новые пункты вашего меню |
PopupMenu | Всплывающее меню | Служит для создания так называемого всплывающего меню — меню, которое отображается после щелчка правой кнопкой мыши в определенной области приложения |
Label | Метка | Служит для простого отображения текстовой информации, которую пользователь не может редактировать во время работы приложения |
Edit | Поле для ввода | Служит для отображения текстовой информации, которую пользователь может изменять. Удобно применять для ввода или редактирования какой-либо текстовой информации |
Memo | Многострочное поле | Работает как и поле для ввода, только позволяет вводить (редактировать) несколько строк текста |
Button | Кнопка | Обычная кнопка предназначена для выполнения какого-либо кода по нажатии на кнопку пользователем |
CheckBox | Флажок | Представляет опцию, благодаря которой пользователь может изменять положение переключателя вкл./выкл. |
RadioButton | Переключатель | Данный переключатель работает обычно в группе с другими. Если на форме располагается несколько таких переключателей, только один из них может принимать включенное положение |
ListBox | Список | Предназначен для вывода нескольких строк текста. Пользователь может выбрать любую из этих строк простым нажатием на ней |
ComboBox | Выпадающий список | Является как бы комбинацией списка и поля для ввода. Пользователь может ввести самостоятельно текст в поле либо выбрать нужный из предоставленного списка |
ScrollBar | Полоса прокрутки | Предназначена для смены видимой области отображения формы. Нужна для просмотра большого количества информации, которая просто не помещается на экран |
Компоненты вкладки Additional
Таблица 8.2. Компоненты вкладки Additional
Название | Название на русском языке | Краткое описание компонента |
BitBtn | Кнопка с рисунком | Кнопка, которая, помимо текста, может отображать рисунок |
SpeedButton | Кнопка быстрого доступа | Такие кнопки обычно располагаются на панели инструментов. Они не могут содержать текста, а содержат только рисунки |
MaskEdit | Поле для ввода по шаблону | Компонент похож на поле для ввода, только позволяет вводить информацию по определенным правилам, например паспортные данные, почтовый индекс, номер телефона и др. |
Название на английском
Таблица 8.2 (окончание)
Название на английском языке | Название на русском языке | Краткое описание компонента |
StringGrid |
Компоненты вкладки Common Controls
Таблица 8.3. Компоненты вкладки Common Controls
Название | Название на русском языке | Краткое описание компонента |
TabControl | Вкладки | Предназначен для размещения нескольких переключаемых страниц, содержащих различные элементы. Примером применения вкладок может служить палитра компонентов Kylix |
PageControl | Страницы | Используется для создания многостраничных диалоговых окон, таких как, например, окно настройки проекта (Project Options) Kylix |
ImageList | Список рисунков | Создает объединение рисунков, имеющих одинаковый размер, каждому из которых сопоставлен собственный индекс |
TrackBar | Бегунок | Панель, предназначенная для визуального изменения какой-либо переменной величины. Бегунок может быть как горизонтальным, так и вертикальным |
ProgressBar | Индикатор хода выполнения | Создает прямоугольную панель, которая заполняется слева направо для индикации хода выполнения какой-либо задачи. Часто применяется для отображения хода установки (инсталляции) какой-либо программы на жесткий диск |
TreeView | Дерево | Отображает список в виде дерева |
ListView | Список | Отображает список |
HeaderControl | Заголовок | Отображает заголовок над столбцами, содержащими текст или числовые значения |
StatusBar | Строка состояния | Создает панель, предназначенную для вывода служебной информации |
ToolBar | Панель инструментов | Создает элемент, позволяющий размещать на себе кнопки и другие элементы, автоматически подбирая их размер и расположение |
Отображает содержимое текстового файла или
Таблица 8.3 (окончание)
Название | Название на русском языке | Краткое описание компонента |
TextViewer | Просмотрщик текстов | Отображает содержимое текстового файла или простую HTML-страничку, которую можно прокручивать (скроллировать) |
TextBrowser | Обозреватель текстов | Отображает содержимое текстового файла или простую HTML-страничку. Пользователь может прокручивать (скроллировать) текст или щелкать на размещенных в тексте ссылках для просмотра других страниц и рисунков |
SpinEdit | Поле со стрелками | Отображает поле редактирования, в которое пользователь может ввести однострочное числовое значение или текст и использовать кнопки "стрелка вверх" и "стрелка вниз" для увеличения или уменьшения текущего значения поля |
IconView | Список иконок | Отображает список или данные в виде строк и столбцов маленьких или больших иконок |
Компоненты вкладки Dialogs
Таблица 8.4. Компоненты вкладки Dialogs
Название | Название на русском языке | Краткое описание компонента |
OpenDialog | Диалог открытия файла | Отображает стандартное диалоговое окно, позволяющее открыть любой файл по его имени |
Отображает стандартное диалоговое окно, позволяющее
Таблица 8.4 (окончание)
Название | Название на русском языке | Краткое описание компонента |
SaveDialog | Диалог сохранения файла | Отображает стандартное диалоговое окно, позволяющее сохранить данные в виде файла с заданием его имени |
FontDialog | Диалог выбора шрифта | Отображает стандартное диалоговое окно, позволяющее выбрать нужный шрифт и задать его стилевые особенности (размер, начертание и т. д.) |
ColorDialog | Диалог выбора цвета | Отображает стандартное диалоговое окно, позволяющее выбрать необходимый цвет |
FindDialog | Диалог поиска текста | Отображает стандартное диалоговое окно, позволяющее набрать фрагмент текста (строку) для поиска и осуществить этот поиск |
ReplaceDialog | Диалог поиска и замены | Отображает стандартное диалоговое окно, позволяющее произвести поиск введенной строки текста и замену этой строки на необходимую, которая также должна быть введена |
Пятая вкладка называется Data Access и показана Рисунок 8.5.
Компоненты вкладки Data Access
Таблица 8.5. Компоненты вкладки Data Access
Название | Название на русском языке | Краткое описание компонента |
DataSource | Источник данных | Невизуальный компонент, который служит "каналом" для передачи данных между набором данных и компонентами, отображающими данные, такими как DBGrid |
Невизуальный компонент, представляющий собой набор
Таблица 8.5 (окончание)
Название | Название на русском языке | Краткое описание компонента |
ClientDataSet | Клиентский набор данных | Невизуальный компонент, представляющий собой набор данных, содержащий данные в оперативной памяти. Он может быть использован при создании локальных баз данных |
DataSet Provider | Поставщик данных | Невизуальный компонент, который формирует пакеты данных для отправки клиентам |
Компоненты вкладки dbExpress
Таблица 8.6. Компоненты вкладки dbExpress
Название | Название на русском языке | Краткое описание компонента |
SQLConnection | SQL-соединение | Компонент для обеспечения связи с сервером базы данных dbExpress |
SQLDataSet | Набор данных SQL | Представляет собой набор данных, работающий с базами данных dbExpress |
SQLQuery | SQL-запрос | Компонент, позволяющий создавать и выполнять SQL-запросы для работы с таблицами баз данных dbExpress |
SQLStoredProc | Хранимая SQL-процедура | Хранимая на сервере dbExpress процедура, выполняемая с помощью соответствующего вызова |
SQLTable | SQL-таблица |
и ClientDataSet, этот компонент сохраняет
Таблица 8.6 (окончание)
Название | Название на русском языке | Краткое описание компонента |
SQLClientDataSet | Набор данных SQL-клиента | Как и ClientDataSet, этот компонент сохраняет в оперативной памяти данные и любые изменения, сделанные приложением в физические таблицы |
Компоненты вкладки Data Controls
Таблица 8.7. Компоненты вкладки Data Controls
Название | Название на русском языке | Краткое описание компонента |
DBGrid | Сетка | Содержащий данные компонент, предназначенный для отображения и редактирования данных в табличном виде, похожем на лист электронной таблицы |
DBNavigator | Навигационный интерфейс | Содержащий данные компонент, имеющий кнопки для перемещения по записям набора данных, вставки, редактирования и просмотра, а также сохранения новых или измененных данных в физической таблице |
DBText | Надпись | Содержащий данные компонент, метка, которая отображает значение какого-либо поля текущей записи набора данных |
DBEdit | Поле ввода | Содержащий данные компонент, предназначенный для отображения или редактирования значения какого-либо поля текущей записи набора данных |
Содержащий данные компонент, предназначенный для
Таблица 8.7 (окончание)
Название | Название на русском языке | Краткое описание компонента |
DBMemo | Мемо-поле | Содержащий данные компонент, предназначенный для отображения или редактирования BLOB-текста текущей записи набора данных |
DBImage | Графический образ | Содержащий данные компонент, предназначенный для отображения, копирования или вставки растровой картинки в нее или в текущую запись набора данных |
DBListBox | Список | Содержащий данные компонент, применяемый для отображения и прокрутки списка значений из столбца таблицы |
DBGomboBox | Комбинированный список | Содержащий данные компонент, предназначенный для отображения или редактирования прокручиваемого списка значений из столбца таблицы |
DBCheckBox | Независимый переключатель | Содержащий данные компонент, который применяется для отображения или редактирования поля логического типа текущей записи набора данных |
DBRadioGroup | Группа зависимых переключателей | Содержащий данные компонент, представляющий собой группу зависимых переключателей, предназначенных для отображения или установки значений столбца |
DBLookupListBox | Простой список | Его значения формируются по полю другого набора данных |
DBLookupComboBox | Комбинированный список | Его значения формируются по полю другого набора данных |
Компоненты вкладки Internet
Таблица 8.8. Компоненты вкладки Internet
Название | Название на русском языке | Краткое описание компонента |
WebDispatcher | Диспетчер Web | Конвертирует обычный модуль данных в Web-модуль и позволяет приложению Web-серверу отвечать на запросы клиентов |
Page Producer | Составитель страниц | Конвертирует HTML (Hypertext Transfer Protocol)-шаблоны в строки HTML-команд, которые могут обрабатываться приложением-клиентом, например Web-обозревателем |
DataSetTableProducer | Составитель таблиц набора данных | Монтирует последовательность HTML-команд для отображения записей набора данных в виде таблицы |
DataSetPageProduCer | Составитель страниц набора данных | Конвертирует HTML-шаблоны, содержащие поля набора данных, в строки HTML-команд, которые могут обрабатываться приложением-клиентом, таким как Web-обозреватель |
SQLQueryTableProducer | Составитель таблиц из объектов типа | Монтирует последовательность HTML-команд для отображения записей из объектов типа TSQLQuery в виде таблицы |
TcpClient | TCP-клиент | Добавляет на форму или модуль данных объект типа TTCPClient для "превращения" приложения в приложение-клиент TCP/IP (Transmission Control Protocol/Internet Protocol). TCP-клиент устанавливает желаемое соединение с TCP/IP-сбрвером, обслуживает текущее соединение и завершает соединение |
TcpServer | TCP-сервер | Добавляет на форму или модуль данных объект типа TTCPServer для "превращения" приложения в приложение-сервер TCP/IP. TCP-сервер ожидает запросы на TCP/IP-соединение от других компьютеров сети, и если такой запрос получен — устанавливает соединение |
Добавляет на форму или модуль
Таблица 8.8 (окончание)
Название | Название на русском языке | Краткое описание компонента |
UdpSocket | UDP-сокет | Добавляет на форму или модуль данных объект типа TUDPSocket для "превращения" приложения в UDP/IP (User Datagram Protocol/ Internet Protocol)-клиент или сервер |
Первая из этих трех вкладок носит имя Indy Clients (Рисунок 8.9).
Компоненты вкладки Indy Clients
Таблица 8.9. Компоненты вкладки Indy Clients
Название | Название на русском языке | Краткое описание компонента |
IdTCPClient | TCP-клиент | Инкапсулирует полную функциональность TCP-клиента, включая поддержку сокетов, и может быть использован для создания заказных программных средств |
IdUDPClient | UDP-клиент | Инкапсулирует полную функциональность UDP-клиента и может быть использован для создания заказных программных средств |
IdDayTime | Дата/время | Обеспечивает поддержку протокола даты/времени (RFC 876) как клиент |
IdDNSResolver | Разрешитель DNS | Запрашивает DNS (Domain Name Server) для различных типов записей доменных имен |
Компонент поддерживает протокол Trivial File
Таблица 8.9 (окончание)
Название | Название на русском языке | Краткое описание компонента |
IdTrivialFTP | TrivialFTP-клиент | Компонент поддерживает протокол Trivial File Transfer как клиент |
IdWhois | Whois-клиент | Поддерживает протокол Nickname или Whois (RFC 954) как клиент |
Обеспечивает поддержку протокола Finger User
Таблица 8.9 (продолжение)
Название | Название на русском языке | Краткое описание компонента |
IdEcho | Эхо | Обеспечивает поддержку эхо-протокола (RFC 862) |
IdFinger | Указатель | Обеспечивает поддержку протокола Finger User Information (RFC 1288) как клиент |
IdFTP | FTP-клиент | Обеспечивает поддержку протокола передачи файлов File Transfer Protocol (RFC 959) как клиент |
IdGopher | Gopher-клиент | Обеспечивает поддержку протокола Internet Gopher (RFC 1436) как клиент |
IdHTTP | HTTP-клиент | Обеспечивает поддержку HTTP-протокола, в том числе модификации HTTP 1.0 (RFC 1945) и HTTP 1.1 (RFC 2616) как Web-обозреватель |
IdlcmpClient | ICМР-клиент | Данный компонент предназначен для отправки пакетов Internet Control Message на другие компьютеры сети |
IdPOP3 | РОР3-клиент | Данный компонент обеспечивает поддержку протокола Post Office версии 3 (RFC 1939) для приема электронной почты как клиент |
IdNNTP | NNTP-клиент | Обеспечивает поддержку протокола Network News Transfer (RFC 977) как клиент |
IdQOTD | QOTD-клиент | Обеспечивает поддержку протокола Quote of the Day (RFC 865) как клиент |
IdRawClient | Raw-клиент | Представляет собой потомок класса TidRawBase, который обеспечивает способность клиента использовать соединение Raw сокет |
IdSMTP | SMTP-клиент | Компонент поддерживает протокол Simple Mail Transfer (RFC 821, 1869 и 2554) как клиент |
IdSNTP | SNTP-клиент | Компонент поддерживает протокол Simple Network Time (RFC 2030) как клиент |
IdTelnet | Telnet-клиент | Компонент поддерживает протокол Telnet как клиент |
IdTime | Time-клиент | Компонент поддерживает протокол Time (RFC 868) как клиент |
Компоненты вкладки Indy Servers
Таблица 8.10. Компоненты вкладки Indy Servers
Название | Название на русском языке | Краткое описание компонента |
IdTCPServer | TCP-сервер | Инкапсулирует полную функциональность TCP-сервера, включая поддержку сокетов, и может быть использован для создания заказных программных средств |
IdUDPServer | UDP-сервер | Инкапсулирует полную функциональность UDP-сервера и может быть использован для создания заказных программных средств |
IdChargenServer | Chargen-сервер | Обеспечивает создание Chargen-сервера |
IdDayTimeServer | Сервер даты/времени | Обеспечивает поддержку протокола даты/времени (RFC 876) как сервер |
IdDictServer | Dictionary-сервер | Обеспечивает поддержку протокола Dictionary Server, DICT (RFC 2229) |
IdDiscardServer | Discard-сервер | Обеспечивает поддержку протокола Discard (RFC 863) как сервер |
позволяющий получить доступ клиентов через
Таблица 8.10 (окончание)
Название | Название на русском языке | Краткое описание компонента |
IdTunneIMaster | TCP-сервер с поддержкой IP-туннелей | Позволяет создавать серверы, поддерживающие IP-туннели |
IdTunnelSlave | Сервер доступа к туннельным соединениям | Сервер, позволяющий получить доступ клиентов через туннельное соединение |
IdWhoIsServer | Whois-сервер | Поддерживает протокол Nickname или Whois (RFC 954) как сервер |
Обеспечивает поддержку протокола Finger User
Таблица 8.10 (продолжение)
Название | Название на русском языке | Краткое описание компонента |
IdEchoServer | Эхо-сервер | Обеспечивает поддержку эхо-протокола (RFC 862) как сервер |
IdFingerServer | Сервер указателя | Обеспечивает поддержку протокола Finger User Information (RFC 1288) как сервер |
IdGopher Server | Gopher-сервер | Обеспечивает поддержку протокола Internet Gopher (RFC 1436) как сервер |
IdHostNameServer | HostName-сервер | Обеспечивает разработку Internet HostName сервера (RFC 953) |
IdHTTPServer | HTTP-сервер | Обеспечивает поддержку HTTP-протокола как сервер |
IdMAP4Server | МАР4-сервер | Обеспечивает поддержку протокола Internet Message Access версии 4, IMAP4 (RFC 2060) |
IdlRCServer | IRC-сервер | Позволяет создавать сервер, поддерживающий протокол Internet Relay Chat, IRC (RFC 1459) |
IdMappedPortTCP | Сервер портов TCP | Позволяет создавать сервер с прослушиванием определенных портов и обеспечением связи с другими серверами |
IdNNTPServer | NNTP-сервер | Обеспечивает поддержку протокола Network News Transfer (RFC 977) как сервер |
IdQOTDServer | QOTD-сервер | Обеспечивает поддержку протокола Quote of the Day (RFC 865) как сервер |
IdSimpleServer | Простой TCP-сервер | Простой TCP-сервер без поддержки потоков |
IdTelnetServer | Telnet-сервер | Компонент поддерживает протокол Telnet как сервер |
IdTimeServer | Time-сервер | Компонент поддерживает протокол Time (RFC 868) как сервер |
IdTrivialFTPServer | TrivialFTP-сервер | Компонент поддерживает протокол Trivial File Transfer как сервер |
Компоненты вкладки Indy Misc
Таблица 8.11. Компоненты вкладки Indy Misc
Название | Название на русском языке | Краткое описание компонента |
IdAntiFreeze | Разморозка | Позволяет подсистеме Indy осуществить вызов процедуры Application . ProcessMessag, которая обеспечивает дальнейшую работу системы, пока обрабатываются вызовы Indy |
IdDateTimeStamp | Переводчик форматов даты/времени | Переводит дату/время в различные форматы, используемые в различных протоколах |
IdLogDebug | Отладчик | Прерывает текущее соединение в случае ошибки с ведением log-файла |
На этом пока закончим обзор
Таблица 8.11 (окончание)
Название | Название на русском языке | Краткое описание компонента |
IdCoderMD4 | Шифровальщик MD4 | Шифрует данные с использованием (формата шифрования MD4 |
IdCoderMD5 | Шифровальщик MD5 | Шифрует данные с использованием, формата шифрования MD5 |
RFC 822 или RFC 1036)
Таблица 8.11 (продолжение)
Название | Название на русском языке | Краткое описание компонента |
IdMessage | Интернет-сообщение | Инкапсулирует полное Интернет-сообщение ( RFC 822 или RFC 1036) для следующих протоколов: РОР3, SMTP и NNTP со встроенным расширением Multiple Mail Extensions, MME (RFC 2045, 2046, 2047, 2048 и 2049) |
IdThreadMgrDefault | Менеджер потока | Действует по умолчанию в качестве менеджера потока в Indy для сервера типа TidTCPServer и его потомков |
IdThreadMgrPool | Пудовый менеджер потока | Работает как менеджер потока, для потока типа TIdThread, использующего пул |
IdVCard | Электронные бизнес-карты | Обеспечивает поддержку Virtual Cards (электронных бизнес-карт с помощью метода ReadFromTStrings |
IdlMFDecoder | IMF-декодер | Декодирует двоичные данные в текстовый формат при помощи UU-кодировки |
IdQuotedPrintableEncoder | ММЕ-кодер | Кодирует текст в формат ММЕ |
IdQuotedPrintableDecoder | ММЕ-декодер | Декодирует формат ММЕ в текст |
IdBase64Encoder | Ваsе64-кодер | Кодирует двоичные данные в текст, использующий кодировку Base64 |
IdBase64Decoder | Base64-декодер | Декодирует текст в формате Base64 в двоичную форму |
IdUUEncoder | UU-кодер | Кодирует двоичные данные в текст, использующий кодировку UUEncode |
IdUUDecoder | UU-декодер | Декодирует текст формата UUEncode в двоичную форму |
IdXXEncoder | ХХ-кодер | Кодирует двоичные данные в текст, использующий кодировку XX |
IdXXDecoder | ХХ-декодер | Декодирует текст формата XX в двоичную форму |
IdCoderMD2 | Шифровальщик MD2 | Шифрует данные с использованием формата шифрования MD2 |
в инспекторе объектов как множества.
Таблица 8.12 (окончание)
Тип свойства | Отображение свойств в окне инспектора объектов |
Множество (Set) | Свойства типа "множество" отображаются в инспекторе объектов как множества. При помощи двойного щелчка мыши на значении свойства разработчик может расширить множество и установить каждому элементу множества булево значение (True, если данный элемент входит в множество) |
Объект (Object) | Свойства такого типа часто имеют собственный редактор свойств. Свойства типа "объект" должны быть потомками класса Tpersistent |
Массив (Array) | Свойства типа "массив" должны иметь собственный редактор свойств. Инспектор объектов 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 — компонент привязан к правому краю родительского компонента.
Типы свойств компонентов Kylix
Таблица 8.12. Типы свойств компонентов Kylix
Тип свойства | Отображение свойств в окне инспектора объектов |
Простой (Simple) | Числовые, символьные и строковые свойства отображаются соответственно как числа, символы и строки. Разработчик может редактировать значения данных свойств непосредственно в окне инспектора объектов |
Перечисляемый | Свойства перечисляемых типов (включая булевы) отображаются в инспекторе объектов как редактируемые строки. Разработчик может, кроме непосредственного ввода значения свойства, переключать допустимые значения свойства двойным щелчком кнопки мыши в поле значения свойства инспектора объектов либо выбрать допустимое значение из выпадающего списка |
Константы цвета в среде Kylix
Таблица 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 (окончание)
Константа | Цвет |
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-эффектах для активных компонентов |
Свойство 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.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-эффектах для отключенных компонентов |
Флаги значения свойства ControlState
Таблица 8.14. Флаги значения свойства ControlState
Флаг | Значение |
csLButtonDown | Левая кнопка мыши нажата |
csClicked | То же, что и csLButtonDown, но устанавливается только в случае, если в свойстве ControlStyle также установлен флаг csClickEvents |
csPalette | Палитра изменена, и элемент управления не закончил регулировку этой палитры |