Иллюстрированный самоучитель по Kylix


         

Иллюстрированный самоучитель по Kylix



Примеры создания приложений баз данных
Примеры создания приложений баз данныхВ Kylix нет стандартных компонентов для создания многих локальных баз данных. Связано это с тем, что такие форматы данных являются отмирающими, тем более что
Окно New Items
Окно New Items
Пиктограмма Data Module окна New Items
Пиктограмма Data Module окна New Items
Компонент Clients в окне модуля данных
Компонент Clients в окне модуля данныхСоздадим поля первым способом. Для этого дважды щелкнем на свойстве FieldDefs компоненту Clients. При этом откроется диалоговое окно добавления
Диалоговое окно добавления новых полей Добавим определения полей представленные в табл 18 1
Диалоговое окно добавления новых полей Добавим определения полей, представленные в табл. 18.1.

Таблица 18 1 Определения полей
Таблица 18.1. Определения полейИмя поляОписаниеТип данныхРазмерIDсчетчикftAutoInc0Nameимя клиентаFtString50
Установка свойств поля ID в окне Object Inspector
Установка свойств поля ID в окне Object Inspector
Установка свойств поля Name в окне Object Inspector
Установка свойств поля Name в окне Object Inspector
Поля ID и Name
Поля ID и NameПравой кнопкой мыши щелкнем на компоненте Clients и выберем в выпадающем меню пункт CreateDataSet, а затем — пункт Save To MyBase Xml UTF-8 table. В появившемся диалого
Диалоговое окно сохранения файла таблицы
Диалоговое окно сохранения файла таблицыТеперь определим поля явно на основе FieldDefs. Дважды щелкнем на компоненте Clients, в появившемся диалоговом окне щелчком правой кнопкой мыш

Поля компонента Clients
Поля компонента ClientsРазместим в модуле данных компонент DataSource, установим его свойство Name в ds_Clients и свяжем его с компонентом Clients (свойство DataSet компонента ds_Cli
Модуль данных
Модуль данных
Листинг 18 1 Содержание типичного файла базы данных
Листинг 18.1. Содержание типичного файла базы данных?xml version="1.0" encoding="UTF-8" standalone="yes" ?DATAPACKET Version="2.0"METADA
Таблица 18 2 Поля определяемые в свойстве ChlidDefs
Таблица 18.2. Поля, определяемые в свойстве ChlidDefsИмя поляОписаниеТип данныхРазмерIDсчетчикFtAutoInс0OrderNameописание заказаFtString20Priceцена заказаFtCurrency0Осталось только на основе описа
Листинг 18 2 Содержимое файла базы данных
Листинг 18.2. Содержимое файла базы данных?xml version="1.0" encoding="UTF-8" standalone="yes" ?- DATAPACKET Version="2.0"- METADATA

Введение в создание компонентов
Введение в создание компонентов Данная глава посвящена творческому процессу создания собственных компонентов. Мы рассмотрим различные способы создания новых компонентов, а именно — как создават
Выбор предка компонента
Выбор предка компонента Итак, вы уже знаете основные классы, имеющиеся в CLX Kylix. Ранее мы рассмотрели базовые классы, которые могут являться предками вашего компонента (см. главу 7). Эти кла
Таблица 19 1 Базовые классы CLX
Таблица 19.1. Базовые классы CLX Класс Возможности класса TObject Классы, предком которых является данный клас
Таблица 19 1 (окончание)

Таблица 19.1 (окончание) Класс Возможности класса TCustomClassName Библиотека визуальных компонентов содержит
Создание заготовки компонента
Создание заготовки компонента Итак, вы выбрали класс-предок для вашего компонента. Теперь можно приступать к созданию модуля вашего компонента. Создание модуля (заготовки) для нового компонента
Окно эксперта компонентов
Окно эксперта компонентов
Заполненное окно эксперта компонентов
Заполненное окно эксперта компонентов После заполнения полей данного окна нажимаем кнопку ОК, и Kylix автоматически создаст заготовку модуля вашего компонента. Модуль заготовки

Листинг 19 1 Модуль заготовки нового класса
Листинг 19.1.Модуль заготовки нового класса unit QMyButton; interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TMyButton = class(TButton) pri
Статические методы
Статические методы Статические методы аналогичны обычным функциям или процедурам Kylix. Адрес такого метода известен среде Kylix на стадии компиляции, поэтому Kylix производит статический вызов
Виртуальные методы
Виртуальные методы Виртуальные методы, в отличие от статических, поддерживают перегрузку, поэтому вызов таких методов для среды Kylix намного сложнее (заранее неизвестен адрес конкретного вызыв
Динамические методы
Динамические методы Динамические методы похожи на виртуальные, они также могут быть перегружены. Основная разница между виртуальными и динамическими методами — в способе их вызова. Если для вир
Замещенные методы

Замещенные методы Замещение методов предполагает передачу и изменение методов от компонента (класса) предка компоненту (классу) наследнику. Как мы уже отметили, только виртуальные или динамичес
Абстрактные методы
Абстрактные методы Абстрактными методами называются такие методы, которые описаны внутри определения класса или компонента, но не содержат никаких действий и никогда не вызываются. Абстрактными
Построение компонентов
Построение компонентовТеперь дополним модуль — заготовку нового компонента всем необходимым: свойствами, событиями и методами. Создадим работоспособный компонент и зарегистрируем его в среде Kylix
Листинг 19 2 Пример создания свойств нового компонента
Листинг 19.2. Пример создания свойств нового компонента MyButton = class(TButton) private { Private declarations } FMyCount: Integer; FStirngOfText: String; protected { Protected declarations }
Листинг 19 3 Создание свойств перечиляемого типа
Листинг 19.3.Создание свойств перечиляемого типаunit QMyButton; interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TMyEnumType = (eFirst, eSecond, eThi
Перечисляемое свойство MyEnumProp в новом компоненте TMyButton

Перечисляемое свойство MyEnumProp в новом компоненте TMyButtonСоздание свойств-множеств в компонентеТип множества часто использовался в Object Pascal, и некоторые свойства компоненто
Листинг 19 4 Создание свойствамножества unit QMyButton;
Листинг 19.4. Создание свойства-множества unit QMyButton;interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TMyEnumType = (eFirst, eSecond, eThird); T
Свойствомножество MyOptions в новом компоненте TMyButton
Свойство-множество MyOptions в новом компоненте TMyButtonСоздание свойства-объекта в компонентеКаждый компонент может содержать в себе свойство-объект. В качестве свойства-объекта мо
Листинг 19 5 Создание потомка TPersistenttype
Листинг 19.5. Создание потомка TPersistenttype TMyObject = class (TPersistent) private { Private declarations } FProperty1:Real; FProperty2:Char; protected { Protected declarations } public { P
Листинг 19 6 Добавление свойстваобъекта в компонент TMyButtontype
Листинг 19.6. Добавление свойства-объекта в компонент TMyButtontype TMyButton = class(TButton) private { Private declarations } FMyObject:TMyObject; procedure SetMyObject (Value: TMyObject); pro
Листинг 19 7 Полный листинг для нового компонента

Листинг 19.7. Полный листинг для нового компонентаunit QMyButton;interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TMyObject = class (TPersistent) pr
Свойствообъект MyObject в новом компоненте TMyButton
Свойство-объект MyObject в новом компоненте TMyButtonОбратите внимание на реализацию метода TMyObject. Assign. Здесь сначала выполняется проверка на то, правильный ли передается экзе
Листинг 19 8 Пример компонента TWeek
Листинг 19.8.Пример компонента TWeekunit Week; interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs;type TWeek = class(TComponent) private { Private declarations } funct
Результат работы компонента TWeek
Результат работы компонента TWeekСоздание собственных редакторов свойствПеред тем как создавать собственный редактор свойств компонента, рассмотрим сначала имеющиеся в Kylix редактор
Листинг 19 9 Определение базового
Листинг 19.9. Определение базового класса TPropertyEditorTPropertyEditor = class(TBasePropertyEditor, IProperty) private FDesigner: IDesigner; FPropList: PInstPropList; FPropCount: Integer; functi
Листинг 19 10 показывает как создать

Листинг 19.10 показывает, как создать новый редактор свойств THintProperty. В качестве класса-предка для данного редактора свойств выберем редактор TStringproperty.
Листинг 19 10 Создание нового редактора свойств
Листинг 19.10.Создание нового редактора свойствTHintProperty = class(TStringProperty) public function GetAttributes: TPropertyAttributes; override; function GetValue : String; override; procedure
Листинг 19 11 Процедура регистрации нового редактора свойствprocedure Register; begin
Листинг 19.11. Процедура регистрации нового редактора свойствprocedure Register; begin RegisterPropertyEditor (TypeInfо(String), TControl, 'Hint', THintProperty); end;Данная процедура позволяет пр
Создание событий компонента
Создание событий компонента Стандартные события компонентов CLX Kylix мы с вами уже рассматривали в предыдущих главах. В настоящий момент нам предстоит дать четкое определение событию, а также
Листинг 19 12 Метод диспетчеризации события TControl = class (TComponent) private
Листинг 19.12. Метод диспетчеризации событияTControl = class (TComponent) private FOnClick: TNotifyEvent; protected procedure Click; dynamic; property OnClick: TNotifyEvent read FOnClick write
Листинг 19 13 Пример обработки события нажатия кнопки мыши

Листинг 19.13.Пример обработки события нажатия кнопки мыши procedure TForm1. FormMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.TextOut(X,
Наглядно демонстрирует результат работы вышеприведенной программы
наглядно демонстрирует результат работы вышеприведенной программы.
Результат обработки события OnMouseDown
Результат обработки события OnMouseDown Пример создания нового события компонента Попробуем теперь создать собственное событие. Для этого нужно сначала убедиться, что такого с
Листинг 19 14 Пример создания нового события unit halfmin; interface
Листинг 19.14.Пример создания нового событияunit halfmin; interfaceuses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs;type TTimeEvent - procedure (Sender: TObject; TheTime:
Листинг 19 15 Обработчик нового события procedure TForm1 HalfMinutelHalfMinute(Sender TObject;
Листинг 19.15.Обработчик нового события procedure TForm1.HalfMinutelHalfMinute(Sender: TObject; TheTime: TDateTime); begin Edit1.Text:=('Время '+TimeToStr(TheTime)); Edit1.Refresh; end; В ре

Создание методов компонента
Создание методов компонента Добавление методов в новый компонент — операция несложная. Однако нужно обратить внимание на некоторые особенности, которые в дальнейшем облегчат взаимодействие поль
Таблица 19 2 Размещение методов компонента в различных секциях
Таблица 19.2. Размещение методов компонента в различных секциях Секция Размещаемые методы Private В данной секции
Регистрация компонента в среде Kylix
Регистрация компонента в среде Kylix Регистрация компонента необходима для размещения компонента в палитре компонентов. При использовании эксперта компонентов для создания нового компонента
Результат регистрации компонента

Результат регистрации компонента Обратите внимание на значок, которым обозначается новый компонент. Его можно поменять на другой. Для создания собственного значка можно использ
Пакеты компонентов
Пакеты компонентов Пакеты — это специальные динамически присоединяемые компоненты (аналоги файлов so — разделяемых объектов, Shared Objects). По своему использованию пакеты делятся на: пакеты
Для чего используются пакеты
Для чего используются пакеты Как мы уже говорили выше, пакеты разработки предназначены для упрощения задачи распределения и установки компонентов, созданных разработчиком. Программирование с по
Таблица 20 1 Типы файлов пакетов
Таблица 20.1. Типы файлов пакетов Расширение файла Содержание файла dpk Исходный файл пакета, содержащий список мод

Использование пакетов в приложениях
Использование пакетов в приложениях Для того чтобы приложение, которое использует пакеты, благополучно запустилось, должны присутствовать в наличии все необходимые приложению файлы. Файлы so до
Вкладка Packages диалогового окна Project Options
Вкладка Packages диалогового окна Project Options
Окно добавления пакета в проект
Окно добавления пакета в проект Примечание При изменении пути поиска (Search path) в диалоговом окне добавления пакета (см. вы измените глобальные настройки
Динамическая загрузка пакетов
Динамическая загрузка пакетов Иногда требуется загружать необходимый пакет во время работы приложения. Для этой цели служит функция LoadPackage. Данная функция находится в модуле Kylix SysUtils
Таблица 20 2 Основные runtime пакеты Kylix

Таблица 20.2. Основные runtime пакеты Kylix Имя файла пакета Модули, входящие в пакет bplclx.so.6 Classes, Con
Таблица 20 3 Основные designtime пакеты Kylix
Таблица 20.3. Основные design-time пакеты Kylix Имя файла пакета Вкладки палитры компонентов dclstd Standard, Addit
Установка пакетов компонентов

Установка пакетов компонентов Для того чтобы установить собственные пакеты или пакеты, созданные другими разработчиками, вам необходимо выполнить следующие шаги: 1. В случае, когда вы устанавл
Окно просмотра компонентов входящих в пакет
Окно просмотра компонентов, входящих в пакет
Создание и редактирование пакетов
Создание и редактирование пакетов Процесс создания пакета включает в себя: задание названия пакета; указание списка других пакетов, связанных с новым пакетом или требуемых для его работы;
Пиктограмма Package диалогового окна New Items
Пиктограмма Package диалогового окна New Items Редактор пакета включает в себя два раздела: содержания (Contains) и требований (Requires). Для добавления нового модуля в раздел
Редактор пакета
Редактор пакета
Вкладка Add Unit диалогового окна Add

Вкладка Add Unit диалогового окна Add На вкладке Add Unit диалогового окна Add запишите в поле имени файла модуля имя файла pas, который вы хотите включить в пакет, либо воспол
Диалоговое окно Add
Диалоговое окно Add 4. В появившемся диалоговом окне (в поле имени пакета (Package name) введите имя файла пакета (dcp), требуемого для работы вашего пакета. Вы т
Диалоговое окно Project Options
Диалоговое окно Project Options Редактировать уже существующий файл пакета можно по-разному: выбрать пункт главного меню Kylix File/Open и в нем уже — файл пакета, который н
Структура пакета
Структура пакета Вспомним все, что мы уже знаем о пакетах, и нам нетрудно будет понять, из чего состоит пакет. Пакет состоит из: имени, раздела Requires и раздела Contains. Package имя пакет
Компиляция пакета
Компиляция пакета Как откомпилировать пакет, мы с вами уже знаем, осталось только рассмотреть некоторые особенности компиляции. Для начала рассмотрим директивы компилятора, которые могут включ
Таблица 20 4 Директивы компилятора пакетов

Таблица 20.4. Директивы компилятора пакетов Директива Применение {$IMPLICITBUILD OFF} Служит для предотвращения
Использование компилятора командной строки
Использование компилятора командной строки Если вы компилируете пакет из командной строки (без загруженной графической оболочки Linux), вы можете воспользоваться ключами, приведенными в табл. 2
Таблица 20 5 Ключи для компиляции пакета из командной строки
Таблица 20.5. Ключи для компиляции пакета из командной строки Ключ Назначение -$G-
Отключает создание ссылок на имп
Простые типы данных
Простые типы данных
Таблица 2 1 Целочисленные типы данных
Таблица 2.1. Целочисленные типы данных Тип данных Диапазон значений Формат чисел в памяти Integer
Таблица 2 2 Вещественные типы данных
Таблица 2.2. Вещественные типы данных Тип данных
Диапазон значений Точность (знаков) Количество байт
Таблица 2 3 Отличия результатов операций над логическими типами
Таблица 2.3. Отличия результатов операций над логическими типами Тип данных Boolean Типы данных ByteBool, WordBool,LongBool False Tru
Таблица 2 3 (окончание)
Таблица 2.3 (окончание) Тип данных Boolean Типы данных ByteBool, WordBool, LongBool
Ord(True) = 1 Ord(True)
Структурные типы данных
Структурные типы данных Структурные типы данных — это такие типы, которые состоят из данных других типов, в том числе из данных структурного типа. К числу таких данных относятся: строки; м
Таблица 2 4 Строковые типы данных
Таблица 2.4. Строковые типы данных Тип данных Максимальная длина Занимаемая память Используется для:
Таблица 2 5 Операции допустимые над множествами

Таблица 2.5. Операции, допустимые над множествами Обозначение Название Тип результата Результат Пример
Таблица 2 5 (окончание)
Таблица 2.5 (окончание) Обозначение Название Тип результата Результат
Пример =
Одномерный массив на десять переменных
Одномерный массив на десять переменных Статический одномерный массив: var MyArray: array[1..100] of Char; Данная запись задает одномерный массив с именем MyArray, который буд
Двумерный массив А на двадцать элементов Задание статического двумерного массива
Двумерный массив А на двадцать элементов Задание статического двумерного массива: var MyMatrix: array[1..10, 1..50] of Real; Многомерные массивы называют еще и массивами массив
Листинг 2 1 Использование вариантной записи
Листинг 2.1. Использование вариантной записи var Person = recordR FirstName, LastName: string[40]; BirthDate: TDate; case Citizen: Boolean of True: (Birthplace: string [40]);
Указатели процедурные и вариантные типы данных

Указатели, процедурные и вариантные типы данных Кроме рассмотренных выше простых и структурных типов данных, в языке Object Pascal имеется еще несколько типов данных, не относящихся ни к тем, н
Листинг 2 2 Пример использований указателей
Листинг 2.2. Пример использований указателей var X, Y: Integer; / / объявление целых переменных X и Y Р: ^Integer; / / Р - указатель целого типа begin X := 17; / / присваиваем значение пере
Листинг 2 3 Описание процедурных указателей
Листинг 2.3. Описание процедурных указателей type TIntegerFunction = function: Integer; TProcedure = procedure; TStrProc = procedure(const S: string); TMathFunc = function (X: Double): Do
Листинг 2 4 Использование данных вариантного типа
Листинг 2.4. Использование данных вариантного типа var V1, V2, V3, V4, V5: Variant; I: Integer; D: Double; S: string; begin V1 := 1; / / целое значение V2 := 1234.5678; / / действител
Проблемы переноса приложений
Проблемы переноса приложений Kylix предоставляет возможность разработки так называемых кроссплат-форменных (межплатформенных) 32-разрядных приложений, которые могут работать как в среде Linux,
Перенос Windowsприложений в cреду Linux

Перенос Windows-приложений в cреду Linux Сложность переноса приложений из одной среды в другую зависит от сложности самого приложения. Если в приложении используются специфичные вызовы функций
Листинг 21 1 Использование директивы $IFDEF
Листинг 21.1.Использование директивы $IFDEF // Если среда - Windows [$IFDEF MSWINDOWS] IniFile.LoadfromFile('с:\x.txt'); [$ENDIF] // Если среда - Kylix [$IFDEF LINUX] IniFile.LoadfromFile('/home/
CLX как версия VCL
CLX как версия VCL Kylix использует библиотеку компонентов Borland для создания кроссплат-форменных приложений (Borland Component Library for Cross Platform, CLX) вместо библиотеки визуальных к
Таблица 21 1 Части в которые сгруппированы компоненты CLX
Таблица 21.1. Части, в которые сгруппированы компоненты CLX Часть Описание VisualCLX Межплатформенные графические к

Отличия CLX от VCL
Отличия CLX от VCL Хотя многое в CLX и VCL выполнено одинаково, они имеют некоторые отличия. Рассмотрим их. Визуальная среда Linux выглядит несколько иначе, чем Windows. Внешний вид диалогов
Команды компоненты и другие элементы перенос которых невозможен
Команды, компоненты и другие элементы, перенос которых невозможен Некоторые специфичные для Windows возможности не могут быть перенесены напрямую в среду Kylix. Такие элементы, как COM, ActiveX
Таблица 21 2 Различие возможностей Delphi и Kytix
Таблица 21.2. Различие возможностей Delphi и Kytix Delphi/Windows возможность Kylix/Llnux возможность Вызовы Windows API
Совместимости модулей Kylix и Delphi
Совместимости модулей Kylix и DelphiВсе компоненты и объекты VCL и CLX определены в файлах модулей (pas). Например, вы можете найти описание объекта TObject в модуле System.pas, а описание базовог

Таблица 21 3 Совместимые модули Delphi и Kylix
Таблица 21.3. Совместимые модули Delphi и KylixМодуль DelphiМодуль KylixActnListQactnListButtonsQbuttonsCheckLstQcheckLstClassesClassesClipbrdQclipbrdComCtrlsQcomCtrlsConstsConsts, QConsts и RTLCo
Таблица 21 3 (окончание)
Таблица 21.3 (окончание)Модуль DelphiМодуль KylixGridsQgridsHelpIntfsHelpIntfsImgListQimgListIniFilesIniFilesMaskQmaskMaskUtilsMaskUtilsMasksMasksMathMathMenusQmenusMidasMidasMidConstMidConstPrint
Таблица 21 4 Модули VCL не поддерживаемые средой Kylix
Таблица 21.4. Модули VCL, не поддерживаемые средой KylixМодуль VCLПричина, по которой он не поддерживается в KylixADOConstНет ADOADODBНет ADOAppEvntsНет объекта TapplicationEventAxCtrlsНет СОМBdeC
Таблица 21 4 (окончание)
Таблица 21.4 (окончание)Модуль VCLПричина, по которой он не поддерживается в KylixMtxНет COMmxConstsНет COMObjBrkrМожет появиться в более поздних версияхOleConstMayНет СОМOleCtnrsНет СОМOleCtrlsНе
Непереносимые возможности
Непереносимые возможности При создании объекта CLX с помощью палитры компонентов или написания кода, использующего метод Create, компилятор создает экземпляр widget. Этот экземпляр принадлежит

Совместное использование файлов ресурсов Linux и Windows
Совместное использование файлов ресурсов Linux и Windows Если вы хотите, чтобы ваше приложение успешно функционировало и в Windows и в Linux, вы можете распространять ваше приложение с ресурсны
Различие сред Linux и Windows
Различие сред Linux и Windows В табл. 21.5 приводится список отличий сред Linux и Windows.
Таблица 21 5 Отличия Linux и Windows
Таблица 21.5. Отличия Linux и Windows Отличие Описание Чувствительность к регистру букв в именах файлов В Linux заг
Таблица 21 5 (продолжение)

Таблица 21.5 (продолжение) Отличие Описание Пакетные файлы и файлы скриптов оболочки Эквивалентом пакетны
Таблица 21 5 (окончание)
Таблица 21.5 (окончание) Отличие Описание Расширения имен файлов Linux не использует расширения имен файлов дл
Написание переносимого кода

Написание переносимого кода Для создания кроссплатформенного приложения следуйте приведенным ниже советам: сократите вызов специфичных функций API Win32 или Linux или откажитесь от него совс
Листинг 21 2 Код для среды Windows
Листинг 21.2.Код для среды Windows while p^ #0 do begin if р^ in LeadBytes then inc (p) ; inc(p); end; Этот код можно преобразовать в платформонезависимый, как показано в листинге
Листинг 21 3 Платформонезависимый код
Листинг 21.3. Платформонезависимый код while р^ #0 do begin if р^ in LeadBytes then p := StrNextChar(p) else inc(p); end; Если использование функций библиотек не приводит к работающе
Использование специальных директив
Использование специальных директив Использование директивы компилятора $IFDEF является достаточно разумным путем для разделения кода Windows и Linux в вашем межплатформенном приложении. Тем не
Листинг 21 4 Неправильная работа директивы $IFDEF
Листинг 21.4.Неправильная работа директивы $IFDEF {$IFDEF WIN32} {32-битный код Windows размещаем здесь} {$ELSE} {16-битный код Windows находится здесь} //!! По ошибке Linux может // попробова

Вывод сообщений
Вывод сообщений Директива компилятора $MESSAGE позволяет вашему приложению выводить подсказки сообщения и ошибки таким образом, как это делает компилятор: {$MESSAGE HINT|WARN | ERROR | FATAL
Перенос кода ассемблера в Linux
Перенос кода ассемблера в Linux Если ваше Windows-приложение содержит код на языке ассемблера, вы, скорее всего, не сможете использовать этот же самый код в Linux, т. к. среда Linux требует нез
Сообщения и системные события
Сообщения и системные события Сообщения и события в Linux работают иначе, чем в Windows. Этот факт в первую очередь влияет на процесс создания своих компонентов. Несмотря на это, большинство ко
Таблица 21 6 Методы для подмены системных сообщений Windows
Таблица 21.6. Методы для подмены системных сообщений Windows Метод Описание ChangeBounds
Используется, когда компон
Переносимые приложения баз данных
Переносимые приложения баз данных В Windows среда Delphi обеспечивает программисту три пути для доступа к информации, содержащейся в базах данных; ActiveX Data Objects (ADO); Borland Datab
Таблица 21 7 Соответствие компонентов доступа к данным
Таблица 21.7. Соответствие компонентов доступа к данным Компоненты InterBase Express Компоненты BDE Компоненты ADO Ком
Листинг 21 5 Обработчик события
Листинг 21.5.Обработчик события AfterPost procedure TForm1.ClientDataSetlAfterPost(DataSet: TDataSet); begin with DataSet as TClientDataSet do ApplyUpdates(1); end;

Кроссплатформенные Интернетприложения
Кроссплатформенные Интернет-приложения Интернет-приложения — это приложения типа клиент-сервер, которые используют стандартные Интернет-протоколы для обеспечения связи между клиентом и сервером
Выражения и операторы
Выражения и операторы В этой главе мы рассмотрим такие конструкции языка Object Pascal, как выражения и операторы. Вы узнаете об арифметических, логических и строковых выражениях языка Object
Арифметические выражения
Арифметические выраженияАрифметические операции выполняются над целыми и действительными числами. Результатом выполнения арифметического выражения является также целое или действительное число.В я
Таблица 3 1 Арифметические операции над двумя операндами
Таблица 3.1. Арифметические операции над двумя операндамиЗнак операцииОперацияТипы операндовТип результатаПример+СложениеInteger, realInteger, realX+Y-ВычитаниеInteger, realInteger, realX-Y*Умноже
Таблица 3 2 Арифметические операции над одним операндом
Таблица 3.2. Арифметические операции над одним операндомЗнак операцииОперацияТип операндаТип результатаПример+Сохранение знака числаInteger, realInteger, real+7-Отрицание знака числаInteger, realI

Листинг 3 1 Примеры использования арифметических операций
Листинг 3.1. Примеры использования арифметических операций var а, b, с, d: Integer; // Объявляем четыре целочисленных переменныхbegin a:=7; b:=5; c:=-10; // Присваиваем трем из них начальные значе
Таблица 3 3 Поразрядные арифметические операции
Таблица 3.3. Поразрядные арифметические операцииЗнак операцииОперацияТипы операндовТип результатаПримерnotПоразрядное отрицаниеIntegerIntegernot XandПоразрядное умножениеIntegerIntegerX and YorПор
Таблица 3 4 Результаты выполнения поразрядных арифметических операций
Таблица 3.4. Результаты выполнения поразрядных арифметических операцийЗнак операцииОперацияБит1Бит 2Результирующий битnotПоразрядное отрицание0110andПоразрядное умножение000010
Таблица 3 4 (окончание)
Таблица 3.4 (окончание)Знак операцииОперация Бит1Бит 2Результирующий бит100111orПоразрядное сложение000011101111хоr Поразрядное исключающее ИЛИ000011101110Приведем примеры использования побитовых
Листинг 3 2 Примеры использования побитовых операций
Листинг 3.2. Примеры использования побитовых операций var a,b,с: Integer; // Объявляем три целочисленные переменные begin а =175; b:=77; // Двум из них присваиваем начальные значения с =not a; //

Таблица 3 5 Логические операции языка Object Pascal
Таблица 3.5. Логические операции языка Object PascalЗнак операцииОперацияТипы операндовТип результатаПримерnotОтрицаниеBooleanBooleannot (С in MySet)
Таблица 3 5 (окончание)
Таблица 3.5 (окончание)Знак операцииОперацияТипы операндовТип результатаПримерandКонъюнкция (логическое И)BooleanBooleanA and ВorДизъюнкция (логическое ИЛИ)BooleanBooleanA or ВxorИсключающая дизъю
Таблица 3 6 Результаты выполнения логических операций
Таблица 3.6. Результаты выполнения логических операцийЗнак операцииОперацияОперанд 1Операнд 2РезультатnotОтрицаниеFalseTrueTrueFalseandКонъюнкция (логическое И)FalseFalseFalseFalseTrueFalseTrueFal
Простые операторы
Простые операторы Для выполнения каких-либо действий в программе на языке Object Pascal применяются операторы. Операторы — это команды компилятору языка на выполнение определенных действий. Как
Листинг 3 3 Пример работы с оператором with
Листинг 3.3 Пример работы с оператором with type TDate = record // Объявляем новый тип - запись с тремя полями Day: Integer; // Поле День Month: Integer; // Поле Месяц Year: Integer; // Поле

Структурированные операторы
Структурированные операторы Напомним, что структурированные операторы — это операторы, которые изменяют ход выполнения команд программы. К числу структурированных операторов можно отнести: о
Листинг 3 4 Пример использования оператора case
Листинг 3.4. Пример использования оператора case case I of // В зависимости от значения переменной I 1..5: С := 'До пяти'; // Если оно от 1 до 5, то переменная С='До пяти' 6..9: С := 'Выше
Листинг 3 5 Пример использования оператора условия
Листинг 3.5. Пример использования оператора условия if I in [1..5] then С := 'До пяти' else if I in [6..10] then С := 'Выше пяти' else if (I = 0) or (I in [10..99]) then С := 'Вне о
Листинг 3 6 Примеры циклов с параметрами
Листинг 3.6. Примеры циклов с параметрами for i:=l to 20 do // Начало циклаbegin // Начало составного оператора s:=s+i; // Тело цикла a:=a*i;end; // Конец цикла. Значение i у
Листинг 3 7 Пример цикла с предусловием
Листинг 3.7, Пример цикла с предусловием while I 0 do // Начало циклаbegin // Начало составного оператора S : = S+I; // Тело цикла I := I - 1; // Изменяем переменную i самостоят

Листинг 3 8 Пример цикла с постусловием
Листинг 3.8. Пример цикла с постусловием repeat // Начало цикла К : = I mod J; // Тело цикла I : = J; J : = К; until J = 0; // Условие цикла
Подпрограммы и модули
Подпрограммы и модули В этой главе мы расскажем о принципах описания функций и процедур языка Object Pascal. Вы узнаете, чем отличается параметр подпрограммы от аргумента и научитесь сами созд
Функции
Функции Функции — это подпрограммы, которые могут возвращать под своим именем результирующее значение. Типичным примером функции может быть функция Sin (х). Запись: A:=Sin(x); позволяет вызват
Листинг 4 1 Описание функции Mах
Листинг 4.1. Описание функции Mах function Max(A: array of Real; N: Integer): Real; var X: Real; I: Integer; begin X := A[0]; for I := 1 to N - 1 do if X A[I] then X : = A[ I ];
Процедуры
Процедуры Процедура — это обыкновенная подпрограмма, которая не возвращает никакого значения под своим именем. Описание процедуры также состоит из двух частей: заголовка и блока. Заголовок про

Листинг 4 2 Описание процедуры NumString
Листинг 4.2. Описание процедуры NumString procedure NumString(N: Integer; var S: string); var V: Integer; begin V := Abs(N) ; S : = " ; repeat S := Chr(V mod 10 + Ord('0')) + S;


Руководство паровозному машинисту - перейти
Unix Man (Справочное руководство) - перейти
A.OUT - перейти
BACKUP - перейти
HYPOT(3M) - перейти
CURSES(3X) - перейти

DAEMON.MN(7) - перейти
ECHO(1) - перейти
GETPWENT(3C) - перейти
GAMMA(3M) - перейти
H2PH(1) - перейти
ID(1) - перейти
BESSEL(3M) - перейти
KBMODE(ADM) - перейти
L3TOL(3C) - перейти