Элемент управления считывает свое состояние
Таблица 8.14 (окончание)
Флаг | Значение |
csReadingState | Элемент управления считывает свое состояние из потока |
csAlignmentNeeded | Элемент управления нуждается в перестроении |
csFocusing | Приложение обрабатывает сообщения, предназначенные для передами фокуса элементу управления. Данный флаг не гарантирует, что элемент управления получит фокус, но предотвращает рекурсивные вызовы |
csCfeating | Элемент управления и (или), его владелец начинают создаваться. Данный флаг сбрасывается после завершения процесса создания |
csPaintCopy | Элемент управления начинает копирование (собственное) |
csCustomPaint | Элемент управления обрабатывает выбранные сообщения о закрашивании |
csDestroyingHandle | Окно элемента управления находится в процессе уничтожения |
csDocking | Элемент управления начинает устанавливаться |
csRecreating | Основное окно Qt начинает создаваться |
esWidgetPainting | Основное окно Qt в процессе перерисовки |
property ControlStyle: TControlStyle; Значение данного свойства также состоит из флагов (табл. 8.15).
Флаги значения свойства ControlStyle
Таблица 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 | Элемент управления реагирует на команды системного меню |
property Cursor:TCursor; В свою очередь, тип TCursor описан так:
type TCursor = -32768 .. 32768;
Kylix имеет встроенные виды указателей. Кроме встроенных, разработчик может помещать в приложение собственные виды указателя мыши. В табл. 8.16 приводятся встроенные типы указателей мыши.
Указатели мыши
Таблица 8.16. Указатели мыши
Значение свойства | Числовое значение | Изображение указателя мыши |
CrDefault | 0 | Указатель, принятый по умолчанию. Обычно |
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 | Указатель в форме руки |
property DragMode: TDragMode;
Данное свойство может принимать одно из двух значений: dmAutomatic или dmManual. В первом случае от разработчика не требуется обработки событий. Достаточно щелкнуть кнопкой мыши на компоненте и начать его перетаскивание. Во втором случае компонент не может начать процесс перетаскивания, пока приложение не вызовет метод BeginDrag.
Свойство DragObject содержит значение, определяющее объект перетаскивания, ассоциированный с элементом управления. Данное свойство описано так:
property DragObject: TDragObject;
Оно предназначено только для чтения и используется в основном при создании собственных компонентов.
Свойство Enabled показывает, будет ли компонент доступен пользователю во время работы приложения. Это свойство описывается следующим образом:
property Enabled: Boolean;
Недоступный компонент (Enabled = false) отображается серым цветом. Он игнорирует события клавиатуры, мыши и таймера. Данное свойство применяется для временного ограничения доступа пользователя к компонентам. Например, если вы хотите сделать временно недоступной кнопку, нужно в свойстве Enabled кнопки установить значение false:
Button1.Enabled := false;
Свойство Font предназначено для установки шрифта, а также всех его атрибутов (размера, стиля, цвета и т. д.). Описано так:
property Font: TFont;Свойство Height применяется для задания высоты компонента. Описывается это свойство так:
property Height: Integer;Свойство HelpContext определяет номер, используемый в контекстно-зависимой справке. То есть задается номер страницы справки, которая будет отображаться на экране, когда пользователь нажмет клавишу <F1>. Данное свойство описано следующим образом:
property HelpContext: THelpContext;Свойство HelpFile описано следующим образом:
property HelpFile: String;
Данное свойство содержит имя файла, который будет использоваться приложением в качестве файла контекстно-зависимой справки.Свойство HelpKeywordпредназначено для осуществления поиска в файле контекстно-зависимой справки по ключевому слову. Данное свойство описано следующим образом:
property HelpKeyword: String;Свойство Hint применяется для задания текста всплывающей подсказки. Это свойство описано так:
property Hint: String;
Данное свойство обычно состоит из двух частей, разделяемых символом " |". Например,
Button1.Hint := "Открыть|Выбор и открытие файла рисунка";
В данном случае при наведении указателя мыши на кнопку Button1 будет выдана всплывающая подсказка "Открыть", вторая часть подсказки будет выведена в специальную область, отведенную для таких подсказок, например на панель состояния. Разработчик может пользоваться только первой частью подсказки, без использования символа "|". Кроме того, для отображения всплывающих подсказок нужно дополнительно установить свойство ShowHint в true (см. далее).Свойство Left применяется для задания координаты левого края компонента. За начало координат всех компонентов берется левый верхний угол клиентской области родительского компонента. Для форм началом координат является левый верхний угол экрана.
Данное свойство описано следующим образом:
property Left: Integer;Свойство MouseCapture используется для определения факта захвата мышью элемента управления. Данное свойство имеет логический тип и описано следующим образом:
property MouseCapture: Boolean;
Если элемент управления захвачен мышью — возвращается True, иначе —False.Свойство Name определяет имя компонента, по которому на него ссылаются другие компоненты и которое в дальнейшем используется разработчиком. Данное свойство описано так:
property Name: TComponentName;
Имя задается в процессе разработки программы и не должно изменяться во время работы программы. Kylix по умолчанию самостоятельно дает имена новым компонентам, например: Button1, Button2, Label1 и т. п. Рекомендуется изменять эти имена на более осмысленные.Свойство Parent определяет родительский компонент контейнерного типа, в пределах которого располагается данный компонент. Это свойство описано следующим образом:
property Parent: TWidgetControl;
Примечание
Важно различать два похожих свойства. Свойство Parent определяет родительский компонент, т. е. тот компонент, на котором располагается данный компонент. Свойство Owner определяет владельца компонента. Владелец — это компонент, который передается в качестве параметра в конструктор данного компонента и который владеет им. Например, форма является владельцем всех расположенных на ней компонентов и одновременно — родителем.
Свойство ParentColor указывает, будет ли данный компонент иметь такой же цвет, как и его предок. Свойство описано так:property ParentColor: Boolean;
Ecли вы хотите, чтобы компонент унаследовал значения цвета от своего предка, то установите данное свойство в true. Если это свойство будет иметь значение False, компонент будет использовать цвета, заданные в его собственных свойствах.
Свойство ParentFont предназначено для определения, будет ли для данного компонента использоваться шрифт, применяемый в родительском компоненте контейнерного типа. Например, если на форме находится кнопка, то при установке у данной кнопки свойства ParentFont в true приведет к тому, что надпись на кнопке будет выполнена тем шрифтом, который указан в свойстве Font формы. Данное свойство описано так:property ParentFont: Boolean;Свойство ParentShowHint предназначено для включения и выключения родительского свойства ShowHint. Оно описано следующим образом:
property ParentShowHint: Boolean;
Данное свойство используется для одновременного разрешения или запрещения показа всплывающих подсказок в пределах некоторой формы или компонента контейнерного типа.Свойство РорupMenu служит для сопоставления с данным компонентом всплывающего по щелчку правой кнопки мыши меню. Данное свойство описано так:
property PopupMenu: TPopupMenu;Свойство ScalingFlags служит для определения, какие атрибуты элемента управления могут изменять размеры (масштабироваться). Данное свойство описано следующим образом:
property ScalingFlags: TScalingFlags;
Тип TScalingFlags представляет собой набор флагов, которые описаны в табл. 8.17.
Флаги TScalingFlagФлаг
Таблица 8.17. Флаги TScalingFlag
Флаг | Значение |
sfLeft | Левая сторона элемента управления не может масштабироваться |
sfTop | Верх элемента управления не может масштабироваться |
sf Width | Ширина элемента управления не может масштабироваться |
sfHeight | Высота элемента управления не может масштабироваться |
sfFont | Шрифт элемента управления не может масштабироваться |
property ShowHint: Boolean;Свойство Text предназначено для задания или чтения строки текста, связанной с данным компонентом. Данное свойство описано так:
property Text: TCaption;
Это свойство применяется в компонентах типа TEdit и в компонентах-списках.Свойство Tор применяется для задания или чтения значения, определяющего координату верхнего края компонента. Данное свойство описано следующим образом:
property Top: Integer;Свойство Visible применяется для определения, будет ли виден компонент на форме во время выполнения программы. Оно описано так:
property Visible: Boolean;
Если свойство имеет значение true, то компонент будет виден, иначе — невидим.
Свойство Width применяется для установки горизонтального размера компонента, а также для чтения текущего значения ширины компонента. Данное свойство имеет целый тип и описано следующим образом:property Width: Integer;
Рассмотрим теперь свойства, характерные для класса TWidgetControl и его наследников.
Свойство Bitmap служит для задания растрового изображения, которое отображается как фоновый рисунок элемента управления. Данное свойство в классе TWidgetControl описано следующим образом:property Bitmap: TBitmap;Свойство Brush предназначено для установки цвета и кисти для закраски фонового изображения элемента управления. Данное свойство описано так:
property Brush: TBrush;Свойство ChlidHandle возвращает ссылку на элемент управления. Данная ссылка является дескриптором дочернего окна, который применяется, когда происходит вызов родительского окна. Свойство используется только для чтения и описано следующим образом:
property ChildHandle: QwidgetH; library;Свойство ControlCount возвращает число дочерних элементов управления от данного. Оно описано так:
property ControlCount: Integer;
Это свойство применяется только для чтения. Значение, хранящееся в данном свойстве, всегда на единицу больше, чем самый последний индекс дочернего элемента (см. свойство Controls ниже), т. к. первый индекс всегда равен нулю.Свойство Controls представляет собой массив, содержащий список всех дочерних элементов управления по отношению к данному элементу. Это свойство описывается следующим образом:
property Controls[Index: Integer]: TControl;
Примечаниe
He путайте свойство Controls со свойством Components. Свойство Controls содержит список всех дочерних окон от данного, а свойство Components — список всех компонентов, владельцем которых этот компонент является.
Данное свойство применяется только для чтения. Для добавления или удаления дочерних элементов управления используйте соответствующие методы InsertControl и Remove Control.
property Handle: QWidgetH read GetHandle; library;
Данное свойство применяется только для чтенияСвойство InputKeys определяет тип клавиш, которые могут применяться для ввода информации внутри данного элемента управления при получении им фокуса. Свойство описано следующим образом;
property InputKeys: TInputKeys;
Стоит сказать несколько слов о типе 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> |
property Masked: Boolean;
Принимает значение True, если окно имеет непрямоугольную форму.Свойство Palette хранит значение текущей палитры, которая используется для рисования данного элемента управления. Описано следующим образом:
property Palette: TWidgetPalette;Свойство ParentWidget служит для ссылки на родительский элемент управления, т.е. на дескриптор окна родителя данного элемента управления. Описано следующим образом:
property ParentWidget: QWidgetH;Свойство Style предназначено для задания стиля компонента. Описано так:
property Style: TWidgetStyle;Свойство TabOrder применяется для задания последовательности перехода от одного компонента формы к другому при помощи клавиши <Таb>. Свойство описано следующим образом:
property TabOrder: TTabOrder;
Нумерация осуществляется, начиная с нуля. Если задать свойству TabOrder компонента значение -1, этот компонент не сможет получить фокус при помощи клавиши <Таb>. Предположим, что на форме расположены три кнопки: Button1, Button2 и Button3. Для того чтобы фокус между этими кнопками передавался следующим образом: сначала активна кнопка Button2, затем — Button1 и потом уже Button3, нужно установить свойство TabOrder для кнопки Button1 равным 1, для Button2 — 0, а для Button3 — 2.Свойство TabStop применяется для указания возможности передачи фокуса на компонент при помощи клавиши <Таb>. Оно описывается следующим образом:
property TabStop: Boolean;
Если значение данного свойства равно true, то при помощи клавиши <Таb> можно передать фокус этому компоненту, в зависимости от его свойства TabOrder. Если значение свойства TabStop равно false, то независимо от свойства TabOrder фокус будет невозможно передать при помощи клавиши <Таb>.
Методы
Методы — это процедуры или функции, принадлежащие объекту. Методы определяют поведение объекта. Для вызова метода объекта нужно указать объект, с которым ассоциирован данный метод, затем, через точку, — название метода. Например:
Button1.Click
Вызывается метод нажатием (Click) кнопки (Button1).
Для создания метода его нужно сначала объявить внутри описания класса или компонента, содержащего данный метод. Например:
type TMyComponent = class(TObject)
. . .
procedure DoSomething; . . .
end;
Здесь, внутри описания нового компонента, мы объявляем метод DoSomething с помощью служебного слова procedure. После того как мы объявили новый метод, необходимо создать тело данного метода. Эта процедура может находиться где угодно внутри модуля, в котором был описан компонент. Например:
procedure TMyComponent.DoSomething; begin
// Здесь размещаем команды и операторы, которые должны выполняться
// при вызове метода DoSomething на выполнение end;
Заметим, что при создании процедуры DoSomething мы должны указывать его полное имя вместе с указанием имени компонента или класса
(procedure TMyComponent.DoSomething;).
Рассмотрим основные методы среды Kylix.
Duplicates установлено в dupError.
Коды клавиш
Таблица 8.19. Коды клавиш
Символическое имя клавиши | Название клавиши | Символическое имя клавиши | Название клавиши |
Key_Escape | <Esc> | Key_Period | <.> |
Key_ Tab | <Tab> | Key_ Slash | </> |
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> |
Параметр Shift является множеством, которое
Таблица 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> |
ssShift — при нажатой клавише <Shift>;
ssAlt — при нажатой клавише <Alt>;
ssCtrl — при нажатой клавише <Ctrl>.
Приведем пример использования события OnKeyDown. Предположим, что нам необходимо распознать, когда пользователь нажмет комбинацию клавиш <Ctrl>+<Shift>+<L>. В обработчике события OnKeyDown напишем следующий код:
if ( (Key = ord ('L') ) and (ssShift in Shift) and (ssCtrl in Shift) )
then ShowMessage ('Нажата комбинация клавиш <Ctrl>+<Shift>+<L>');
В вышеприведенном примере мы использовали функцию ord ( ), которая позволяет по символу клавиши получить код клавиши (в нашем случае, код клавиши <L>). Теперь всякий раз, когда фокус будет у компонента, к которому привязан данный обработчик, и как только пользователь нажмет комбинацию клавиш <Ctrl>+<Shift>+<L>, будет выводиться окно (Рисунок 8.21).
Символическое имя
Таблица 8.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> |
Коды ошибок ввода/вывода
Таблица 9.1. Коды ошибок ввода/вывода
Linux | Windows | ||
Код ошибки | Описание | Код ошибки | Описание |
2 | Нет файла или каталога | 2 | Файл не найден |
3 | Путь к файлу не найден | ||
5 | Ошибка ввода/вывода | 5 | Доступ запрещен |
13 | Доступ запрещен | ||
20 | Не является каталогом | ||
21 | Является каталогом | ||
32 | Ошибка совместного использования файла | ||
Ошибки, не зависящие от операционной системы | |||
Код ошибки | Описание | ||
100 | Достигнут конец файла | ||
101 | Диск полон | ||
102 | Файловая переменная не назначена | ||
103 | Файл не открыт | ||
104 | Файл не открыт для ввода | ||
105 | Файл не открыт для вывода | ||
106 | Ошибка ввода по формату | ||
107 | Файл уже открыт |
EIntfCastError — потомок класса Exception. Неверное использование оператора as.
EIntoverfiow — потомок класса EIntError. Превышено максимальное значение целого числа.
EInvalidArgument — потомок класса EMathError. Аргумент математической функции задан неправильно.
EInvalidCast — потомок класса Exception. Неверное использование оператора as.
EInvalidGraphic — потомок класса Exception. Нераспознаваемый графический файл.
EInvalidGraphicOperation — потомок класса Exception. Неверное использование графических операций.
EInvalidGridOperation — потомок класса Exception. Неверное использование сетки (Grid).
EInvalidHandleException. Базовый класс для ошибок при оперировании объектами TFont, TPen и Tbrush. EInvalidlmage — потомок класса EFilerError. Невозможно прочитать файл ресурсов.
EInvalidOp — потомок класса EMathError. Неизвестная операция с плавающей запятой.
EInvalidOperation — потомок класса Exception. Неверное действие над компонентом.
Примечание
Не путайте классы исключений EInvalidOp и EInvalidOperation!
EInvalidPointer — потомок класса EHeapException. Неверная операция над указателем.
EMaskException — потомок класса Exception. Ошибка сравнения имени файла по маске.
EMathError — потомок класса EExternal. Абстрактный класс исключений для математических операций над вещественными числами.
EMenuError — потомок класса Exception. Ошибка при работе с системным меню.
EOutOfMemory — потомок класса EHeapException. Ошибка распределения памяти.
EOutOfResources — потомок класса EOutOfMemory. Ошибка распределения дескрипторов окон.
EOverflow — потомок класса EMathError. Превышено максимально возможное вещественное значение.
EPackageError — потомок класса Exception. Ошибка загрузки или уничтожения пакета.
EParserError — потомок класса Exception. Ошибка преобразования текста в двоичную форму.
EPrinter — потомок класса Exception. Ошибка вывода на печатающее устройство.
EPrivilege — потомок класса EExternal. Попытка выполнения инструкции процессора, которая является недоступной при данном уровне привилегий процессора.
EPropertyConvertError — потомок класса Exception. Ошибка установки или получения значения свойства компонента.
EPropertyError — потомок класса Exception. Ошибка при установке нового значения свойства компонента.
EQtDialogException — потомок класса Exception. Ошибка при работе с Qt-диалогом.
ERangeError — потомок класса EIntError. Значение целочисленной переменной превысило максимально возможное.
EReadError — потомок класса EFilerError. Ошибка чтения данных из потока.
EReconcileError — потомок класса EDBClient. Ошибка обновления набора данных клиента.
ERegisterActionsException — потомок класса Exception. He произведена инициализация регистрации системы.
EResNotFound — потомок класса Exception. Ошибка работы с файлами ресурсов.
ESafecallException — потомок класса Exception. Ошибка при выполнении безопасного вызова процедуры.
ESocketError — потомок класса Exception. Ошибка инициализации или отключения сокета.
EstackOverf low — потомок класса EExternal. Переполнение стека.
EstreamError — потомок класса Exception. Базовый класс ошибок, связанных с потоками.
EStringListError — потомок класса Exception. Неверная работа со списком.
EThread — потомок класса Exception. Ошибка синхронизации потоков.
ETreeViewError — потомок класса Exception. Неверная работа с деревом.
EUnderflow — потомок класса EMathError. Вещественное значение слишком мало.
EUpdateError — потомок класса EDatabaseError. Ошибка обновления набора данных сервера.
EVariantError — потомок класса Exception. Ошибка при работе с типом данных Variant.
EWebBrokerException — потомок класса Exception. Ошибка при работе с объектом WebBroker.
EWriteError — потомок класса EFilerError. Ошибка при записи данных в поток.
EZeroDivide — потомок класса EMathError. Ошибка деления вещественного числа на ноль.
Типы графических объектов Kylix
Таблица 13.1. Типы графических объектов Kylix
Объект |
Описание |
Picture |
Используется как контейнер для содержания произвольного графического образа. Для того чтобы объект Picture мог содержать файлы дополнительных графических форматов, используйте метод |
Bitmap |
Мощный графический объект, который используется для создания, манипулирования (масштабирование, скроллинг, вращение, закраска) и хранения картинок как файлов на диске |
Clipboard |
Представляет собой контейнер, хранящий текст или графические образы, которые могут быть скопированы, вырезаны из приложения или вставлены в него |
Icon |
Представляет собой картинку, загруженную из файла пиктограммы |
Drawing |
Содержит файл, в котором записаны операции, требующиеся для создания изображения. Не содержит самого изображения. Использование этого объекта позволяет свободно масштабировать изображение без потери деталей и обычно требует меньше памяти, чем хранение графического образа. В то же время, отображает рисунок значительно медленнее, чем другие объекты |
Свойства объекта Canvas
Таблица 13.2. Свойства объекта Canvas
Свойство |
Описание |
Font |
Определяет шрифт, который будет использоваться для вывода текста на картинке |
Brush |
Определяет цвет и образец кисти, которыми будут заполняться графические объекты и фон канвы |
Pen |
Определяет тип пера канвы, которым будут чертиться линии и геометрические фигуры |
PenPos |
Определяет текущую позицию пера |
В табл. 13.3 перечислены методы, которые часто используются при рисовании на канве.
Методы объекта Canvas
Таблица 13.3. Методы объекта Canvas
Метод |
Описание |
Arc |
Предназначен для черчения дуги эллипса или окружности. В качестве параметров метода передаются координаты четырех точек. Первые две точки (x1, y1) и (х2, y2) определяют диагональ прямоугольника, в который вписан эллипс. Третья точка (х3, y3) задает начальную точку дуги. Точка (х4, y4) задает конечную точку дуги. Третья и четвертая точки принадлежат прямоугольнику, описывающему эллипс. Точки дуги получаются в результате пересечения прямой, проходящей через центр эллипса и точки (х3,y3) и (х4, y4). Дуга рисуется против часовой стрелки от начальной до конечной точки |
Chord |
Чертит замкнутую фигуру, границами которой являются дуга окружности или эллипса и хорда. Параметры, передаваемые в данный метод, аналогичны параметрам метода Arc |
Рисует графическое изображение, которое содержится
Таблица 13.3 (окончание)
Метод |
Описание |
StretchDraw |
Рисует графическое изображение, которое содержится в компоненте, указанном в параметре Graphic, в прямоугольную область канвы, указанную параметром Rect. Причем изображение растягивается или сжимается под размер данной области. Например, Image1. Canvas. StretchDraw (Rect (0, 0, 29, 29), Im-age2 . Picture . Bitmap) ; Уменьшает изображение, имеющее размер больше, чем 30x30 и хранящееся в компоненте Image2, и помещает его на канву компонента Image1 |
TextHeight |
Возвращает значение, равное высоте текста, который предполагается вывести на канву с использованием текущего шрифта |
TextOut |
Выводит строку текста, задаваемую параметром Text, на канву в позицию с координатами (х, y). Например, Image1. Canvas. TextOut (10, 10, 'Kylix - лучшая среда разработки под Linux ' ) ; |
TextRect |
Похож по действию на метод TextOut, только текст, выходящий за пределы определенной прямоугольной области, не выводится |
TextWidth |
Возвращает значение в пикселах, равное длине текста Text, который предполагается вывести на канву компонента текущим шрифтом |
TiledDraw |
Рисует размноженное изображение внутри указанного прямоугольника |
с одной канвы на другую.
Таблица 13.3 (продолжение)
Метод |
Описание |
CopyRect |
Копирует прямоугольную часть изображения с одной канвы на другую. Копирование осуществляется в том режиме, который , определен свойством CopyMode |
Draw |
Рисует изображение, хранящееся в объекте, который определен параметром Graphic, на канву в координаты, задаваемые параметрами х и y. Например, Image1. Canvas. Draw (5, 24, Image2. Picture. Bitmap) ; Копирует в координаты (5, 24) рисунок, находящийся на канве компонента Image2, в, канву компонента Image1 |
DrawFocusRect |
Рисует изображение пунктирного прямоугольника с автоматической установкой режима пера (свойство Mode) в pmXor. Данный метод имеет место лишь в том случае, когда подсвойство DefaultStyle свойства Style приложения установлено в dsWindows |
DrawPoint |
Отображает одиночную точку на канве с использованием текущих установок пера |
DrawPoints |
Рисует несколько точек с использованием текущих установок пера |
Ellipse |
Чертит на канве эллипс или окружность. Параметрами являются две точки (x1, y1) и (х2, y2 ), которые определяют диагональ прямоугольника, описывающего эллипс |
FillRect |
Заполняет указанную прямоугольную область канвы цветом, определенным текущим значением свойства кисти (Brush). Например, Image1. Canvas. FillRect (0, 0, 100, 100); Заполняет квадрат с главной диагональю, имеющей координаты (0, 0) и (100, 100), цветом, определенным в свойстве Color кисти |
GetClipRegion | Возвращает указатель на текущую вырезаемую область канвы |
LineTo |
Чертит на канве прямую линию, начало которой совпадает с текущим значением координат пера (значение свойства PenPos), а конец задается параметром (х, y) . Конечная точка не принадлежит линии и не отображается. После чего текущими координатами пера станет точка (х, y ) . Например, Image1. Canvas. LineTo (100, 130); Чертит линию от текущей позиции пера до точки с координатами (100, 130), не включая саму точку (100, 130), после чего значением, PenPos будет точка (100, 130) |
Таблица 13.3 (продолжение)
Метод |
Описание |
MoveTo |
Изменяет текущую позицию пера ( значение свойства PenРоs) на значение, заданное параметром (х, y). При перемещении пера на канве ничего не чертится. Метод аналогичен прямой установке значения свойства PenPos |
Pie |
Чертит замкнутый сегмент эллипса или окружности. Параметры метода аналогичны параметрам метода Arc |
PolyBezier |
Чертит на канве цветом пера Реn сглаженную кривую по заданному множеству точек, определенных в массиве Points. Начинает рисование с точки, определенной параметром Startlndex, используя следующие две точки как направляющие для изгибов кривой. Кривая заканчивается четвертой точкой массива. Например, Image1. Canvas. PolyBezier ( [Point (0, 0) , Point (100, 10), Point (20, 30) , Point (230, 100)], 0); Последний параметр, равный нулю, — это параметр Startlndex |
PolyBezierTo |
То же самое, что и PolyBezier, только после черчения линии данный метод устанавливает значение свойства PenPos в последнюю точку массива Points |
Polygon |
Чертит на канве многоугольник по заданному множеству точек, определенных в массиве Points, причем первая точка массива соединяется с последней, после чего многоугольник закрашивается цветом, определенным свойством кисти Brush. Например, Image1. Canvas. Polygon ( [Point (0, 0), Point (10, 10) , Point (20, 30) , Point (230, 100)]); |
Polyline |
Чертит на канве незамкнутый многоугольник. Аналогичен методу Polygon, только не соединяет первую и последнюю точки массива Points |
Rectangle |
Чертит на канве текущим пером Реn прямоугольник, закрашенный цветом, определенным в свойстве кисти Brush. В качестве параметров передаются координаты двух точек: левого верхнего и правого нижнего углов прямоугольника, т. е. его главная диагональ |
RoundRect |
Чертит на канве закрашенный цветом, определенным в свойстве кисти Brush, прямоугольник со скругленными углами. Два параметра (x1, y1) и (x2, y2) задают координаты углов прямoугольника (как в методе Rectangle). Два следующих параметра х3 и y3 задают эллипс с шириной х3 и высотой y3 точек. Углы прямоугольника скругляются по шаблону данного эллипса |
когда пользователь отпускает кнопку мыши
Таблица 13.4 (окончание)
Событие мыши |
Описание |
OnMouseUp |
Происходит, когда пользователь отпускает кнопку мыши в тот момент, когда указатель мыши расположен над компонентом |
События мыши
Таблица 13.4. События мыши
Событие мыши |
Описание |
OnMouseDown |
Происходит, когда пользователь нажимает кнопку мыши в тот момент, когда указатель мыши расположен над компонентом |
OnMouseMove |
Происходит, когда пользователь двигает мышью в тот момент, когда указатель мыши расположен над компонентом |
Параметры событий мыши
Таблица 13.5. Параметры событий мыши
Параметр |
Значение |
Sender |
Имя объекта, над которым произошло событие мыши |
Button |
Указывает, какая из трех кнопок мыши нажата. Может принимать значения: mbLeft — левая; mbMiddle — средняя и mbRight — правая |
Shift |
Показывает состояние кнопок <Alt>, <Ctrl> и <Shift> во время наступления события мыши |
X, Y |
Координаты клиентской части компонента, над которым произошло событие мыши |
Обработка события OnMouseDown
Всякий раз, когда пользователь нажимает любую кнопку мыши, происходит событие OnMouseDown. Для использования этого события вам нужно написать обработчик события у желаемого компонента. Например, если вы хотите обработать событие OnMouseDown, когда пользователь нажмет кнопку мыши над формой Form1, нужно в окне инспектора объектов на вкладке Events найти событие OnMouseDown для формы Form1 и дважды щелкнуть на нем. В результате Kylix создаст заготовку обработчика события нажатия кнопки мыши для формы (листинг 13.24).
Листнг 13.24.Заготовка обработчика события OnMouseDown
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
end;
Приведем пример обработки данного события (листинг 13.25). Запустите названную программу. При каждом щелчке в области формы вы увидите надпись "Здесь!" на месте, где вы щелкнули мышью (Рисунок 13.7).
Лизинг 13.25.Пример обработки события OnMouseDown
Shift: TShiftState; X, Y: Integer);
begin
Canvas.TextOut (X, Y, 'Здесь!'); { печатает текст на канве }
end;
Значения свойства Policy
Таблица 14.1. Значения свойства Policy
Значение |
Тип значения |
Возможные числовые значения для свойства Priority |
SCHED_RR |
Real Time |
0-99 |
SCHED_FIFO |
Real Time |
0-99 |
SCHED_ОTHER |
Regular |
0 |
Примечание
Значения SCHED_PR и SCHED_FIFO могут быть установлены только в том случае, когда вы вошли в Linux под администратором (root)
Для Windows-приложений свойство Priority может принимать значения, перечисленные в табл. 14. 2.
Значения свойства Priority для Windows
Таблица 14.2. Значения свойства Priority для Windows
Значение приоритета |
Приоритет |
Cоответствующее числовое значение |
Tpldle |
Данный поток выполняется, когда система не занята и не выполняются никакие другие потоки Windows не будет прекращать работу других потоков для выполнения потока, имеющего приоритет tpldle |
-15 |
TpLowest |
Низший приоритет выполнения. Данный поток занимает минимум процессорного времени |
-2 |
TpLower |
Низкий приоритет. Данный поток занимает немного больше процессорного времени, чем имеющий приоритет tpLowest |
-1 |
TpNormal |
Нормальный приоритет. Все потоки по умолчанию имеют приоритет tpNormal |
0 |
TpHigher |
Высокий приоритет. Данный поток имеет приоритет выше нормального |
1 |
TpHighest |
Высший приоритет. Данный поток имеет приоритет выше, чем tpHigher |
2 |
TpTimeCntical |
Наивысший приоритет Поток с данным приоритетом занимает максимум процессорного времени |
15 |
Примечание
Использование высших и наивысших приоритетов может привести к замедлению работы других потоков Применение данных видов приоритетов целесообразно использовать в случае, когда возникает острая необходимость в скорейшем выполнении одного из процессов
Поведение потока
при завершении его работы
Обычна при завершении своей работы поток просто освобождается. Однако иногда бывает необходимо, чтобы завершение работы и освобождение потока было согласовано с другими потоками. Например, вы можете ожидать какое-либо значение, возвращаемое одним потоком, перед выполнением другого потока. Для реализации этого вы не должны освобождать первый поток, пока второй не получит значение, возвращаемое первым. Для управления завершением работы потока существует свойство потока FreeOnTerminate. Пo умолчанию данное свойство установлено в true. При этом поток освобождается по завершении своей работы. Если же установить данное свойство в false, то вы можете сами завершить работу потока.
Кроме того, в Kylix имеется возможность прекратить выполнение одного потока подачей команды о прекращении из другого потока. Когда один поток пытается прекратить работу другого потока, он вызывает метод Terminate. В результате, свойство Terminate потока будет установлено в true, что можно проверить во время выполнения метода Execute (листинг 14.3).
Свойства компонента TDataSource
Таблица 16.1. Свойства компонента TDataSource
Свойство |
Описание |
AutoEdit |
Определяет, будут ли компоненты, отображающие данные, переключаться в режим редактирования при попытке изменения данных пользователем. Имеет тип Boolean |
DataSet |
Определяет имя набора данных, с которым связан источник данных. Имеет тип TdataSet |
Enabled |
Определяет, будут ли отображаться данные в компонентах, предназначенных для показа данных, которые связаны с этим источником данных. Имеет тип Boolean |
Name |
Определяет имя компонента TdataSource |
Tag |
Свойство, которое может использоваться по усмотрению программиста и не имеет специального назначения. Многие компоненты содержат это свойство. Свойство имеет тип Integer |
Компонент TClientDataSet представляет собой клиентский набор данных, который не зависит от типа используемой базы данных. Описание его свойств представлено в табл. 16.2.
Содержит список наименований полей таблицы,
Таблица 16.2 (окончание)
Свойство |
Описание |
IndexFieldNames |
Содержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запятой. Имеет тип String |
IndexName |
Содержит имя индекса, по которому будет произведена сортировка набора данных. Имеет тип String |
MasterSource |
Содержит имя главного источника данных при организации связи таблиц главная-подчиненная (master-detail). Имеет тип TdataSource |
MasterFields |
Содержит имена полей, по которым осуществляется связь между главной и подчиненной таблицами. Имеет тип String |
ObjectView |
Включает или выключает иерархическое представление для вложенных полей. Имеет тип Boolean |
PacKetRecord |
Определяет количество записей в одном пакете данных. Имеет тип Integer. Возможные значения: -1 — все записи; >0 — конкретное число записей; 0 — в пакет будут включаться только мета-данные |
Params |
Определяет список параметров набора данных. Имеет тип Tparams |
ProviderName |
Определяет имя зарегистрированного провайдера для сервера. Имеет тип String |
Readonly |
Определяет способ доступа к записям. Имеет тип Boolean. Если значение свойства — true, то данные доступны только для чтения. Если значение — false, то можно изменять существующие данные и записывать новые |
RemoteServer |
Определяет компонент, с помощью которого клиентский набор данных соединяется с сервером. Имеет тип TcustomRemoteServer |
StoreDefs |
Определяет, будут ли храниться определения полей и индексов в клиентском наборе данных. Имеет тип Boolean |
Tag |
Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свойство имеет тип Integer |
Свойства компонента TClientDataSet
Таблица 16.2. Свойства компонента TClientDataSet
Свойство |
Описание |
Active |
Определяет, является ли набор данных активным. Свойство имеет тип Boolean |
Aggregates |
Содержит список доступных агрегатов. Имеет тип Taggregates |
AggregatesActive |
Определяет, нужно ли производить вычисления агрегатов. Имеет тип Boolean |
AutoCalcFields |
Определяет, нужно ли генерировать событие OnCalcFields и обновлять содержимое полей. Имеет тип Boolean. Принимает значение true при открытии набора данных, при переключении набора данных в состояние DsEdit или при передаче фокуса другому компоненту на форме |
CommandText |
Содержит текст SQL-запроса. Имеет тип String. При установленном значении свойства FileName это свойство игнорируется. Свойство игнорируется также и в случае, когда в свойстве Options сброшен флажок poAllowCommandText |
ConnectionBroker |
Определяет брокера соединения с сервером. Имеет тип |
Constraints |
Определяет накладываемые ограничения на значение на уровне одной записи. Имеет тип TConstraints |
DataSetField |
Указывает на объект TDataSetField, управляющий вложенными наборами данных. Имеет тип TDataSetField |
DisableStringTrim |
Определяет, нужно ли удалять лишние пробелы в конце строки при вставке ее в таблицу базы данных. Имеет тип Boolean |
FetchOnDemand |
Определяет, должно ли приложение получать данные по мере необходимости. Имеет тип Boolean |
FieldDefs |
Содержит список полей, определяющих набор данных. Имеет тип TfieldDefs |
FileName |
Содержит имя файла, в котором хранятся кэшируемые данные. Имеет тип String |
Filter |
Задает фильтр, по которому будут выбираться данные из таблицы. Имеет тип String |
Filtered |
Определяет, включено или выключено свойство Filter. Имеет тип Boolean |
FilterOptions |
Определяет параметры фильтрации записей таблицы. Имеет тип TfilterOptions |
IndexDefs |
Содержит определения индексов. Имеет тип т IndexDefs |
Свойства компонента TDataSetProvider
Таблица 16.3. Свойства компонента TDataSetProvider
Свойство |
Описание |
Constraints |
Определяет накладываемые ограничения на значение на уровне одной записи. Имеет тип Tconstraints |
DataSet |
Определяет набор данных, с которым взаимосвязан компонент TdataSetProvider. Имеет тип TdataSet |
Exported |
Позволяет приложению осуществлять вызовы провайдера, если он расположен на сервере. Имеет тип Boolean |
Name |
Определяет имя компонента TdataSetProvider |
Options |
Содержит параметры работы с данными. Имеет тип |
ResolveToDataSet |
Определяет, будут ли автоматически применяться изменения в наборе данных или на сервере базы данных. Имеет тип Воolean |
Tag |
Свойство, которое может использоваться по усмотрению программиста и у него нет специального назначения. Свойство имеет тип Integer |
UpdateMode |
Определяет способ поиска записи, которую необходимо обновить. Имеет тип TUpdateMode. Может принимать значения: UpWhereAll — искать по всем полям; |
Содержит имя конфигурации. Имеет тип
Таблица 16.4 (окончание)
Свойство | Описание |
ConnectionName | Содержит имя конфигурации. Имеет тип String. Является аналогом свойства AliasName в Delphi |
DriverName | Содержит имя драйвера, необходимого для соединения с базой данных (DB2, Interbase, Oracle или My SQL). Имеет тип String. Данное свойство устанавливается автоматически после задания значения свойства ConnectionName |
KeepConnection | Определяет, нужно ли поддерживать соединение с сервером базы данных, если в приложении нет активных наборов данных. Имеет тип Boolean. Если связь необходимо поддерживать, установите это свойство в true, иначе — false |
LibraryName | Содержит имя библиотеки, в которой находится необходимый драйвер для связи с базой данных. Свойство имеет тип String |
LoadParamsOnConnect | Определяет, нужно ли загружать параметры соединения перед его установкой во время работы приложения. Имеет тип Boolean |
LoginPrompt | Определяет, нужно ли при установке соединения запрашивать имя пользователя и пароль. Имеет тип Boolean. Если true, то нужно, иначе — не нужно |
Name | В этом свойстве вы можете указать имя компонента TSQLConriection. Имеет тип TcomponentName |
Params | Устанавливает параметры соединения. Имеет тип TStrings |
TableScope | Устанавливает параметры видимости таблиц базы данных. Имеет тип TTableScopes и может принимать следующие значения: TsSynonym— видимые синонимы; TsSysTable — видимые системные таблицы; ТsТаblе — видимые таблицы пользователей; TsView — видимые представления |
VeridorLib | Указывает имя библиотеки клиентской части базы данных. Имеет тип String |
Свойства компонента TSQLConnection
Таблица 16.4. Свойства компонента TSQLConnection
Свойство | Описание |
Connected | Определяет, установлена ли связь с базой данных. Данное свойство имеет тип Boolean. Если связь установлена, свойство имеет значение true, иначе — false |
Свойства компонента TSQLDataSet
Таблица 16.5. Свойства компонента TSQLDataSet
Свойство | Описание |
Active | Определяет, является ли набор данных активным. Только активный набор данных может работать с записями таблиц. Свойство имеет тип Boolean. Если значение true — набор данных активен, иначе — неактивен |
CommandText | Содержит текст запроса SQL на выполнение каких-либо действий о данными. Имеет тип String |
CommandType | Определяет тип набора данных. Значение свойства имеет тип TSQLCommandType. Свойство может принимать следующие значения: CtQuery — обычный SQL-запрос; CtTable - таблица целиком, при этом автоматически будет сгенерирован запрос на выборку всех записей таблицы по всем полям; CtStoredProc — процедура, хранимая на сервере базы данных |
DataSource | Указывает источник данных для этого набора данных. Имеет тип TdataSource |
MaxBlobSize | Определяет максимальный размер BLOB-полей. Имеет тип |
ObjectView | Включает или выключает иерархические представления для вложенных полей. Имеет тип Boolean |
ParamCheck | Указывает, нужно ли обновлять список параметров при изменении текста запроса (свойство CommandText). Имеет тип Boolean |
Params | Определяет список параметров запроса. Имеет тип TParams |
SortFieldNames | Содержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запятой. Имеет тип String. Свойство активно только при установленном типе набора данных CtTable в свойстве CommandType |
SQLConnection | Содержит имя компонента TSQLConnection, с помощью которого будет осуществляться соединение с базой данных. |
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Многие компоненты содержат это свойство. Свойство имеет тип Integer |
Компонент TSQLQuery — определяет однонаправленный запрос к базе данных. В табл. 16.6 приводятся его основные свойства и их описания.
Свойства компонента TSQLQuery
Таблица 16.6. Свойства компонента TSQLQuery
Свойство | Описание |
Active | Определяет, является ли запрос активным. Только активный запрос может работать с записями таблиц. Свойство имеет тип Boolean. Если значение true — запрос активен, иначе — неактивен |
DataSource | Указывает источник данных для этого набора данных. Имеет тип |
MaxBlobSize | Определяет максимальный размер BLOB-полей. Имеет тип Integer |
ObjectView | Включает или выключает иерархические представления для вложенных полей. Имеет тип Boolean |
ParamCkeck | Указывает, нужно ли обновлять список параметров при изменении текста запроса (свойство CommandText). Имеет тип Boolean |
Params | Определяет список параметров запроса. Имеет тип TParams |
SQL | В этом свойстве указывается текст SQL-запроса. Имеет тип |
SQLConnection | Содержит имя компонента TSQLConnection, с помощью которого будет осуществляться соединение с базой данных. Имеет тип TSQLConnection |
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свойство имеет тип Integer |
Компонент TSQLStoredProc — предназначен для работы с процедурами, хранимыми на сервере базы данных. При получении данных ведет себя однонаправленно. Табл. 16.7 дает описание основных свойств этого компонента.
Определяет список параметров процедуры. Имеет
Таблица 16.7 (окончание)
Свойство | Описание |
Params | Определяет список параметров процедуры. Имеет тип Tparams |
SQLConnection | Содержит имя компонента TSQLConnection, с помощью которого будет осуществляться соединение с базой данных. Имеет тип TSQLConnection |
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свойство имеет тип Integer |
Свойства компонента TSQLStoredProc
Таблица 16.7. Свойства компонента TSQLStoredProc
Свойство | Описание |
Active | Определяет, является ли процедура, хранимая на сервере, активной. Имеет тип Boolean |
MaxBlobSize | Определяет максимальный размер BLOB-полей. Имеет тип Integer |
ObjectView | Включает или выключает иерархические представления для вложенных полей. Имеет тип Boolean |
ParamCheck | Указывает, нужно ли обновлять список параметров при изменении процедуры. Имеет тип Boolean |
Свойства компонента TSQLTable
Таблица 16.8. Свойства компонента TSQLTable
Свойство | Описание |
Active | Определяет, является ли таблица активной. Только активная таблица может работать с записями. Свойство имеет тип |
IndexFieldNames | Содержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запятой. Имеет тип String |
IndexName | Содержит имя индекса, по которому будет произведена сортировка набора данных. Имеет тип String |
MasterSource | Содержит имя главного источника данных при организации связи таблиц главная-подчиненная (master-detail). Имеет тип |
MasterFields | Содержит имена полей, по которым осуществляется связь между главной и подчиненной таблицами. Имеет тип String |
MaxBlobSize | Определяет максимальный размер BLOB-полей. Имеет тип |
ObjectView | Включает или выключает иерархические представления для вложенных полей. Имеет тип Boolean |
SQLConnection | Содержит имя компонента TSQLConnection, с помощью которого будет осуществляться соединение с базой данных. Имеет тип TSQLGonnection |
TableName | Содержит имя таблицы базы данных, с которой будет производиться работа. Имеет тип String
|
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свой- |
Компонент TSQLMonitor — предназначен для организации наблюдения за работой компонентов доступа к данным. В табл. 16.9 приведены основные свойства этого компонента.
Свойства компонента TSQLMonitor
Таблица 16.9. Свойства компонента TSQLMonitor
Свойство | Описание |
Active | Определяет, является ли монитор активным. Свойство имеет тип |
AutoSave | Определяет, будет ли производиться автоматическое сохранение журнала событий в файл, указанный в свойстве FileName данного компонента. Имеет тип Boolean |
FileName | Определяет имя файла, в который будет производиться запись журнала событий. Имеет тип String |
SQLConnection | Содержит имя компонента TSQLConnection, с помощью которого будет осуществляться соединение с базой данных. Имеет тип TSQLConnection |
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свойство имеет тип Integer |
TraceList | Данное свойство содержит журнал событий. Имеет тип Tstrings |
Компонент TSQLClientDataSet — представляет собой клиентский набор данных. Описание его основных свойств представлено в табл. 16.10.
Содержит список наименований полей таблицы,
Таблица 16.10 (окончание)
Свойство | Описание |
IndexFieldNames | Содержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запятой. Имеет тип String |
IndexName | Содержит имя индекса, по которому будет произведена сортировка набора данных. Имеет тип String |
MasterSource | Содержит имя главного источника данных при организации связи таблиц главная-подчиненная (master-detail). Имеет тип TdataSource |
MasterFields | Содержит имена полей, по которым осуществляется связь между главной и подчиненной таблицей. Имеет тип String |
ObjectView | Включает или выключает иерархические представления для вложенных полей. Имеет тип Boolean |
Options | Содержит параметры работы с данными. Имеет тип TproviderOptions |
PacketRecord | Определяет количество записей в одном пакете данных. Имеет тип Integer. Возможные значения: -1 — все записи; >0 — конкретное число записей; 0 — в пакет будут включаться только мета-данные |
Params | Определяет список параметров набора данных. Имеет тип Tparams |
Readonly | Определяет способ доступа к записям. Имеет тип Boolean. Если значение свойства — true, то данные доступны только для чтения. Если значение — false, то можно изменять существующие данные и записывать новые |
Tag | Свойство, которое может использоваться по усмотрению программиста, и у него нет специального назначения. Свойство имеет тип Integer |
UpdateMode | Определяет способ поиска записи, которую необходимо обновить. Имеет тип TupdateMode. Может принимать значения: UpWhereAll — искать по всем полям; UpWhereChanged — искать по ключевым и измененным полям; UpWhereKeyOnly — искать только по ключевым полям |
Имеет тип String. При установленном
Таблица 16.10 (продолжение)
Свойство | Описание |
CommandText | Содержит текст SQL-запроса. Имеет тип String. При установленном значении свойства FileName это свойство игнорируется. Свойство игнорируется также и в случае, когда в свойстве Options сброшен флажок poAllowCommandText |
CommandType | Определяет тип набора данных. Значение свойства имеет тип TSQLCommandType. Свойство может принимать следующие значения: Ct Query — обычный SQL-запрос; CtTable — таблица целиком, при этом автоматически будет сгенерирован запрос на выборку всех записей таблицы по всем полям; CtStoredProc — процедура, хранимая на сервере базы данных |
ConnectionName | Содержит имя конфигурации. Имеет тип String. Является аналогом свойства AliasName в Delphi |
Constraints | Определяет накладываемые ограничения на значение на уровне одной записи. Имеет тип Tconstraints |
DBConnection | Определяет имя компонента TSQLConnection, с помощью которого будет производиться работа с базой данных. Имеет тип TSQLConnection |
DisableStringTrim | Определяет, нужно ли удалять лишние пробелы в конце строки при вставке ее в таблицу базы данных. Имеет тип Boolean |
FetchOnDemand | Определяет, должно ли приложение получать данные по мере необходимости. Имеет тип Boolean |
FieldDefs | Содержит список полей, определяющих набор данных. Имеет тип TfieldDefs |
FileName | Содержит имя файла, в котором хранятся кэшируемые данные. Имеет тип String |
Filter | Задает фильтр, по которому будут выбираться данные из таблицы. Имеет тип String |
Filtered | Определяет, включено или выключено свойство Filter. Имеет тип Boolean |
FilterOptions | Определяет параметры фильтрации записей таблицы. Имеет тип TfilterOptions |
IndexDefs | Содержит определения индексов. Имеет тип TindexDefs |
Свойства компонента TSQLClientDataSet
Таблица 16.10. Свойства компонента TSQLClientDataSet
Свойство | Описание |
Active | Определяет, является ли набор данных активным. Свойство имеет тип Boolean |
Aggregates | Содержит список доступных агрегатов. Имеет тип |
AggregatesActive | Определяет, нужно ли производить вычисления агрегатов. Имеет тип Boolean |
AutoCalcFields | Определяет, нужно ли генерировать событие OnCalcFields и обновлять содержимое полей. Имеет тип Boolean. Принимает значение true при открытии набора данных, при переключении набора данных в состояние DsEdit или при передаче фокуса другому компоненту на форме |
Основные операторы определения данных
Таблица 17.1. Основные операторы определения данных
Оператор |
Описание |
CREATE TABLE |
Предназначен для создания таблицы базы данных |
ALTER TABLE |
Удаляет таблицу |
DROP TABLE |
Изменяет структуру таблицы |
CREATE INDEX |
Создает индекс |
DROP INDEX |
Удаляет индекс |
CREATE VIEW |
Создает представление |
DROP VIEW |
Удаляет представление |
Операторы управления данными — предназначены для управления привилегиями доступа к данным. Основные операторы представлены в табл. 17.2.
Основные операторы управления данными
Таблица 17.2. Основные операторы управления данными
Оператор |
Описание |
GRAND |
Назначает привилегии пользователям |
REVOKE |
Удаляет привилегии пользователей |
Операторы манипулирования данными — предназначены для работы с записями таблиц. Основные операторы кратко описаны в табл. 17.3.
Основные операторы манипулирования данными
Таблица 17.3. Основные операторы манипулирования данными
Оператор |
Описание |
SELECT |
Предназначен для выборки записей по определенному формату |
UPDATE |
Предназначен для изменения и обновления записей |
INSERT |
Вставляет новые записи в таблицу |
DELETE |
Удаляет записи из таблицы |
Использование приведенных в табл. 17.1—17.3 операторов мы рассмотрим далее в этой главе.
Примечание
Обратите внимание на тот факт, что проверка синтаксиса запроса происходит только во время работы приложения. Компилятор Kylix не обрабатывает SQL-запросы во время разработки приложения.
Результатом выполнения запроса обычно является набор данных, который называется результирующим набором данных.
Осталось отметить, что регистр букв команд SQL-запросов не влияет на их выполнение. Мы для наглядности будем применять заглавные буквы для операторов языка SQL. Точка с запятой также не обязательна в конце каждой SQL-команды. Элементы списков, такие как имена таблиц и полей, обязательно разделяются запятыми. Имена таблиц и полей заключаются в одинарные или двойные кавычки, например 'Number', "Table 1". В случае если имя не содержит пробелов и других специальных символов, его можно не заключать в кавычки.
Основные статистические функции
Таблица 17.4. Основные статистические функции
Функция |
Описание |
AVG ( ) |
Получение среднего значения |
COUNT ( ) |
Определяет количество значений |
COUNT ( * ) |
Определяет количество ненулевых значений |
MAX ( ) |
Максимальное значение |
MIN( ) |
Минимальное значение |
SUM ( ) |
Сумма значений |
Строковые функции — функции, предназначенные для работы со строковыми значениями. Наиболее часто используемые из них представлены в табл. 17.5.
S FROM N1 TO
Таблица 17.5 (окончание)
Функция |
Описание |
SUBSTRING ( S FROM N1 TO N2) |
Выделяет из строки S подстроку, начиная с символа N1 и заканчивая символом N2 |
TRIM(S) |
Удаляет в начале и конце строки S лишние пробелы |
UPPER (S) |
Преобразует символы строки S в символы верхнего регистра |
Основные строковые функции
Таблица 17.5. Основные строковые функции
Функция |
Описание |
| | |
Слияние (конкатенация) двух строк |
САSТ (<Выражение> AS <Тип>) |
Приводит выражение <Выражение> к типу <Тип> |
LOWER ( S ) |
Преобразует символы строки S в символы нижнего регистра |
Определения полей
Таблица 18.1. Определения полей
Имя поля | Описание | Тип данных | Размер |
ID | счетчик | ftAutoInc | 0 |
Name | имя клиента | FtString | 50 |
Поля определяемые в свойстве ChlidDefs
Таблица 18.2. Поля, определяемые в свойстве ChlidDefs
Имя поля | Описание | Тип данных | Размер |
ID | счетчик | FtAutoInс | 0 |
OrderName | описание заказа | FtString | 20 |
Price | цена заказа | FtCurrency | 0 |
Осталось только на основе описанных определений создать набор данных (щелкнув правой кнопкой мыши и выбрав пункт выпадающего меню Create Data Set). Затем сохранить в файл (Save to MyBase xml table) и на основе этих определений явным образом создать поля (дважды щелкнув на Clients, затем щелнув правой кнопкой мыши и выбрав пункт Add all fields). Откроем созданный xml-файл (листинг 18.2).
Базовые классы CLX
Таблица 19.1. Базовые классы CLX
Класс |
Возможности класса |
TObject |
Классы, предком которых является данный класс, не являются компонентами. Данный класс применяется при создании объектов, которые обычно являются предками для других компонентов |
TCoraponent |
Применяется для создания невизуальных компонентов |
TGraphicControl |
Применяется для создания не оконных компонентов, т. е. компонентов без дескриптора окна. Потомки данного класса размещаются в клиентской области своих родительских компонентов и не требуют системных ресурсов |
TWidgetControl |
Применяется для создания компонентов, имеющих дескриптор окна. Данные компоненты являются компонентами оконного типа и могут содержать в себе другие компоненты |
TCustomControl |
Данный класс является потомком TWinControl и дополняет его областью вывода (канвой). В этот класс добавлен метод Paint. Рекомендуется использовать такой класс для создания пользовательских оконных компонентов |
Библиотека визуальных компонентов содержит несколько
Таблица 19.1 (окончание)
Класс |
Возможности класса |
TCustomClassName |
Библиотека визуальных компонентов содержит несколько классов, у которых не все свойства объявлены как published, т. е. доступны из других модулей, но на основе данных классов можно создавать классы-потомки, в которых можно объявлять данные свойства. Таким образом, разработчик может создать несколько идентичных классов на основе одного класса ClassName и в каждом из этих классов определять необходимые свойства из набора предопределенных свойств |
TComponentName |
Позволяет создавать компоненты-потомки, предками которых являются обычные компоненты или классы CLX Kylix. Таким образом, если перед разработчиком стоит задача расширить возможности какого-либо компонента Kylix, можно использовать данный класс |
Размещение методов компонента в различных секциях
Таблица 19.2. Размещение методов компонента в различных секциях
Секция |
Размещаемые методы |
Private |
В данной секции лучше всего размещать те методы, которые не могут изменяться в компонентах-потомках. Данные методы не доступны вне данного компонента |
Protected |
В этой секции размещают методы, которые будут доступны для изменения в компонентах-потомках |
Public |
Данная секция предназначена для размещения методов, которые доступны любому пользователю компонента. Доступ полный во время работы приложения, но не во время разработки, т. е. данные методы недоступны в окне инспектора объектов |
Published |
В этой секции размещаются свойства компонента, которые доступны во время разработки приложения в окне инспектора объектов |
Типы файлов пакетов
Таблица 20.1. Типы файлов пакетов
Расширение файла |
Содержание файла |
dpk |
Исходный файл пакета, содержащий список модулей данного пакета. Он создается при запуске редактора пакета (по своему назначению и функциональности похож на файл проекта Kylix .dpr) |
dcp |
Двоичный файл, содержащий заголовок пакета и описание всех файлов dcp пакета, включая всю символьную информацию, которая требуется для компилятора. Всего один файл данного типа создается для одного пакета |
dpu |
Двоичный файл, содержащий текст модуля, находящийся в пакете. Для каждого модуля создается один файл dpu |
so |
Файл пакета, используемого во время работы приложения. Этот файл является аналогом библиотеки разделяемых объектов (so) Linux, которая содержит специфичные характеристики среды Kylix. Если это пакет времени выполнения, то вы должны передавать данный пакет пользователю вместе с файлом приложения. В случае, если это пакет разработки, он должен распространяться среди программистов, использующих его для написания приложений |
Основные runtime пакеты Kylix
Таблица 20.2. Основные runtime пакеты Kylix
Имя файла пакета |
Модули, входящие в пакет |
bplclx.so.6 |
Classes, Consts, Contnrs, IniFiles, MaskUtils, QactnList, QButtons, Qclipbrd, QcomCtrls, QcomStrs, QConsts, Qcontrols, QDialogs, QextCtrls, QForms, Qgraphics, QGrids, QImgList, QMask, QMenus, Qsearch, QStdActns, QStdCtrls, QStyle, QTypes, SyncObjs, TypInfo |
bpldataclx. so. 6 |
DB, DBClient, DBCommon, DBConnAdmin, DBConsts, DBXpress, DSIntf, MidConst, Midas, Provider, QDBCtrls, QDBGrids, SqlConst, SqlExpr |
Рассмотрим теперь пакеты разработки, которые поставляются вместе с Kylix (табл. 20.3). Напомним, что данные пакеты используются IDE Kylix для установки компонентов в палитру компонентов, задания свойств компонентов и многого другого.
Основные designtime пакеты Kylix
Таблица 20.3. Основные design-time пакеты Kylix
Имя файла пакета |
Вкладки палитры компонентов |
dclstd |
Standard, Additional, Common Controls, Dialogs |
dcldbdesign |
Data Controls, dbExpress, Data Access |
dclnet |
Internet |
dclindy |
Indy Clients, Indy Servers, Indy Mlsc |
Все вышеперечисленные пакеты разработки вызывают при своей работе пакеты времени выполнения. Например, пакет dclstd вызывает bplclx. Первый пакет содержит код, который позволяет делать доступными многие компоненты, входящие во второй пакет на палитре компонентов Kylix.
В дополнение ко всем рассмотренным выше пакетам вы можете устанавливать в IDE пакеты собственного производства, а также пакеты, созданные другими разработчиками. Пакет Kylix dclusr является стандартным контейнером для новых компонентов.
Директивы компилятора пакетов
Таблица 20.4. Директивы компилятора пакетов
Директива |
Применение |
{$IMPLICITBUILD OFF} |
Служит для предотвращения перекомпиляции пакета. Применяется в тех случаях, когда пакет не изменяется |
{$G-} или {IMPORTEDDATA OFF} |
Применяется для предотвращения размещения модуля внутри пакета. Данная директива размещается внутри модуля. Желательно, чтобы этот модуль был напрямую связан с приложением |
{ $WEAKPACKAGEUNIT ON} |
Когда в файле модуля встречается данная директива, компилятор опускает данный модуль из файла so и создает локальную копию модуля тогда, когда это необходимо (при вызове данного модуля из приложения или из пакета). Модуль, имеющий данную директиву, называется слабым пакетом (weakly packaged) |
{ $DENYPACKAGEUNIT ON } |
То же, что и { IMPORTEDDATA OFF} |
{$DESIGNONLY ON} |
Компилирует пакет как пакет design-time |
{$RUNONLY ON} |
Компилирует пакет как пакет runtime |
Рассмотрим более подробно директиву {$WEAKPACKAGEUNIT}.
Слабый пакет применяется, когда пакет ссылается на отсутствующие библиотеки so. Данная директива используется очень редко. Она позволяет обрабатывать специфические ситуации. Например, есть два компонента (в разных пакетах), которые обращаются к одному и тому же интерфейсному модулю so. Если приложение будет использовать сразу оба компонента, это приведет к загрузке двух экземпляров so, при этом могут возникнуть конфликты инициализации и использования глобальных переменных.
Примечание
Обратите внимание, что когда вы поставляете откомпилированную версию приложения вместе со всеми необходимыми пакетами, вам следует учитывать, что должна совпадать версия пакета. То есть пакет, созданный в Kylix более новой версии, не будет работать вместе с приложением, созданным в Kylix старой версии.