Общий обзор языка
Общий обзор языка
Общий обзор языка В этой главе мы расскажем о языке Object Pascal. Для начала, небольшой исторический экскурс в историю языка Pascal. Исторически первый, недоступный широкой аудитории технич...
Типы данных
Типы данных Эта глава представляет обзор типов данных, которые имеются в языке Object Pascal. Мы рассмотрим как простые типы данных, так и структурные, вариантные и процедурные типы данных. К...
Интерфейсы
Интерфейсы В этой главе мы рассмотрим, что такое интерфейс и где он применяется. Кроме того, вы узнаете, что такое графический интерфейс пользователя, и познакомитесь с методами создания SDI- и...
Листинг 10 1 Объявление интерфейса
Листинг 10.1.Объявление интерфейса typeIEdit = interface procedure Copy; stdcall; procedure Cut; stdcall; procedure Paste; stdcall; function Undo: Boolean; stdcall; end; Примечание Те...
Листинг 10 2 Объявление класса содержащего интерфейс
Листинг 10.2.Объявление класса, содержащего интерфейс TEditor = class(TInterfacedObject, IEdit) procedure Copy; stdcall; procedure Cut; stdcall; procedure Paste; stdcall; function Undo:...
Интерфейс IUnknown
Интерфейс IUnknown По аналогии с наследованием классов, предком которых является базовый класс TObject, все интерфейсы являются прямыми или косвенными наследниками интерфейса IUnknown. Этот ба...
Листинг 10 3 Описание базового интерфейса IUnknown
Листинг 10.3.Описание базового интерфейса IUnknown type IUnknown = interface [ '{ 00000000-0000-0000-C000-000000000046} ' ] function QueryInterface(const IID: TGUID; out Obj): Integer; stdcal...
Класс TlnterfacedObject
Класс TlnterfacedObject В CLX Kylix определен класс TInterfacedObject, который служит базовым классом для объектов интерфейса. Данный класс определен в модуле Kylix System (листинг 10.4)....
Листинг 10 4 Определение класса TInterfacedObject
Листинг 10.4. Определение класса TInterfacedObject type TInterfacedObject = class (TObject, IInterface) protected FRefCount: Integer; function QueryInterface(const IID: TGUID; out Obj)...
Использование оператора as
Использование оператора as Объекты, поддерживающие интерфейсы, могут использовать оператор as для динамического присоединения интерфейса. Например, procedurePaintObjects(P: TInterfacedObject)...
Использование ключевого слова implements
Использование ключевого слова implements Многие классы CLX Kylix имеют в качестве некоторых своих свойств объекты. Кроме того, вы можете применять в качестве свойств класса интерфейсы. В том сл...
Листинг 10 5 Использование ключевого слова implements
Листинг 10.5. Использование ключевого слова implements unit cadapt; type IRGB8bit = interface ['{1d76360a-f4f5-lldl-87d4-00c04fbl7199}'] function Red: Byte; function Green: B...
Графический интерфейс пользователя
Графический интерфейс пользователя....
Создание SDI и MDIприложений
Создание SDI- и MDI-приложений Kylix позволяет создавать приложения двух моделей пользовательского интерфейса: одиночный интерфейс документа (Single document interface, SDI), многооконный...
Рисунок 10 1 Диалоговое окно New Items
Рисунок 10.1. Диалоговое окно New Items 2. Щелкните на пиктограмме Application. 3. Нажмите кнопку ОК. Для создания нового MDI-приложения выполните следующие шаги: 1. Выберите в главном ме...
Рисунок 10 2 Вкладка Projects
Рисунок 10.2. Вкладка Projects В MDI-приложении главная форма содержит несколько дочерних форм, которые могут размещаться внутри главной, но не могут выходить за ее пределы. Для определения,...
Рисунок 10 3 Главная форма MDIприложения
Рисунок 10.3. Главная форма MDI-приложения Более того, данная форма имеет необходимые компоненты для работы со многими дочерними окнами, а также главное меню для работы с файлами и окнами. К...
Рисунок 10 4 Три расположенных рядом дочерних окна внутри главной формы
Рисунок 10.4. Три расположенных рядом дочерних окна внутри главной формы Запустите эту форму и попробуйте создать новые дочерние окна с помощью пункта меню File/New или нажатия на соответств...
Листинг 10 6 Код автоматически создаваемой для MDIприложения
Листинг 10.6.Код,автоматически создаваемой для MDI-приложения unit clxmain; interface uses SysUtils, Classes, QForms, OImgList , QStdActns, QActnList , QDialogs, QMenus, QTypes, QComCtrls, QCon...
Консольные приложения
Консольные приложения Консольные приложения — это 32-разрядные приложения, которые могут работать без загруженного графического интерфейса Linux. Для создания нового консольного приложения вы...
Рисунок 10 5 Пиктограмма Console Application
Рисунок 10.5. Пиктограмма Console Application Kylix создаст файл проекта для консольного приложения и покажет окно редактора кода с текстом, приведенным в листинге 10.7....
Листинг 10 7 Заготовка для консольного приложения
Листинг 10.7. Заготовка для консольного приложения program Project1;{$APPTYPE CONSOLE} // Директива компилятора, означающая, что приложение // будет консольным begin en...
Алфавит и словарь языка
Алфавит и словарь языкаВ алфавит языка Object Pascal входят следующие символы: набор символов ASCII, включающий буквы латинского алфавита от а до z и от А до z и пробел, а также цифры от о до 9; с...
Структура программы
Структура программыТекст программы состоит из строк, в каждой из которых может находиться одно или несколько слов. Строка может начинаться с любой позиции, на размер компилируемой программы это не...
Комментарии
КомментарииКомментарий — это текст, который игнорируется компилятором и нужен для пояснения работы отдельных частей программы. Комментарии широко используются программистами для быстрого понимания...
Операторы
ОператорыОператор — это законченное предложение языка Object Pascal, которое выполняет какое-либо действие. Операторы могут быть: простые; структурированные.Простые операторы — это операторы, кото...
Директивы компилятора
Директивы компилятораДирективы компилятора — это указания компилятору на выполнение каких-либо действий. Для записи директив компилятора используют символы:{$ директива} либо( * директива *)Все ди...
Работа с сокетами
Работа с сокетами В этой главе мы рассмотрим некоторые сетевые возможности, предоставляемые средой Kylix на примере работы с сокетами. Сокеты — это специальные компоненты, позволяющие вашему...
Листинг 11 1 Список сетевых услуг содержащийся в файле services
Листинг 11.1.Список сетевых услуг,содержащийся в файле services # /etc/services: # $Id: services,v 1.4 2000/05/15 15:54:48 chmouel Exp $ # # Сетевые услуги Интернет # # номера портов как для...
Создание справочной
Создание справочной...
Системы
системы В этой главе мы рассмотрим принципы, по которым подключается файл справки к вашему приложению. CLX не обеспечивает прямую поддержку отображения файла справки. Он обеспечивает механиз...
Листинги всех трех файлов приводятся в конце книги в Приложении 2
Листинги всех трех файлов приводятся в конце книги, в Приложении 2....
Работа с графикой
Работа с графикой...
В Kylix
в Kylix Из этой главы вы узнаете, как с помощью Kylix можно создавать приложения, использующие графику. Вы научитесь работать с объектом канвы или холста (Canvas), рисовать различные фигуры,...
Обновление экрана
Обновление экрана Во время работы приложения многие объекты на экране изменяют свое состояние. Может измениться текст или графика, содержащаяся внутри объекта. Для того чтобы эти изменения отоб...
Рисунок 13 1 Форма приложения
Рисунок 13.1. Форма приложения Напишем в обработчике события OnPaint формы Form1 следующий код (листинг 13.1):...
Листинг 13 1 Код обработки события OnPaint
Листинг 13.1.Код обработки события OnPaint procedure TForm1.FormPaint(Sender: TObject); begin messagedlg('Произошло обновление формы' ,mtInformation, [mbOK], 0); end; Теперь напишем код обработ...
Листинг 13 2 Код обработки события OnClick
Листинг 13.2.Код обработки события OnClick procedure TForm1.Button1Click(Sender: TObject); begin Form1.Refresh; // Вызываем метод обновления формы end; Запустим приложение на выполнение. Сраз...
Рисунок 13 2 Информационное окно извещающее об обновлении формы
Рисунок 13.2. Информационное окно, извещающее об обновлении формы Если вы используете компонент TImage для отображения графики на форме, вам не нужно будет заботиться об обновлении графическ...
Типы графических объектов
Типы графических объектов CLX Kylix предоставляет программисту несколько графических объектов, которые имеют собственные методы для рисования на канве, а также для загрузки и сохранения изображ...
Таблица 13 1 Типы графических объектов Kylix
Таблица 13.1. Типы графических объектов Kylix Объект Описание Picture Используется как контейнер для содержания про...
Таблица 13 2 Свойства объекта Canvas
Таблица 13.2. Свойства объекта Canvas Свойство Описание Font Определяет шрифт, который будет использоваться для выво...
Таблица 13 3 Методы объекта Canvas
Таблица 13.3. Методы объекта Canvas Метод Описание Arc Предназначен для черчения дуги эллипса или окружности. В каче...
Таблица 13 3 (продолжение)
Таблица 13.3 (продолжение) Метод Описание CopyRect Копирует прямоугольную часть изображения с одной канвы на другую....
Таблица 13 3 (продолжение)
Таблица 13.3 (продолжение) Метод Описание MoveTo Изменяет текущую позицию пера (значение свойства PenРоs) на значени...
Таблица 13 3 (окончание)
Таблица 13.3 (окончание) Метод Описание StretchDraw Рисует графическое изображение, которое содержится в компонент...
Использование пера
Использование пера Свойство Реn позволяет устанавливать атрибуты пера, которым производится рисование линий и точек, а также других геометрических фигур. Перо имеет четыре собственных свойств...
Листинг 13 3 Установка значения цвета пера
Листинг 13.3. Установка значения цвета пера procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Color := PenColor.ForegroundColor; end; Ширина пера Ширина пера определяет толщин...
Листинг 13 4 Установка ширины пера
Листинг 13.4.Установка ширины пера procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Width := 5; end; Стиль пера Свойство Style позволяет вам устанавливать различные стили нач...
Листинг 13 5 Смена стилей пера
Листинг 13.5. Смена стилей пера procedure TForm1.Button1Click(Sender: TObject); begin with Canvas.Pen do begin Style = psSolid Style = psDash Style = psDot Style =...
Использование кисти
Использование кисти Свойство Brush канвы позволяет вам указывать, каким образом будет Производиться заполнение областей и геометрических фигур. Кисть имеет три свойства: Color — цвет кист...
Листинг 13 6 Установка цвета кисти
Листинг 13.6.Установка цвета кисти procedure TForm1.Button1Click(Sender: TOtrject); begin Canvas.Brush.Color := clBlue; end; Стиль кисти Стиль кисти определяет, каким образом будет заполнятьс...
Листинг 13 7 Установка стииля кисти
Листинг 13.7. Установка стииля кисти procedure TForm1.Button1Click(Sender: TObject); begin with Canvas.Brush do begin Style = bsSolid Style = bsClear Style = bsHorizont...
Листинг 13 8 Загрузка графического образа из файла
Листинг 13.8.Загрузка графического образа из файла var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('MyBitmap.bmp'); Form1.Canvas.Brush.Bitmap :=...
Использование методов объекта Canvas
Использование методов объекта Canvas В этой части главы мы рассмотрим методы объекта Canvas, которые позволяют рисовать простые графические объекты. Рисование линий и ломаных Объект канвы поз...
Листинг 13 9 Пример рисования прямых линий procedure TForm1 FormPaint(Sender TObject); begin
Листинг 13.9. Пример рисования прямых линийprocedure TForm1.FormPaint(Sender: TObject); begin with Canvas do begin MoveTo(0, 0); LineTo(ClientWidth, ClientHeight); MoveTo...
Рисунок 13 3 Форма с диагональными линиями
Рисунок 13.3. Форма с диагональными линиями Для рисования ломаных линий можно воспользоваться специальным методом Polyline. Параметрами данного метода являются элементы массива Points. Прив...
Рисунок 13 4 Ломаная линия
Рисунок 13.4. Ломаная линия Рисование линий с помощью метода Polyline аналогично рисованию нескольких линий с помощью методов MoveTo и LinеТо. Ниже приведен пример (листинг 13.10), который...
Листинг 13 10 Построение ломанной линии
Листинг 13.10.Построение ломанной линии with Canvas do begin MoveTo(0, 0); LineTo(12, 14); LineTo(50, 30); LineTo(130, 120); LineTo(2l0,132); end; Примечание Если вы рисуете...
Листинг 13 11 Прямоугольник со вписанным эллипсом
Листинг 13.11.Прямоугольник со вписанным эллипсом procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Rectangle(0, 0, ClientWidth div 2, ClientHeight div 2); Canvas.Ellipse(0, 0, Clie...
Рисунок 13 5 Эллипс вписанный в прямоугольник
Рисунок 13.5. Эллипс, вписанный в прямоугольник Нижеприведенный пример (листинг 13.12) рисует прямоугольник со скругленными углами, которые скруглены по шаблону окружности, с диаметром 10 то...
Листинг 13 12 Прямоугольник со скругленными углами procedure TForm1 FormPaint{Sender TObject); begin
Листинг 13.12.Прямоугольник со скругленными угламиprocedure TForm1.FormPaint{Sender: TObject); begin Canvas.RoundRect(0, 0, ClientWidth div 2, ClientHeight div 2, 10, 10); end;...
Рисунок 13 6 Прямоугольник со скругленными углами
Рисунок 13.6. Прямоугольник со скругленными углами Для рисования многоугольников с любым количеством углов и сторон вы можете использовать метод Polygon. Метод Polygon содержит в качестве п...
Создание приложения наподобие графического редактора
Создание приложения наподобие графического редактора В графическом редакторе обычно присутствует панель инструментов, на которой располагаются кнопки. Каждая из кнопок позволяет рисовать различ...
Листинг 13 13 Объявление типа и переменных
Листинг 13.13.Объявление типа и переменных type TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect); TForm1 = class(TForm) . . . { объявление методов } public Drawing: Boolean; Orig...
Листинг 13 14 Обработчики нажатия кнопок
Листинг 13.14. Обработчики нажатия кнопокprocedure TForm1.LineButtonClick{Sender: TObject); { Кнопка линии } beginDrawingTool := dtLine; end;procedure TForm1.RectangleButtonClick(Sender: TObject);...
Листинг 13 15 Обработчик события OnMouseup
Листинг 13.15.Обработчик события OnMouseup procedure TForm1. FormMouseUp (Sender: TObject; Button TMouseButton; Shift: TShiftState; X ,Y: Integer); begin case DrawingTool of dtLine: be...
Листинг 13 16 Обработчик события OnMouseMove
Листинг 13.16.Обработчик события OnMouseMove procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if Drawing thenbegin Canvas.Pen.Mode := pmNotXor; c...
Другие методы работы с графикой в Куliх
Другие методы работы с графикой в Куliх Вообще, вам не требуется наличие специальных компонентов для работы с графическими возможностями Kylix. Вы можете создавать, рисовать, сохранять и уничто...
Листинг 13 17 Создание объекта Bitmap
Листинг 13.17.Создание объекта Bitmap procedure TForm1.FormCreate(Sender: TObject); var Bitmap: TBitmap; {временная переменная для хранения графического образа}begin Bitmap := TBitmap.Create;...
Листинг 13 18 Прямая работа с Bitmap
Листинг 13.18.Прямая работа с Bitmap procedure TForm1.Button1Click(Sender: TObject);// Данный пример показывает, как можно рисовать напрямую в Bitmapvar х,y : integer; Bitmap : TBitmap; P :...
Загрузка и сохранение графических файлов
Загрузка и сохранение графических файлов Графические образы, которые используются в приложении, иногда требуется сохранить для дальнейшего использования. Компонент Image позволяет достаточно пр...
Листинг 13 29 Загрузка графики из файла
Листинг 13.29.Загрузка графики из файла procedure TForm1.Open1Click (Sender: TObject); var CurrentFile: String; begin if CpenDialogl.Execute then begin CurrentFile := OpenDialog1.F...
Листинг 13 20 Сохранение графики в файл
Листинг 13.20.Сохранение графики в файл var Form1: TForm1 ; CurrentFile:String; implementation{$R *.XFM}procedure TForm1.Save1Click(Sender: TObject);beginif CurrentFile <> '' then Ima...
Работа с буфером обмена
Работа с буфером обмена Вы можете использовать системный буфер обмена для копирования и вставки графики внутрь вашего приложения, а также для переноса графики из вашего приложения в другие и из...
Листинг 13 21 Копирование графики в буфер обмена
Листинг 13.21.Копирование графики в буфер обмена procedure TForm1.Copy1Click{Sender: TObject); begin Clipboard.Assign(Image.Picture) end. Вырезание графики в буфер обмена Вырезание графики в...
Листинг 13 22 Вырезание графики в буфер обмена
Листинг 13.22. Вырезание графики в буфер обмена procedure TForm1.Cut1Click(Sender: TObject); var ARect: TRect; begin Copy1Click{Sender); { копирование картинки в буфер обмена }with Image.Canv...
Листинг 13 23 Копирование графики
Листинг 13.23.Копирование графики из буфера обменаprocedure TForm1.PasteButtonClick(Sender: TObject); var Bitmap: TBitmap; begin if Clipboard.Provides(SDelphiBitmap) then { в буфере обменаиз...
Работа с мышью
Работа с мышью Ваше приложение может реагировать на действия пользователя, которые он выполняет с помощью мыши. В этой части главы мы расскажем, как можно обрабатывать события мыши. Событие мы...
Таблица 13 4 События мыши
Таблица 13.4. События мыши Событие мыши Описание OnMouseDown Происходит, когда пользователь нажимает кнопку мыши в...
Таблица 13 4 (окончание)
Таблица 13.4 (окончание) Событие мыши Описание OnMouseUp Происходит, когда пользователь отпускает кнопку мыши в тот...
Таблица 13 5 Параметры событий мыши
Таблица 13.5. Параметры событий мыши Параметр Значение Sender Имя объекта, над которым произошло событие мыши...
Рисунок 13 7 Обработка события OnMouseDown
Рисунок 13.7. Обработка события OnMouseDown Еще один пример (листинг 13.26) устанавливает текущую позицию пера в координаты, в которых пользователь щелкнул мышью....
Листинг 13 26 Установка позиции пера в координатах указаннных пользователем
Листинг 13.26. Установка позиции пера в координатах, указаннных пользователем procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);begin Canv...
Листинг 13 27 Пример рисования линии
Листинг 13.27. Пример рисования линии procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);begin Canvas.MoveTo(X, Y) ; { установка позиции п...
Рисунок 13 8 Пример рисования линий
Рисунок 13.8. Пример рисования линий Обработка события OnMouseMove Данное событие происходит периодически во время перемещения мыши. Для обработки этого события нужно написать программу-обр...
Листинг 13 28 Пример обработки
Листинг 13.28.Пример обработки события OnMouseMoveprocedure TForm1.FormMouseMove(Sender: ТОbject;Button: TMouseButton;Shift: TShiftState; X, Y: Integer); begin Canvas.LineTo(X, Y); { рисует ли...
Рисунок 13 9 Обработка события OnMouseMove
Рисунок 13.9. Обработка события OnMouseMove...
Создание простой игровой программы
Создание простой игровой программы Теперь вы можете создавать графические приложения практически любой сложности. Рассмотрим пример создания игры "Крестики-нолики" на поле 10x10 клето...
Рисунок 13 10 Формазаготовка для игровой программы
Рисунок 13.10. Форма-заготовка для игровой программы...
Листинг 13 29 Листинг игровой программы "Крестикинолики"
Листинг 13.29.Листинг игровой программы "Крестики-нолики" unit Unit1; interface uses SysUtils, Types, Classes, Variants, QGraphics, QControlS, QForms, QDialogs, QStdCtrls; type TForm...
Рисунок 13 11 Поле для игры
Рисунок 13.11. Поле для игры Теперь два игрока могут последовательно щелкать левой кнопкой мыши в области сетки, в результате чего будут по очереди появляться красные нолики и синие крестики...
Рисунок 13 12 Программа в процессе работы
Рисунок 13.12. Программа в процессе работы Итак, мы изучили основные графические возможности, которые предоставляет среда Kylix. Теперь вы можете создавать любые программы, использующие граф...
Процессы и потоки
Процессы и потоки В этой главе мы рассмотрим проблему одновременного выполнения нескольких задач внутри одного приложения. Вы научитесь использовать объекты потоков и координировать их работу....
Общий обзор потоков
Общий обзор потоков Поток (Thread) — это объект операционной системы, заключенный в процесс и реализующий какую-либо задачу. Любое приложение (процесс) содержит несколько потоков (как минимум,...
Листинг 14 1 Объект TThred
Листинг 14.1. Объект TThred TThread = class private FHandle: THandle; FThreadID: THandle; FTerminated: Boolean; FSuspended: Boolean; FFreeOnTerminate: Boolean; FFinished: Boole...
Рисунок 14 1 Добавление объекта потока в проект с помощью диалогового окна New Items
Рисунок 14.1. Добавление объекта потока в проект с помощью диалогового окна New Items В появившемся диалоговом окне напишите имя для вашего нового объекта потока. После всего этого Kylix соз...
Листинг 14 2 Заготовка для ноиого объукта потока
Листинг 14.2. Заготовка для ноиого объукта потока unit Unit1; interfaceuses Classes;typeTMyThread = class(TThread) private{ Private declarations }protectedprocedure Execute; override;end;impleme...
Инициализация потоков
Инициализация потоков Если вы хотите написать код инициализации для вашего нового объекта потока, вам необходимо добавить новый конструктор в описание вашего нового класса потока, после чего вы...
Таблица 14 1 Значения свойства Policy
Таблица 14.1. Значения свойства Policy Значение Тип значения Возможные числовые значения для свойства Priority SCHED...
Таблица 14 2 Значения свойства Priority для Windows
Таблица 14.2. Значения свойства Priority для Windows Значение приоритета Приоритет Cоответствующее числовое значение...
Листинг 14 3 Проверка прекращения работы потока
Листинг 14.3.Проверка прекращения работы потока procedure TMyThread.Execute; begin while not Terminated do {выполнять какие-либо задачи}; end; Пример создания многопоточного приложения в Ky...
Рисунок 14 2 Форма приложения
Рисунок 14.2. Форма приложения Далее запишем в метод Execute объекта TMyThread1 код, который должен выполняться в потоке. Пусть это будет код, который генерирует случайные числа и присваивае...
Листинг 14 4 Модуль первого потока
Листинг 14.4.Модуль первого потока unit Unit2; interfaceuses Classes;type TMyThread1 = class(TThread)private{ Private declarations } protected procedure Execute; override;public count : intege...
Листинг 14 5 Модуль второго потока
Листинг 14.5.Модуль второго потока unit Unit3;interfaceuses Classes;typeTMyThread2 = class(TThread) private{ Private declarations }protectedprocedure Execute; override;public prcotmt:integer;...
Листинг 14 6 Главный модуль многопоточного приложения
Листинг 14.6. Главный модуль многопоточного приложения unit Unit1; interfaceusesSysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QTypes, QExtCtrls, QComCtrls, QStdCtrls,...
Рисунок 14 3 Результат работы многопоточного приложения
Рисунок 14.3. Результат работы многопоточного приложения...
Использование главного CLXпотока
Использование главного CLX-потока Когда вы применяете в своем приложении объекты из библиотеки визуальных компонентов, то вам нужно иметь в виду, что свойства и методы объектов из CLX не гарант...
Листинг 14 7 Использование синхронизации
Листинг 14.7. Использование синхронизации procedure TMyThread.PushTheButton; begin Button1.Click; end;procedure TMyThread.Execute; begin . . . Synchronize(PushTheButton); . . . end; Мет...
Координация потоков
Координация потоков При работе с потоками, на этапе первоначального знакомства с ними, неизбежны ошибки. Особенно неприятны ошибки, связанные с конфликтами потоков, обращающихся к разделяемым р...
Листинг 14 8 Объявление локальных переменных в потоке класса TThread
Листинг 14.8.Объявление локальных переменных в потоке класса TThread type TMyThread1 = class(TThread) private i, j,k,l: integer; // локальные переменные потока типа integer a,b,c: char;...
Основы баз данных
Основы баз данных В этой главе мы рассмотрим основные определения и термины, использующиеся при разработке баз данных. Изучим основные архитектуры приложений баз данных, которые поддерживает Ky...
Рисунок 15 1 Основные типы баз данных
Рисунок 15.1. Основные типы баз данных Среда Kylix обеспечивает поддержку баз данных только реляционного типа. Реляционные базы данных содержат данные в таблицах, состоящих из строк (записей...
Архитектура баз данных
Архитектура баз данных Приложения баз данных строятся из элементов пользовательского интерфейса, компонентов, которые предоставляют наборы данных, и компонентов, предназначенных для соединения...
Рисунок 15 2 Схема приложения базы данных
Рисунок 15.2. Схема приложения базы данных Рассмотрим все четыре части приложения баз данных: интерфейс пользователя — предназначен для взаимодействия вашего приложения с пользователем. Н...
Таблицы баз данных
Таблицы баз данных В реляционной базе данных, как уже отмечалось выше, для хранения данных используются взаимосвязанные таблицы. Эти таблицы обычно находятся в одном каталоге на диске. Этот кат...
Рисунок 15 3 Структура таблицы базы данных
Рисунок 15.3. Структура таблицы базы данных Любая таблица реляционной базы данных состоит из столбцов (полей) и строк (записей). Каждое поле таблицы должно иметь свое уникальное имя. Прим...
Таблица может содержать разнотипные
Таблица может содержать разнотипные данные. Например, пусть таблица состоит из четырех полей: Number, Year, Name и Surname. Эти поля будут обозначать: порядковый номер записи, год рождения, имя...
Средства для работы с базами данных
Средства для работы с базами данных Среда Kylix предоставляет набор драйверов, необходимых для работы с базами данных, которые описаны выше. Кроме того, Kylix предоставляет программисту несколь...
Листинг 15 1 Модуль Ffactlin
Листинг 15.1.Модуль Ffactlin unit Ffactlin; interface uses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,QExtCtrls, QDBCtrls, QStdCtrls, DB, DBClient, QGrids, QDBGrids, QBu...
Рисунок 15 4 Форма приложения базы данных
Рисунок 15.4. Форма приложения базы данных Мы не будем вдаваться в подробности пользовательского интерфейса этого приложения. Рассмотрим лишь те особенности, которые относятся к работе с таб...
Рисунок 15 5 Приложение в работе
Рисунок 15.5. Приложение в работе При перемещении по записям с помощью компонента DBGrid1 вы можете видеть, как изменяется содержимое компонентов. Таким образом, для просмотра данных из табл...
Компоненты для работы с базами данных
Компоненты для работы с базами данных В этой главе мы рассмотрим основные компоненты, предназначенные для работы с базами данных. Компоненты расположены на вкладках Data Access, dbExpress и Dat...
Таблица 16 1 Свойства компонента TDataSource
Таблица 16.1. Свойства компонента TDataSource Свойство Описание AutoEdit Определяет, будут ли компоненты, отображаю...
Таблица 16 2 Свойства компонента TClientDataSet
Таблица 16.2. Свойства компонента TClientDataSet Свойство Описание Active Определяет, является ли набор данных акт...
Таблица 16 2 (окончание)
Таблица 16.2 (окончание) Свойство Описание IndexFieldNames Содержит список наименований полей таблицы, по которым б...
Таблица 16 3 Свойства компонента TDataSetProvider
Таблица 16.3. Свойства компонента TDataSetProvider Свойство Описание Constraints Определяет накладываемые ограничен...
Вкладка dbExpress
Вкладка dbExpressДанная вкладка содержит семь компонентов. Рассмотрим эти компоненты и их основные свойства.Компонент TSQLConnetion — предназначен для обеспечения связи с сервером базы данных. В D...
Таблица 16 4 Свойства компонента TSQLConnection
Таблица 16.4. Свойства компонента TSQLConnectionСвойствоОписаниеConnectedОпределяет, установлена ли связь с базой данных. Данное свойство имеет тип Boolean. Если связь установлена, свойство имеет...
Таблица 16 4 (окончание)
Таблица 16.4 (окончание)СвойствоОписаниеConnectionNameСодержит имя конфигурации. Имеет тип String. Является аналогом свойства AliasName в DelphiDriverNameСодержит имя драйвера, необходимого для со...
Таблица 16 5 Свойства компонента TSQLDataSet
Таблица 16.5. Свойства компонента TSQLDataSetСвойствоОписаниеActiveОпределяет, является ли набор данных активным. Только активный набор данных может работать с записями таблиц. Свойство имеет тип...
Таблица 16 6 Свойства компонента TSQLQuery
Таблица 16.6. Свойства компонента TSQLQueryСвойствоОписаниеActiveОпределяет, является ли запрос активным. Только активный запрос может работать с записями таблиц. Свойство имеет тип Boolean. Если...
Таблица 16 7 Свойства компонента TSQLStoredProc
Таблица 16.7. Свойства компонента TSQLStoredProcСвойствоОписаниеActiveОпределяет, является ли процедура, хранимая на сервере, активной. Имеет тип BooleanMaxBlobSizeОпределяет максимальный размер B...
Таблица 16 7 (окончание)
Таблица 16.7 (окончание)СвойствоОписаниеParamsОпределяет список параметров процедуры. Имеет тип TparamsSQLConnectionСодержит имя компонента TSQLConnection, с помощью которого будет осуществляться...
Таблица 16 8 Свойства компонента TSQLTable
Таблица 16.8. Свойства компонента TSQLTableСвойствоОписаниеActiveОпределяет, является ли таблица активной. Только активная таблица может работать с записями. Свойство имеет типBooleanIndexFieldNam...
Таблица 16 9 Свойства компонента TSQLMonitor
Таблица 16.9. Свойства компонента TSQLMonitorСвойствоОписаниеActiveОпределяет, является ли монитор активным. Свойство имеет типBooleanAutoSaveОпределяет, будет ли производиться автоматическое сохр...
Таблица 16 10 Свойства компонента TSQLClientDataSet
Таблица 16.10. Свойства компонента TSQLClientDataSetСвойствоОписаниеActiveОпределяет, является ли набор данных активным. Свойство имеет тип BooleanAggregatesСодержит список доступных агрегатов. Им...
Таблица 16 10 (продолжение)
Таблица 16.10 (продолжение)СвойствоОписаниеCommandTextСодержит текст SQL-запроса. Имеет тип String. При установленном значении свойства FileName это свойство игнорируется. Свойство игнорируется та...
Таблица 16 10 (окончание)
Таблица 16.10 (окончание)СвойствоОписаниеIndexFieldNamesСодержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запято...
Вкладка Data Controls
Вкладка Data Controls Данная вкладка содержит компоненты, предназначенные для отображения записей из наборов данных. Мы не будем рассматривать свойства каждого компонента этой вкладки. Мы лишь...
Основы языка SQL
Основы языка SQL В этой главе мы рассмотрим команды языка структурированных запросов SQL (Structured Query Language). Вы узнаете, что такое запрос и как с ним работать. Основные сведения о я...
Таблица 17 1 Основные операторы определения данных
Таблица 17.1. Основные операторы определения данных Оператор Описание CREATE TABLE Предназначен для создания таблиц...
Таблица 17 2 Основные операторы управления данными
Таблица 17.2. Основные операторы управления данными Оператор Описание GRAND Назначает привилегии пользователям...
Таблица 17 3 Основные операторы манипулирования данными
Таблица 17.3. Основные операторы манипулирования данными Оператор Описание SELECT Предназначен для выборки записей...
Функции языка SQL
Функции языка SQL В языке SQL, кроме операторов, имеется несколько функций, основные из которых будут рассмотрены далее. Статистические функции — функции, предназначенные для статистической об...
Таблица 17 4 Основные статистические функции
Таблица 17.4. Основные статистические функции Функция Описание AVG ( ) Получение среднего значения...
Таблица 17 5 Основные строковые функции
Таблица 17.5. Основные строковые функции Функция Описание | | Слияние (конкатенация) двух строк...
Таблица 17 5 (окончание)
Таблица 17.5 (окончание) Функция Описание SUBSTRING (S FROM N1 TO N2) Выделяет из строки S подстроку, начиная...
Операторы определения данных
Операторы определения данных Давайте рассмотрим более подробно операторы определения данных. Оператор CREATE TABLE служит для создания новой таблицы базы данных и имеет следующий формат: CREA...
Операторы манипулирования данными
Операторы манипулирования данными Главным оператором манипулирования данными является оператор SELECT. Этот оператор используется для отбора данных, соответствующих сложным условиям. Оператор S...
Общий обзор языка В этой главе мы расскажем о языке Object Pascal. Для начала, небольшой исторический экскурс в историю языка Pascal. Исторически первый, недоступный широкой аудитории технич...
Типы данных
Типы данных Эта глава представляет обзор типов данных, которые имеются в языке Object Pascal. Мы рассмотрим как простые типы данных, так и структурные, вариантные и процедурные типы данных. К...
Интерфейсы
Интерфейсы В этой главе мы рассмотрим, что такое интерфейс и где он применяется. Кроме того, вы узнаете, что такое графический интерфейс пользователя, и познакомитесь с методами создания SDI- и...
Листинг 10 1 Объявление интерфейса
Листинг 10.1.Объявление интерфейса typeIEdit = interface procedure Copy; stdcall; procedure Cut; stdcall; procedure Paste; stdcall; function Undo: Boolean; stdcall; end; Примечание Те...
Листинг 10 2 Объявление класса содержащего интерфейс
Листинг 10.2.Объявление класса, содержащего интерфейс TEditor = class(TInterfacedObject, IEdit) procedure Copy; stdcall; procedure Cut; stdcall; procedure Paste; stdcall; function Undo:...
Интерфейс IUnknown
Интерфейс IUnknown По аналогии с наследованием классов, предком которых является базовый класс TObject, все интерфейсы являются прямыми или косвенными наследниками интерфейса IUnknown. Этот ба...
Листинг 10 3 Описание базового интерфейса IUnknown
Листинг 10.3.Описание базового интерфейса IUnknown type IUnknown = interface [ '{ 00000000-0000-0000-C000-000000000046} ' ] function QueryInterface(const IID: TGUID; out Obj): Integer; stdcal...
Класс TlnterfacedObject
Класс TlnterfacedObject В CLX Kylix определен класс TInterfacedObject, который служит базовым классом для объектов интерфейса. Данный класс определен в модуле Kylix System (листинг 10.4)....
Листинг 10 4 Определение класса TInterfacedObject
Листинг 10.4. Определение класса TInterfacedObject type TInterfacedObject = class (TObject, IInterface) protected FRefCount: Integer; function QueryInterface(const IID: TGUID; out Obj)...
Использование оператора as
Использование оператора as Объекты, поддерживающие интерфейсы, могут использовать оператор as для динамического присоединения интерфейса. Например, procedurePaintObjects(P: TInterfacedObject)...
Использование ключевого слова implements
Использование ключевого слова implements Многие классы CLX Kylix имеют в качестве некоторых своих свойств объекты. Кроме того, вы можете применять в качестве свойств класса интерфейсы. В том сл...
Листинг 10 5 Использование ключевого слова implements
Листинг 10.5. Использование ключевого слова implements unit cadapt; type IRGB8bit = interface ['{1d76360a-f4f5-lldl-87d4-00c04fbl7199}'] function Red: Byte; function Green: B...
Графический интерфейс пользователя
Графический интерфейс пользователя....
Создание SDI и MDIприложений
Создание SDI- и MDI-приложений Kylix позволяет создавать приложения двух моделей пользовательского интерфейса: одиночный интерфейс документа (Single document interface, SDI), многооконный...
Рисунок 10 1 Диалоговое окно New Items
Рисунок 10.1. Диалоговое окно New Items 2. Щелкните на пиктограмме Application. 3. Нажмите кнопку ОК. Для создания нового MDI-приложения выполните следующие шаги: 1. Выберите в главном ме...
Рисунок 10 2 Вкладка Projects
Рисунок 10.2. Вкладка Projects В MDI-приложении главная форма содержит несколько дочерних форм, которые могут размещаться внутри главной, но не могут выходить за ее пределы. Для определения,...
Рисунок 10 3 Главная форма MDIприложения
Рисунок 10.3. Главная форма MDI-приложения Более того, данная форма имеет необходимые компоненты для работы со многими дочерними окнами, а также главное меню для работы с файлами и окнами. К...
Рисунок 10 4 Три расположенных рядом дочерних окна внутри главной формы
Рисунок 10.4. Три расположенных рядом дочерних окна внутри главной формы Запустите эту форму и попробуйте создать новые дочерние окна с помощью пункта меню File/New или нажатия на соответств...
Листинг 10 6 Код автоматически создаваемой для MDIприложения
Листинг 10.6.Код,автоматически создаваемой для MDI-приложения unit clxmain; interface uses SysUtils, Classes, QForms, OImgList , QStdActns, QActnList , QDialogs, QMenus, QTypes, QComCtrls, QCon...
Консольные приложения
Консольные приложения Консольные приложения — это 32-разрядные приложения, которые могут работать без загруженного графического интерфейса Linux. Для создания нового консольного приложения вы...
Рисунок 10 5 Пиктограмма Console Application
Рисунок 10.5. Пиктограмма Console Application Kylix создаст файл проекта для консольного приложения и покажет окно редактора кода с текстом, приведенным в листинге 10.7....
Листинг 10 7 Заготовка для консольного приложения
Листинг 10.7. Заготовка для консольного приложения program Project1;{$APPTYPE CONSOLE} // Директива компилятора, означающая, что приложение // будет консольным begin en...
Алфавит и словарь языка
Алфавит и словарь языкаВ алфавит языка Object Pascal входят следующие символы: набор символов ASCII, включающий буквы латинского алфавита от а до z и от А до z и пробел, а также цифры от о до 9; с...
Структура программы
Структура программыТекст программы состоит из строк, в каждой из которых может находиться одно или несколько слов. Строка может начинаться с любой позиции, на размер компилируемой программы это не...
Комментарии
КомментарииКомментарий — это текст, который игнорируется компилятором и нужен для пояснения работы отдельных частей программы. Комментарии широко используются программистами для быстрого понимания...
Операторы
ОператорыОператор — это законченное предложение языка Object Pascal, которое выполняет какое-либо действие. Операторы могут быть: простые; структурированные.Простые операторы — это операторы, кото...
Директивы компилятора
Директивы компилятораДирективы компилятора — это указания компилятору на выполнение каких-либо действий. Для записи директив компилятора используют символы:{$ директива} либо( * директива *)Все ди...
Работа с сокетами
Работа с сокетами В этой главе мы рассмотрим некоторые сетевые возможности, предоставляемые средой Kylix на примере работы с сокетами. Сокеты — это специальные компоненты, позволяющие вашему...
Листинг 11 1 Список сетевых услуг содержащийся в файле services
Листинг 11.1.Список сетевых услуг,содержащийся в файле services # /etc/services: # $Id: services,v 1.4 2000/05/15 15:54:48 chmouel Exp $ # # Сетевые услуги Интернет # # номера портов как для...
Создание справочной
Создание справочной...
Системы
системы В этой главе мы рассмотрим принципы, по которым подключается файл справки к вашему приложению. CLX не обеспечивает прямую поддержку отображения файла справки. Он обеспечивает механиз...
Листинги всех трех файлов приводятся в конце книги в Приложении 2
Листинги всех трех файлов приводятся в конце книги, в Приложении 2....
Работа с графикой
Работа с графикой...
В Kylix
в Kylix Из этой главы вы узнаете, как с помощью Kylix можно создавать приложения, использующие графику. Вы научитесь работать с объектом канвы или холста (Canvas), рисовать различные фигуры,...
Обновление экрана
Обновление экрана Во время работы приложения многие объекты на экране изменяют свое состояние. Может измениться текст или графика, содержащаяся внутри объекта. Для того чтобы эти изменения отоб...
Рисунок 13 1 Форма приложения
Рисунок 13.1. Форма приложения Напишем в обработчике события OnPaint формы Form1 следующий код (листинг 13.1):...
Листинг 13 1 Код обработки события OnPaint
Листинг 13.1.Код обработки события OnPaint procedure TForm1.FormPaint(Sender: TObject); begin messagedlg('Произошло обновление формы' ,mtInformation, [mbOK], 0); end; Теперь напишем код обработ...
Листинг 13 2 Код обработки события OnClick
Листинг 13.2.Код обработки события OnClick procedure TForm1.Button1Click(Sender: TObject); begin Form1.Refresh; // Вызываем метод обновления формы end; Запустим приложение на выполнение. Сраз...
Рисунок 13 2 Информационное окно извещающее об обновлении формы
Рисунок 13.2. Информационное окно, извещающее об обновлении формы Если вы используете компонент TImage для отображения графики на форме, вам не нужно будет заботиться об обновлении графическ...
Типы графических объектов
Типы графических объектов CLX Kylix предоставляет программисту несколько графических объектов, которые имеют собственные методы для рисования на канве, а также для загрузки и сохранения изображ...
Таблица 13 1 Типы графических объектов Kylix
Таблица 13.1. Типы графических объектов Kylix Объект Описание Picture Используется как контейнер для содержания про...
Таблица 13 2 Свойства объекта Canvas
Таблица 13.2. Свойства объекта Canvas Свойство Описание Font Определяет шрифт, который будет использоваться для выво...
Таблица 13 3 Методы объекта Canvas
Таблица 13.3. Методы объекта Canvas Метод Описание Arc Предназначен для черчения дуги эллипса или окружности. В каче...
Таблица 13 3 (продолжение)
Таблица 13.3 (продолжение) Метод Описание CopyRect Копирует прямоугольную часть изображения с одной канвы на другую....
Таблица 13 3 (продолжение)
Таблица 13.3 (продолжение) Метод Описание MoveTo Изменяет текущую позицию пера (значение свойства PenРоs) на значени...
Таблица 13 3 (окончание)
Таблица 13.3 (окончание) Метод Описание StretchDraw Рисует графическое изображение, которое содержится в компонент...
Использование пера
Использование пера Свойство Реn позволяет устанавливать атрибуты пера, которым производится рисование линий и точек, а также других геометрических фигур. Перо имеет четыре собственных свойств...
Листинг 13 3 Установка значения цвета пера
Листинг 13.3. Установка значения цвета пера procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Color := PenColor.ForegroundColor; end; Ширина пера Ширина пера определяет толщин...
Листинг 13 4 Установка ширины пера
Листинг 13.4.Установка ширины пера procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Width := 5; end; Стиль пера Свойство Style позволяет вам устанавливать различные стили нач...
Листинг 13 5 Смена стилей пера
Листинг 13.5. Смена стилей пера procedure TForm1.Button1Click(Sender: TObject); begin with Canvas.Pen do begin Style = psSolid Style = psDash Style = psDot Style =...
Использование кисти
Использование кисти Свойство Brush канвы позволяет вам указывать, каким образом будет Производиться заполнение областей и геометрических фигур. Кисть имеет три свойства: Color — цвет кист...
Листинг 13 6 Установка цвета кисти
Листинг 13.6.Установка цвета кисти procedure TForm1.Button1Click(Sender: TOtrject); begin Canvas.Brush.Color := clBlue; end; Стиль кисти Стиль кисти определяет, каким образом будет заполнятьс...
Листинг 13 7 Установка стииля кисти
Листинг 13.7. Установка стииля кисти procedure TForm1.Button1Click(Sender: TObject); begin with Canvas.Brush do begin Style = bsSolid Style = bsClear Style = bsHorizont...
Листинг 13 8 Загрузка графического образа из файла
Листинг 13.8.Загрузка графического образа из файла var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('MyBitmap.bmp'); Form1.Canvas.Brush.Bitmap :=...
Использование методов объекта Canvas
Использование методов объекта Canvas В этой части главы мы рассмотрим методы объекта Canvas, которые позволяют рисовать простые графические объекты. Рисование линий и ломаных Объект канвы поз...
Листинг 13 9 Пример рисования прямых линий procedure TForm1 FormPaint(Sender TObject); begin
Листинг 13.9. Пример рисования прямых линийprocedure TForm1.FormPaint(Sender: TObject); begin with Canvas do begin MoveTo(0, 0); LineTo(ClientWidth, ClientHeight); MoveTo...
Рисунок 13 3 Форма с диагональными линиями
Рисунок 13.3. Форма с диагональными линиями Для рисования ломаных линий можно воспользоваться специальным методом Polyline. Параметрами данного метода являются элементы массива Points. Прив...
Рисунок 13 4 Ломаная линия
Рисунок 13.4. Ломаная линия Рисование линий с помощью метода Polyline аналогично рисованию нескольких линий с помощью методов MoveTo и LinеТо. Ниже приведен пример (листинг 13.10), который...
Листинг 13 10 Построение ломанной линии
Листинг 13.10.Построение ломанной линии with Canvas do begin MoveTo(0, 0); LineTo(12, 14); LineTo(50, 30); LineTo(130, 120); LineTo(2l0,132); end; Примечание Если вы рисуете...
Листинг 13 11 Прямоугольник со вписанным эллипсом
Листинг 13.11.Прямоугольник со вписанным эллипсом procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Rectangle(0, 0, ClientWidth div 2, ClientHeight div 2); Canvas.Ellipse(0, 0, Clie...
Рисунок 13 5 Эллипс вписанный в прямоугольник
Рисунок 13.5. Эллипс, вписанный в прямоугольник Нижеприведенный пример (листинг 13.12) рисует прямоугольник со скругленными углами, которые скруглены по шаблону окружности, с диаметром 10 то...
Листинг 13 12 Прямоугольник со скругленными углами procedure TForm1 FormPaint{Sender TObject); begin
Листинг 13.12.Прямоугольник со скругленными угламиprocedure TForm1.FormPaint{Sender: TObject); begin Canvas.RoundRect(0, 0, ClientWidth div 2, ClientHeight div 2, 10, 10); end;...
Рисунок 13 6 Прямоугольник со скругленными углами
Рисунок 13.6. Прямоугольник со скругленными углами Для рисования многоугольников с любым количеством углов и сторон вы можете использовать метод Polygon. Метод Polygon содержит в качестве п...
Создание приложения наподобие графического редактора
Создание приложения наподобие графического редактора В графическом редакторе обычно присутствует панель инструментов, на которой располагаются кнопки. Каждая из кнопок позволяет рисовать различ...
Листинг 13 13 Объявление типа и переменных
Листинг 13.13.Объявление типа и переменных type TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect); TForm1 = class(TForm) . . . { объявление методов } public Drawing: Boolean; Orig...
Листинг 13 14 Обработчики нажатия кнопок
Листинг 13.14. Обработчики нажатия кнопокprocedure TForm1.LineButtonClick{Sender: TObject); { Кнопка линии } beginDrawingTool := dtLine; end;procedure TForm1.RectangleButtonClick(Sender: TObject);...
Листинг 13 15 Обработчик события OnMouseup
Листинг 13.15.Обработчик события OnMouseup procedure TForm1. FormMouseUp (Sender: TObject; Button TMouseButton; Shift: TShiftState; X ,Y: Integer); begin case DrawingTool of dtLine: be...
Листинг 13 16 Обработчик события OnMouseMove
Листинг 13.16.Обработчик события OnMouseMove procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if Drawing thenbegin Canvas.Pen.Mode := pmNotXor; c...
Другие методы работы с графикой в Куliх
Другие методы работы с графикой в Куliх Вообще, вам не требуется наличие специальных компонентов для работы с графическими возможностями Kylix. Вы можете создавать, рисовать, сохранять и уничто...
Листинг 13 17 Создание объекта Bitmap
Листинг 13.17.Создание объекта Bitmap procedure TForm1.FormCreate(Sender: TObject); var Bitmap: TBitmap; {временная переменная для хранения графического образа}begin Bitmap := TBitmap.Create;...
Листинг 13 18 Прямая работа с Bitmap
Листинг 13.18.Прямая работа с Bitmap procedure TForm1.Button1Click(Sender: TObject);// Данный пример показывает, как можно рисовать напрямую в Bitmapvar х,y : integer; Bitmap : TBitmap; P :...
Загрузка и сохранение графических файлов
Загрузка и сохранение графических файлов Графические образы, которые используются в приложении, иногда требуется сохранить для дальнейшего использования. Компонент Image позволяет достаточно пр...
Листинг 13 29 Загрузка графики из файла
Листинг 13.29.Загрузка графики из файла procedure TForm1.Open1Click (Sender: TObject); var CurrentFile: String; begin if CpenDialogl.Execute then begin CurrentFile := OpenDialog1.F...
Листинг 13 20 Сохранение графики в файл
Листинг 13.20.Сохранение графики в файл var Form1: TForm1 ; CurrentFile:String; implementation{$R *.XFM}procedure TForm1.Save1Click(Sender: TObject);beginif CurrentFile <> '' then Ima...
Работа с буфером обмена
Работа с буфером обмена Вы можете использовать системный буфер обмена для копирования и вставки графики внутрь вашего приложения, а также для переноса графики из вашего приложения в другие и из...
Листинг 13 21 Копирование графики в буфер обмена
Листинг 13.21.Копирование графики в буфер обмена procedure TForm1.Copy1Click{Sender: TObject); begin Clipboard.Assign(Image.Picture) end. Вырезание графики в буфер обмена Вырезание графики в...
Листинг 13 22 Вырезание графики в буфер обмена
Листинг 13.22. Вырезание графики в буфер обмена procedure TForm1.Cut1Click(Sender: TObject); var ARect: TRect; begin Copy1Click{Sender); { копирование картинки в буфер обмена }with Image.Canv...
Листинг 13 23 Копирование графики
Листинг 13.23.Копирование графики из буфера обменаprocedure TForm1.PasteButtonClick(Sender: TObject); var Bitmap: TBitmap; begin if Clipboard.Provides(SDelphiBitmap) then { в буфере обменаиз...
Работа с мышью
Работа с мышью Ваше приложение может реагировать на действия пользователя, которые он выполняет с помощью мыши. В этой части главы мы расскажем, как можно обрабатывать события мыши. Событие мы...
Таблица 13 4 События мыши
Таблица 13.4. События мыши Событие мыши Описание OnMouseDown Происходит, когда пользователь нажимает кнопку мыши в...
Таблица 13 4 (окончание)
Таблица 13.4 (окончание) Событие мыши Описание OnMouseUp Происходит, когда пользователь отпускает кнопку мыши в тот...
Таблица 13 5 Параметры событий мыши
Таблица 13.5. Параметры событий мыши Параметр Значение Sender Имя объекта, над которым произошло событие мыши...
Рисунок 13 7 Обработка события OnMouseDown
Рисунок 13.7. Обработка события OnMouseDown Еще один пример (листинг 13.26) устанавливает текущую позицию пера в координаты, в которых пользователь щелкнул мышью....
Листинг 13 26 Установка позиции пера в координатах указаннных пользователем
Листинг 13.26. Установка позиции пера в координатах, указаннных пользователем procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);begin Canv...
Листинг 13 27 Пример рисования линии
Листинг 13.27. Пример рисования линии procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);begin Canvas.MoveTo(X, Y) ; { установка позиции п...
Рисунок 13 8 Пример рисования линий
Рисунок 13.8. Пример рисования линий Обработка события OnMouseMove Данное событие происходит периодически во время перемещения мыши. Для обработки этого события нужно написать программу-обр...
Листинг 13 28 Пример обработки
Листинг 13.28.Пример обработки события OnMouseMoveprocedure TForm1.FormMouseMove(Sender: ТОbject;Button: TMouseButton;Shift: TShiftState; X, Y: Integer); begin Canvas.LineTo(X, Y); { рисует ли...
Рисунок 13 9 Обработка события OnMouseMove
Рисунок 13.9. Обработка события OnMouseMove...
Создание простой игровой программы
Создание простой игровой программы Теперь вы можете создавать графические приложения практически любой сложности. Рассмотрим пример создания игры "Крестики-нолики" на поле 10x10 клето...
Рисунок 13 10 Формазаготовка для игровой программы
Рисунок 13.10. Форма-заготовка для игровой программы...
Листинг 13 29 Листинг игровой программы "Крестикинолики"
Листинг 13.29.Листинг игровой программы "Крестики-нолики" unit Unit1; interface uses SysUtils, Types, Classes, Variants, QGraphics, QControlS, QForms, QDialogs, QStdCtrls; type TForm...
Рисунок 13 11 Поле для игры
Рисунок 13.11. Поле для игры Теперь два игрока могут последовательно щелкать левой кнопкой мыши в области сетки, в результате чего будут по очереди появляться красные нолики и синие крестики...
Рисунок 13 12 Программа в процессе работы
Рисунок 13.12. Программа в процессе работы Итак, мы изучили основные графические возможности, которые предоставляет среда Kylix. Теперь вы можете создавать любые программы, использующие граф...
Процессы и потоки
Процессы и потоки В этой главе мы рассмотрим проблему одновременного выполнения нескольких задач внутри одного приложения. Вы научитесь использовать объекты потоков и координировать их работу....
Общий обзор потоков
Общий обзор потоков Поток (Thread) — это объект операционной системы, заключенный в процесс и реализующий какую-либо задачу. Любое приложение (процесс) содержит несколько потоков (как минимум,...
Листинг 14 1 Объект TThred
Листинг 14.1. Объект TThred TThread = class private FHandle: THandle; FThreadID: THandle; FTerminated: Boolean; FSuspended: Boolean; FFreeOnTerminate: Boolean; FFinished: Boole...
Рисунок 14 1 Добавление объекта потока в проект с помощью диалогового окна New Items
Рисунок 14.1. Добавление объекта потока в проект с помощью диалогового окна New Items В появившемся диалоговом окне напишите имя для вашего нового объекта потока. После всего этого Kylix соз...
Листинг 14 2 Заготовка для ноиого объукта потока
Листинг 14.2. Заготовка для ноиого объукта потока unit Unit1; interfaceuses Classes;typeTMyThread = class(TThread) private{ Private declarations }protectedprocedure Execute; override;end;impleme...
Инициализация потоков
Инициализация потоков Если вы хотите написать код инициализации для вашего нового объекта потока, вам необходимо добавить новый конструктор в описание вашего нового класса потока, после чего вы...
Таблица 14 1 Значения свойства Policy
Таблица 14.1. Значения свойства Policy Значение Тип значения Возможные числовые значения для свойства Priority SCHED...
Таблица 14 2 Значения свойства Priority для Windows
Таблица 14.2. Значения свойства Priority для Windows Значение приоритета Приоритет Cоответствующее числовое значение...
Листинг 14 3 Проверка прекращения работы потока
Листинг 14.3.Проверка прекращения работы потока procedure TMyThread.Execute; begin while not Terminated do {выполнять какие-либо задачи}; end; Пример создания многопоточного приложения в Ky...
Рисунок 14 2 Форма приложения
Рисунок 14.2. Форма приложения Далее запишем в метод Execute объекта TMyThread1 код, который должен выполняться в потоке. Пусть это будет код, который генерирует случайные числа и присваивае...
Листинг 14 4 Модуль первого потока
Листинг 14.4.Модуль первого потока unit Unit2; interfaceuses Classes;type TMyThread1 = class(TThread)private{ Private declarations } protected procedure Execute; override;public count : intege...
Листинг 14 5 Модуль второго потока
Листинг 14.5.Модуль второго потока unit Unit3;interfaceuses Classes;typeTMyThread2 = class(TThread) private{ Private declarations }protectedprocedure Execute; override;public prcotmt:integer;...
Листинг 14 6 Главный модуль многопоточного приложения
Листинг 14.6. Главный модуль многопоточного приложения unit Unit1; interfaceusesSysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QTypes, QExtCtrls, QComCtrls, QStdCtrls,...
Рисунок 14 3 Результат работы многопоточного приложения
Рисунок 14.3. Результат работы многопоточного приложения...
Использование главного CLXпотока
Использование главного CLX-потока Когда вы применяете в своем приложении объекты из библиотеки визуальных компонентов, то вам нужно иметь в виду, что свойства и методы объектов из CLX не гарант...
Листинг 14 7 Использование синхронизации
Листинг 14.7. Использование синхронизации procedure TMyThread.PushTheButton; begin Button1.Click; end;procedure TMyThread.Execute; begin . . . Synchronize(PushTheButton); . . . end; Мет...
Координация потоков
Координация потоков При работе с потоками, на этапе первоначального знакомства с ними, неизбежны ошибки. Особенно неприятны ошибки, связанные с конфликтами потоков, обращающихся к разделяемым р...
Листинг 14 8 Объявление локальных переменных в потоке класса TThread
Листинг 14.8.Объявление локальных переменных в потоке класса TThread type TMyThread1 = class(TThread) private i, j,k,l: integer; // локальные переменные потока типа integer a,b,c: char;...
Основы баз данных
Основы баз данных В этой главе мы рассмотрим основные определения и термины, использующиеся при разработке баз данных. Изучим основные архитектуры приложений баз данных, которые поддерживает Ky...
Рисунок 15 1 Основные типы баз данных
Рисунок 15.1. Основные типы баз данных Среда Kylix обеспечивает поддержку баз данных только реляционного типа. Реляционные базы данных содержат данные в таблицах, состоящих из строк (записей...
Архитектура баз данных
Архитектура баз данных Приложения баз данных строятся из элементов пользовательского интерфейса, компонентов, которые предоставляют наборы данных, и компонентов, предназначенных для соединения...
Рисунок 15 2 Схема приложения базы данных
Рисунок 15.2. Схема приложения базы данных Рассмотрим все четыре части приложения баз данных: интерфейс пользователя — предназначен для взаимодействия вашего приложения с пользователем. Н...
Таблицы баз данных
Таблицы баз данных В реляционной базе данных, как уже отмечалось выше, для хранения данных используются взаимосвязанные таблицы. Эти таблицы обычно находятся в одном каталоге на диске. Этот кат...
Рисунок 15 3 Структура таблицы базы данных
Рисунок 15.3. Структура таблицы базы данных Любая таблица реляционной базы данных состоит из столбцов (полей) и строк (записей). Каждое поле таблицы должно иметь свое уникальное имя. Прим...
Таблица может содержать разнотипные
Таблица может содержать разнотипные данные. Например, пусть таблица состоит из четырех полей: Number, Year, Name и Surname. Эти поля будут обозначать: порядковый номер записи, год рождения, имя...
Средства для работы с базами данных
Средства для работы с базами данных Среда Kylix предоставляет набор драйверов, необходимых для работы с базами данных, которые описаны выше. Кроме того, Kylix предоставляет программисту несколь...
Листинг 15 1 Модуль Ffactlin
Листинг 15.1.Модуль Ffactlin unit Ffactlin; interface uses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,QExtCtrls, QDBCtrls, QStdCtrls, DB, DBClient, QGrids, QDBGrids, QBu...
Рисунок 15 4 Форма приложения базы данных
Рисунок 15.4. Форма приложения базы данных Мы не будем вдаваться в подробности пользовательского интерфейса этого приложения. Рассмотрим лишь те особенности, которые относятся к работе с таб...
Рисунок 15 5 Приложение в работе
Рисунок 15.5. Приложение в работе При перемещении по записям с помощью компонента DBGrid1 вы можете видеть, как изменяется содержимое компонентов. Таким образом, для просмотра данных из табл...
Компоненты для работы с базами данных
Компоненты для работы с базами данных В этой главе мы рассмотрим основные компоненты, предназначенные для работы с базами данных. Компоненты расположены на вкладках Data Access, dbExpress и Dat...
Таблица 16 1 Свойства компонента TDataSource
Таблица 16.1. Свойства компонента TDataSource Свойство Описание AutoEdit Определяет, будут ли компоненты, отображаю...
Таблица 16 2 Свойства компонента TClientDataSet
Таблица 16.2. Свойства компонента TClientDataSet Свойство Описание Active Определяет, является ли набор данных акт...
Таблица 16 2 (окончание)
Таблица 16.2 (окончание) Свойство Описание IndexFieldNames Содержит список наименований полей таблицы, по которым б...
Таблица 16 3 Свойства компонента TDataSetProvider
Таблица 16.3. Свойства компонента TDataSetProvider Свойство Описание Constraints Определяет накладываемые ограничен...
Вкладка dbExpress
Вкладка dbExpressДанная вкладка содержит семь компонентов. Рассмотрим эти компоненты и их основные свойства.Компонент TSQLConnetion — предназначен для обеспечения связи с сервером базы данных. В D...
Таблица 16 4 Свойства компонента TSQLConnection
Таблица 16.4. Свойства компонента TSQLConnectionСвойствоОписаниеConnectedОпределяет, установлена ли связь с базой данных. Данное свойство имеет тип Boolean. Если связь установлена, свойство имеет...
Таблица 16 4 (окончание)
Таблица 16.4 (окончание)СвойствоОписаниеConnectionNameСодержит имя конфигурации. Имеет тип String. Является аналогом свойства AliasName в DelphiDriverNameСодержит имя драйвера, необходимого для со...
Таблица 16 5 Свойства компонента TSQLDataSet
Таблица 16.5. Свойства компонента TSQLDataSetСвойствоОписаниеActiveОпределяет, является ли набор данных активным. Только активный набор данных может работать с записями таблиц. Свойство имеет тип...
Таблица 16 6 Свойства компонента TSQLQuery
Таблица 16.6. Свойства компонента TSQLQueryСвойствоОписаниеActiveОпределяет, является ли запрос активным. Только активный запрос может работать с записями таблиц. Свойство имеет тип Boolean. Если...
Таблица 16 7 Свойства компонента TSQLStoredProc
Таблица 16.7. Свойства компонента TSQLStoredProcСвойствоОписаниеActiveОпределяет, является ли процедура, хранимая на сервере, активной. Имеет тип BooleanMaxBlobSizeОпределяет максимальный размер B...
Таблица 16 7 (окончание)
Таблица 16.7 (окончание)СвойствоОписаниеParamsОпределяет список параметров процедуры. Имеет тип TparamsSQLConnectionСодержит имя компонента TSQLConnection, с помощью которого будет осуществляться...
Таблица 16 8 Свойства компонента TSQLTable
Таблица 16.8. Свойства компонента TSQLTableСвойствоОписаниеActiveОпределяет, является ли таблица активной. Только активная таблица может работать с записями. Свойство имеет типBooleanIndexFieldNam...
Таблица 16 9 Свойства компонента TSQLMonitor
Таблица 16.9. Свойства компонента TSQLMonitorСвойствоОписаниеActiveОпределяет, является ли монитор активным. Свойство имеет типBooleanAutoSaveОпределяет, будет ли производиться автоматическое сохр...
Таблица 16 10 Свойства компонента TSQLClientDataSet
Таблица 16.10. Свойства компонента TSQLClientDataSetСвойствоОписаниеActiveОпределяет, является ли набор данных активным. Свойство имеет тип BooleanAggregatesСодержит список доступных агрегатов. Им...
Таблица 16 10 (продолжение)
Таблица 16.10 (продолжение)СвойствоОписаниеCommandTextСодержит текст SQL-запроса. Имеет тип String. При установленном значении свойства FileName это свойство игнорируется. Свойство игнорируется та...
Таблица 16 10 (окончание)
Таблица 16.10 (окончание)СвойствоОписаниеIndexFieldNamesСодержит список наименований полей таблицы, по которым будет производиться сортировка набора данных. Имена полей разделяются точкой с запято...
Вкладка Data Controls
Вкладка Data Controls Данная вкладка содержит компоненты, предназначенные для отображения записей из наборов данных. Мы не будем рассматривать свойства каждого компонента этой вкладки. Мы лишь...
Основы языка SQL
Основы языка SQL В этой главе мы рассмотрим команды языка структурированных запросов SQL (Structured Query Language). Вы узнаете, что такое запрос и как с ним работать. Основные сведения о я...
Таблица 17 1 Основные операторы определения данных
Таблица 17.1. Основные операторы определения данных Оператор Описание CREATE TABLE Предназначен для создания таблиц...
Таблица 17 2 Основные операторы управления данными
Таблица 17.2. Основные операторы управления данными Оператор Описание GRAND Назначает привилегии пользователям...
Таблица 17 3 Основные операторы манипулирования данными
Таблица 17.3. Основные операторы манипулирования данными Оператор Описание SELECT Предназначен для выборки записей...
Функции языка SQL
Функции языка SQL В языке SQL, кроме операторов, имеется несколько функций, основные из которых будут рассмотрены далее. Статистические функции — функции, предназначенные для статистической об...
Таблица 17 4 Основные статистические функции
Таблица 17.4. Основные статистические функции Функция Описание AVG ( ) Получение среднего значения...
Таблица 17 5 Основные строковые функции
Таблица 17.5. Основные строковые функции Функция Описание | | Слияние (конкатенация) двух строк...
Таблица 17 5 (окончание)
Таблица 17.5 (окончание) Функция Описание SUBSTRING (S FROM N1 TO N2) Выделяет из строки S подстроку, начиная...
Операторы определения данных
Операторы определения данных Давайте рассмотрим более подробно операторы определения данных. Оператор CREATE TABLE служит для создания новой таблицы базы данных и имеет следующий формат: CREA...
Операторы манипулирования данными
Операторы манипулирования данными Главным оператором манипулирования данными является оператор SELECT. Этот оператор используется для отбора данных, соответствующих сложным условиям. Оператор S...