Gelonkin - Лицей №2 г.Тула

advertisement
1. Введение
Интегрированная среда программирования Delphi разработана
фирмой Borland. Версия среды программирования Delphi 5,
которая будет рассматриваться, вышла в свет во второй половине 1999 г.
Интегрированная среда программирования Delphi позволяет
сравнительно легко и быстро создавать законченные приложения Windows. Поэтому она получила название RAD (Rapid Application Development — среда быстрой разработки приложений).
Среда Delphi создана на основе спецификации SDI (Single
Document Interface — однодокументный интерфейс), т. е. она
представляет собой несколько отдельно расположенных окон на
Рабочем столе (см. Приложение 1):
1. Главное окно (Main Window), содержащее Строку заго
ловка (Caption Line), Панель меню (Menu System), Пане
ли инструментов (Toolbars) и Палитру компонентов (Com
ponent Palette);
2. Инспектор объектов (Object Inspector);
3. Дизайнер, форм (Form Designer);
4. Окно редактора исходного текста (Editor Window).
Главное окно дает возможность осуществлять основные функции управления проектом создаваемого приложения Windows.
Проект приложения или просто проект — это совокупность файлов, которая используется при разработке приложения Windows.
Одни файлы проекта создаются программистом, другие
получаются в результате компиляции (перевода на машинный
язык) созданных файлов.
Инспектор объектов — это окно, содержащее списки свойств и
событий формы и расположенных на ней компонентов.
Дизайнер форм (для простоты будем в дальнейшем называть
его форма) представляет собой окно будущего приложения Windows. На форме программист располагает необходимые компоненты интерфейса приложения. Компонентами интерфейса являются кнопки, окна, таблицы, графики, рисунки и т. д.
В Библиотеке визуальных компонентов (VCL, см. Приложение
2) среды Delphi содержится более 200 компонентов, которые в
виде пиктограмм отображаются в Палитре компонентов.
Программист, создающий проект приложения, выбирает в Палитре компонентов необходимые компоненты (кнопки, окна и
т. д.), размещает их на форме и пишет коды для работы этих
компонентов.
Код для работы компонента пишется в Окне редактора исходного текста (назовем его модуль). Для написания кода в среде программирования Delphi используется структурный объектноориентированный язык Object Pascal. Он разработан на основе
языка Pascal (Паскаль), использовавшегося в пакете Turbo Pascal
(Турбо Паскаль). Пакет Turbo Pascal был разработан в 1983 г.
Язык Pascal был создан Н. Виртом в 1971 г.
Среда программирования Delphi имеет встроенный компилятор, переводящий текст программы в машинный код, понятный
процессору компьютера. В настоящее время этот компилятор является самым быстрым и позволяет обеспечивать высокую
производительность среды программирования, необходимую для
создания приложений Windows. Компилятор среды программирования Delphi создает автономные ехе-файлы (исполняемые
файлы). Поэтому приложения, созданные в Delphi, будут работать
и на компьютере, на котором не установлена среда Delphi.
Книга содержит краткое описание интегрированной среды
программирования Delphi, упражнения с описанием конструирования программ, приложения.
Приложение 1 отображает интерфейс интегрированной среды
программирования Delphi.
Приложение 2 содержит описание используемых в тексте аббревиатур.
Приложение 3 содержит информацию о назначении некоторых
зарезервированных слов языка Object Pascal.
Приложение 4 содержит некоторые сведения о методах базового класса TObject.
Приложение 5 отображает проект приложения Quest.
2. Общие сведения о Delphi
Раздел содержит следующие сведения:
• Краткое описание основных понятий объектного языка
программирования Object Pascal.
• Описание разделов Главного меню.
• Описание компонентов некоторых страниц Палитры ком
понентов.
• Описание некоторых наиболее часто употребляемых
команд Панели инструментов.
• Описание Дизайнера форм.
• Описание Инспектора объектов.
• Описание Окна редактора исходного текста.
2.1. Основные понятия
Одним из основных понятий в языке Object Pascal является
понятие объекта. Понятие объекта максимально приближено
к объекту в обычном житейском понимании. Например, «в обыденной жизни» объектом может быть автомобиль, а в языке
Object Pascal — кнопка.
Каждый объект имеет набор свойств. Свойствами автомобиля
являются его габариты, форма, цвет и т. д. Свойства объекта
можно изменять. Например, цвет автомобиля можно изменить,
перекрасив его. Объекты языка Object Pascal имеют свойства,
которые могут изменяться как в процессе создания проекта приложения, так и в уже созданном, работающем приложении. Рассмотрим пример изменения свойств кнопки на форме. В процессе
создания проекта приложения можно изменять положение кнопки на форме, ее размеры, цвет и другие свойства. Если для кнопки написать код, обрабатывающий такие события, как перемещение указателя мыши над кнопкой или щелчок на кнопке, то в
процессе выполнения приложения может изменяться внешний
вид кнопки (надпись на кнопке, цвет кнопки, размеры кнопки).
Совокупность объектов с определенными свойствами образует класс объектов. Обращаясь к примеру с автомобилями, можно выделить такие классы, как «легковые автомобили», «грузовые автомобили», «автобусы» и др. Каждый класс имеет свои,
присущие только ему, свойства. Например, класс «легковые автомобили», имеет салон, специально предназначенный для перевозки нескольких пассажиров, а класс «грузовые автомобили» имеет кузов, предназначенный для перевозки грузов. В
языке Object Pascal кнопка имеет набор свойств, присущий
классу кнопок, а метка имеет набор свойств, присущий классу
меток. Некоторые из этих свойств совпадают, например свойства, определяющие размер и положение этих объектов.
Основным (базовым) классом в нашем примере будет класс
«автомобиль». Он является родительским классом, порождающим все классы автомобилей. Все классы, наследники основного
родительского класса, наследуют свойства этого родительского
класса. Все автомобили имеют колеса, двигатель, рулевую систему. В языке Object Pascal также существует основной базовый
класс TObject, являющийся родительским классом для всех остальных классов. Класс TButton (командные кнопки) наследует
свойства базового класса.
Каждый класс имеет свои методы, которые определяют поведение объектов этого класса. Например, методом класса «автомобиль» является работа двигателя внутреннего сгорания.
Примером метода, присущего только классу «грузовые автомобили», является работа механизма поднятия кузова. В языке
Object Pascal существуют методы, определяющие поведение
объектов в процессе выполнения приложения.
Методами являются функции и процедуры. Процедура представляет собой обработчик некоторого события, например
щелчка указателем мыши на кнопке. Функция также представляет собой обработчик события, но в отличие от процедуры при
этом возвращается некоторое, вычисленное значение. Процедуры и функции создаются с помощью операторов, написанных на
языке Object Pascal.
Объект имеет определенный набор событий. Событие указывает на метод, используемый при наступлении этого события.
Например, для объекта класса «грузовые автомобили» событие
♦движение рычага поднятия кузова» обрабатывается механизмом поднятия кузова, работа которого является методом. Примером события для кнопки в языке Object Pascal является со-
бытие «щелчок указателем мыши на кнопке». Для этого события создается метод, например, записывается оператор Close
(закрыть), закрывающий окно приложения.
2.1.1. Класс
Класс (class) — это категория объектов, обладающих одинаковыми свойствами и поведением. Класс имеет поля, свойства и
методы. Имя класса может быть любым допустимым идентификатором. Принято идентификаторы большинства классов начинать с символа «Т».
Примеры стандартных классов:
TButton — содержит все необходимое для создания кнопки;
TEdit — позволяет создавать и управлять работой строки ввода.
Класс наследует события, поля, свойства и методы своих
предков (parent). Например, предком класса TForm является
класс TCustomForm.
Доступ к объявляемым объектам класса, переменным, процедурам и функциям определяется тем, в каком разделе они объявлены. Раздел public (доступный) содержит элементы, видимые в
любой программе или модуле, которые имеют доступ к данному
модулю, содержащему объявленный класс. Раздел private (частный) содержит только те поля и методы, которые зависят от класса и должны быть скрыты от всех производных классов.
Пример объявления класса и объекта класса: type
TForml = class(TForm)
Buttonl: TButton; Editl:
TEdit; private
{ Private declarations }
public
{ Public declarations } end;
var
Forml: TForml;
В разделе type (тип) объявляется тип TForml, который является классом, наследником класса TForm. Для объявления класса
используется оператор отношения «=» (равно) и зарезервированное слово class (класс), после которого в круглых скобках
указывается класс-родитель. В этом же разделе объявляет-
ся объект Buttonl (кнопка управления), являющийся экземпляром
класса TButton и объект Editl (окно редактирования),
являющийся экземпляром класса TEdit. При объявлении объекта
после его имени ставится знак «:» (двоеточие) и пишется его тип
(класс).
В разделе var (переменные) объявляется объект Forml (форма)
типа TForml. Этот объект является экземпляром класса TForml.
Класс TObject является главным базовым классом всех классов в среде программирования Delphi. Класс TObjeet не имеет
полей и свойств, но имеет методы, позволяющие создавать,
обрабатывать и удалять объекты. Все классы в Delphi являются
прямыми или косвенными наследниками класса TObject. Объявление класса TObject представлено в Приложении 4.
Интерфейс приложения Windows, создаваемого в среде программирования Delphi, основывается на четырех базовых классах:
1. TApplication (Приложение). Среда программирования
Delphi автоматически создает экземпляр Application
класса TApplication при выполнении приложения. Свой
ства и методы класса TApplication описывают основные
характеристики приложения Windows. Класс TApplicati
on подготавливает определение класса окна приложения
(TForm), создает главное окно приложения, активизирует
приложение, обрабатывает сообщения и т. д.
2. TClipboard (Буфер обмена). Его средства определяют взаи
модействие приложения с Буфером обмена Windows. Бу
фер обмена используется как временное хранилище ско
пированных или вырезанных в него Объектов или фраг
ментов текста.
3. TForm (Форма). Инкапсулирует (содержит) свойства и ме
тоды окна Windows.
4. TScreen (Экран). Класс TScreen инкапсулирует состояние
экрана или выводимой области. Среда Delphi во время ра
боты автоматически создает экземпляр Screen класса
TScreen.
2.1.2. Объект
Объект (object) — конкретный, существующий в памяти
компьютера, экземпляр класса. Объект всегда находится в
определенном состоянии, которое определяется его свойствами. Свойства объекта могут быть неизменными (статическими) или изменяемыми во время выполнения программы (динамическими). Объект имеет поля, хранящие его уникальные
данные.
Объекты взаимодействуют друг с другом, воздействуя на
другие объекты и подвергаясь воздействию других объектов.
Объект является экземпляром класса (class instance), которому
он принадлежит.
Перед объявлением объекта в разделе объявления типов
объявляется тип:
type
TNewObject = class;
Объявлен тип TNewObject, являющийся классом, потомком
базового класса TObject.
Объявление переменной (Объекта) производится в разделе
объявления переменных:
var
NewObject: TNewObject;
Объявлена переменная NewObject, являющаяся экземпляром
типа (класса) TNewObject. Экземпляр класса — это объект
класса.
Экземпляр создается с помощью конструктора Create (создать):
NewObject:= TNewObject.Create
При этом под объект выделяется оперативная память.
Экземпляр класса после использования уничтожается деструктором Free (освободить):
NewObject.Free
После уничтожения объекта освобождается выделенная под
него память.
2.1.3. Поле
Поле (field) — инкапсулированные (содержащиеся) в классе
данные. Поля могут быть любого типа, в том числе и классами.
Обращение к полям обычно производится посредством свойств
и методов. Имя поля обычно такое же, как и имя класса, но
начинается с буквы F (Field — поле).
Пример объявления поля:
type
TNewClass = class
FName: String;
end;
В этом примере:
Объявляется класс TNewClass — потомок класса TObject.
Объявляется поле FName строкового типа. После объявления
поля к нему можно обращаться, т. е. использовать его в
программе.
Пример непосредственного обращения к полю:
var
TabNew: TNewClass;
begin
TabNew.FName:= 'Misha';
end;
В этом примере:
• Объявляется объект TabNew, являющийся экземпляром
класса TNewClass.
• Для обращения к полю FName записывается составное
имя, состоящее из имени Объекта и имени поля, разде
ленных точкой. В примере полю присваивается строковое
значение.
2.1.4. Свойство
Свойство (property) представляет собой механизм, регулирующий доступ к полям. Свойство связано с полем класса и указывает методы класса, которые используются для чтения поля
или записи в него. Метод доступа для чтения должен быть функцией без параметров, которая возвращает значение того же
типа, что и свойство. Имя функции, предназначенной для чтения, должно начинаться с приставки (Jet (получить).
Метод, используемый для записи, должен быть процедурой,
использующей один параметр. Этот параметр должен быть того
же типа, что и свойство. Имя процедуры, предназначенной для
записи, должно начинаться с приставки Set (установить).
Среда программирования Delphi позволяет легко манипулировать свойствами объектов как в режиме проектирования (design
time), так и в режиме выполнения программы (run time).
Для объявления свойства используются зарезервированные
слова property (свойство), read (читать), write (писать).
Пример объявления свойства:
type
TNewClass = class
FName: String;
property Name: string read GetName write SetName; end;
В этом примере:
• Объявляется свойство Name. Сначала объявляется новый
класс TNewClass. Затем объявляется поле FName типа
string (строка). И после этого объявляется свойство Name.
Здесь GetName — метод чтения и SetName — метод
записи.
• После объявления свойства его можно использовать в про
грамме.
Пример обращения к свойству в тексте программы:
var
TabNew: TNewClass;
KName: String;
begin
TabNew:= TNewClass.Create;
TabNew.Name:= 'Misha'; KName:=
TabNew.Name; TabNew.Free; end;
В этом примере:
• Для присвоения значения используется оператор «:=».
• Объявляется объект TabNew, являющийся экземпляром
класса TNewClass.
• Объявляется переменная KName строкового типа.
• Создается объект TabNew при помощи метода Create (со
здать).
• Свойству Name Объекта TabNew присваивается текстовое
значение.
• Переменной KName присваивается значение свойства.
• Уничтожается объект TabNew и освобождается память, вы
деленная под объект TabNew при помощи метода Free
(осво
бодить).
Свойства определяют внешний вид формы или компонента
(объекта на форме) и поведение формы или компонента. Свойства объектов можно изменять с помощью Инспектора объектов
(Object Inspector) или программно, используя Окно редактора
исходного текста (Editor Window).
Различают несколько видов свойств.
Простые свойства — это свойства, значения которых являются
числами или строками. Например, свойства Left (слева) и Тор
(сверху) принимают целые значения, определяющие положение
левого верхнего угла компонента (объекта на форме) или
формы. Свойства Caption (заголовок) и Name (имя) представляют собой строки и определяют заголовок и имя компонента на форме или самой формы. Пример:
Заголовок формы: «Мой первый проект».
Имя формы: MyForm. Заголовок кнопки:
«Пуск». Имя кнопки: bt_Pusk.
Перечислимые свойства — это свойства, которые могут принимать значения из предопределенного набора (списка). Простейший пример — это свойство типа Boolean (логический), которое может принимать значения True (истина) или False (ложь).
Например, если свойство Visible (видимый) для компонента
TLabel (метка) принимает значение True (истина), то метку видно на форме, а если это свойство принимает значение False
(ложь), то метку не видно на форме.
Вложенные свойства — это свойства, которые поддерживают
вложенные значения (или объекты). Инспектор объектов изображает знак «+» слева от названия таких свойств. Имеется два
вида таких свойств: множества и комбинированные значения.
Инспектор объектов изображает множества в квадратных скобках. Если множество пусто, оно отображается как []. Установки
для вложенных свойств вида «множество» обычно имеют значения типа Boolean (логический).
Пример изменения свойств объекта в режиме run time (выполнение программы):
procedure TForml.bt_ChangeClick(Sender: TObject); begin
bt_Change.Left:= 100;
bt_Change.Top:= 200;
bt_Change.Width:= 30;
bt_Change.Height:= 40;
end;
В этом примере записан обработчик события Click (щелчок)
для кнопки bt_Change. При щелчке на кнопке изменяются ее
размеры и положение на форме. С помощью оператора присваивания (:=) записываются новые значения свойств кнопки.
Свойство — это атрибут объекта, определяющий то, как объект выглядит или как он может себя вести. Свойства объекта
легко установить или изменить с помощью Инспектора объектов (см. разд. 2.3. «Инспектор объектов»).
2.1.5. Метод
Метод (method) — это процедура или функция, которая
определена как часть класса и инкапсулирована (содержится) в
нем. Методы манипулируют полями и свойствами классов (хотя
могут работать и с любыми переменными) и имеют автоматический доступ к любым полям и свойствам своего класса.
Поведение объекта определяется тем, какие он имеет обработчики и для каких событий. Создание приложения в среде
программирования Delphi состоит из настройки свойств используемых объектов и создания обработчиков событий (event
handler).
Функции и процедуры являются методами, которые применяются для создания обработчиков событий. Событиями в приложении могут быть: щелчок указателя мыши на кнопке, введение
в редактируемое поле числа, нажатие на клавишу клавиатуры,
движение указателя мыши над объектом и т. д. Функции и процедуры объявляются в разделе объявления типов type (тип).
Пример объявления функции и процедуры: type
TNewClass = class
FDig: Integer;
FText: String;
function PrimFunc(x: real): real;
procedure PrimProc; end;
В
•
•
•
•
этом примере:
объявляется класс TNewClass;
объявляется поле FDig целого типа;
объявляется поле FText строчного типа;
объявляется функция PrimFunc(), имеющая параметр х
вещественного типа. Функция возвращает значение веще
ственного типа;
• объявляется процедура PrimProc.
После объявления метода к нему можно обращаться.
Пример обращения к методу (функции и процедуре):
var
PrimMethod: TNewClass;
a: real;
begin
a:= PrimMethod.PrimFunc(5,33);
PrimMethod.PrimProc; end;
В этом примере:
• объявляется объект PrimMethod типа TNewClass, являю
щийся экземпляром класса;
• объявляется переменная а вещественного типа;
• переменной а присваивается значение, возвращаемое
функцией;
• выполняется процедура.
Описание функций и процедур содержится в Приложении 2.
2.1.6. Событие
Событие (event) — свойство процедурного типа. Значением
события является указатель на метод. В среде программирования Delphi имеется набор событий, отображенный на листе событий Events Инспектора объектов.
Примеры событий:
• OnClick — щелчок указателем мыши на объекте;
• OnMouseMove — движение указателя мыши над объек
том;
• OnMouseUp — нажатие на левую клавишу мыши, когда
указатель мыши расположен в области объекта. Областью
объекта является прямоугольник на форме, ограничен
ный маркерами этого объекта. Маркеры отображаются
при выделении объекта щелчком на нем указателем
мыши.
При выборе необходимого события окошко рядом с именем
этого события становится активным. Двойной щелчок указателем мыши в этом пустом окошке создает в модуле заготовку
процедуры, в которой следует написать обработчик этого события (код). При написании обработчика события широко используются методы класса, которому принадлежит данный
объект.
Пример:
Для того чтобы щелчок на кнопке bt_Close закрывал окно
приложения, надо для события OnClick (щелчок) написать обработчик этого события. На кнопке, находящейся на форме,
надо произвести двойной щелчок указателем мыши. При этом
в Окне редактора исходного текста появится заготовка процедуры, которая будет обрабатывать это событие:
procedure TForml.bt_CloseClick(Sender: TObject);
begin
end;
После зарезервированного слова procedure (процедура) записано имя класса объекта (TForml), содержащего данный объект
(кнопку bt_Close) и имя события (Click — щелчок). В скобках
указывается параметр процедуры (Sender — объект) с указанием
его типа (TObject). Обработчик события (код) записывается в
логическом блоке begin...end. В данном примере для закрытия
окна необходимо после зарезервированного слова begin (начало)
записать единственный оператор Close (закрыть) и поставить
после оператора знак «точка с запятой». Процедура всегда заканчивается зарезервированным словом end (конец), после которого ставится знак «точка с запятой».
2.1.7. Инкапсуляция
Инкапсуляция (encapsulation) — объединение в классе данных и подпрограмм для их обработки. Инкапсуляция — это то,
что объект хранит в себе: данные, определяющие его свойства, и
методы для обработки этих данных. Инкапсуляция позволяет
поддерживать целостность класса.
2.1.8. Наследование
Наследование (inheriting) — порождение класса от другого
класса с наследованием полей, методов и свойств своего родителя. Наследование означает, что любой класс может быть порожден другим классом.
Новый класс создается от класса-родителя при помощи следующего кода:
TNewClass = class(TParentClass) • Здесь
TNewClass — новый, созданный класс,
TParentClass — класс-родитель.
При этом новый класс наследует поля, свойства и методы родительского класса. Это дает возможность создавать новые
классы на основе имеющихся стандартных классов.
Так как все классы являются потомками класса TObject, то
можно создать класс, являющийся непосредственным потомком
класса TObject. В этом случае при написании кода можно не
указывать имени класса-родителя:
TNewClass = class
2.1.9. Полиморфизм
Полиморфизм (polymorphism) — свойство классов решать
схожие задачи различными способами. Допускаются одноименные методы в классе-родителе и классе потомке, имеющие разные алгоритмы обработки данных и придающие объектам разные свойства.
2.2. Главное окно
При запуске программы на Рабочем столе появляются несколько панелей и заготовка программы. В этом разделе вы прочитаете об этих панелях, познакомитесь с интерфейсом программы. Начнем изучение окон среды программирования с Главного окна.
На рис. 1 показано Главное окно, состоящее из четырех частей: 1.
Строка заголовка (Caption Line). В этой строке указывается
название программы и имя текущего проекта. В правой части
Строки заголовка расположены кнопки управления окном (свернуть, развернуть, закрыть). В левой части Строки заголовка ото-
бражается иконка Главного окна. Щелчок указателем мыши на
иконке открывает меню с командами управления окном:
• Восстановить;
• Переместить;
• Размер;
• Свернуть;
• Развернуть;
• Закрыть.
2. Панель меню (Menu System). На ней отображены разделы
выпадающего меню, содержащие команды и программы, испо
льзуемые при создании проекта. Описание разделов меню нахо
дится ниже по тексту в п. 2.2.1 «Разделы меню».
3. Панели инструментов (Toolbars) содержат кнопки быст
рого доступа — пиктограммы команд, используемых в процессе
создания проекта. При выполнении упражнений вы будете зна
комиться с кнопками быстрого доступа и учиться применять их
в процессе создания проекта. А сейчас рассмотрим лишь основ
ные кнопки, которые применяются наиболее часто.
• Кнопка New (создать) применяется для создания нового
Проекта.
• Кнопка Open (открыть) отображает диалоговое окно, с по
мощью которого открывается имеющийся на носителе
(например, жестком диске) проект.
• Кнопка Save All (сохранить все) применяется для сохра
нения модуля и проекта на носителе и для сохранения
всех изменений при конструировании проекта.
• Модули проекта открываются с помощью кнопки View
Form (показать форму).
• Кнопка Run (выполнить) применяется для компиляции
(перевода на машинный язык) и запуска проекта.
4. Палитра компонентов (Component Palette) содержит
вкладыши страниц с расположенными на них пиктограммами
компонентов, используемых при создании проекта. Щелчок
указателем мыши на названии вкладыша открывает перед вами
содержимое соответствующей страницы. Каждая страница со
держит характерные для нее компоненты. Если вы на некоторое
время задержите указатель мыши на пиктограмме компонента,
то увидите всплывающую подсказку с названием этого компо
нента. Нужный вам компонент появится в середине активной
формы, если вы произведете двойной щелчок указателем мыши
по его пиктограмме. Если вы щелкнете по пиктограмме компонента один раз, то он появится в том месте формы, в котором вы
щелкнете после этого. Не каждый компонент виден на форме во
время запуска программы. Например, размещение на форме
компонента TMainMenu (главное меню) приводит к появлению в
разрабатываемом приложении меню, но соответствующая
пиктограмма во время запуска программы не отображается.
Компоненты, представляющие диалоговые окна общего назначения, вообще никак не визуализируются во время работы программы. Размеры невидимого компонента в процессе разработки не изменяются — он всегда отображается в виде пиктограммы.
Описание некоторых страниц Палитры компонентов
содержится в разд. 2.2.2 «Палитра компонентов».
2.2.1 Разделы меню
Если название пункта меню заканчивается многоточием, то
при выборе этого пункта меню открывается диалоговое окно.
Если название пункта меню содержит стрелку, то при выделении этого пункта меню открывается его подменю. Некоторые
команды меню выполняются нажатием сочетания клавиш, которое указывается в названии этих команд. Неактивная команда меню отображается серым шрифтом. Например, команда
Paste (вставить) раздела меню Edit (правка) неактивна до тех пор,
пока в Буфер обмена не скопирован какой-либо объект.
2.2.1.1. Раздел меню File (Файл)
Раздел меню File (рис. 2) содержит следующие команды:
• New... — Создать.... Открывается диалоговое окно New
Items (новые элементы), используемое для создания но
вого объекта. Окно содержит несколько страниц: New,
ActiveX, Projects, Data Modules, Multitier, Projectl,
Forms, Business, Dialogs. Каждая страница содержит
шаблоны объектов (формы, модули, проекты и др.)
• New Application — Новое приложение. Создание нового
проекта. Эта команда подразумевает создание нового мо
дуля с заново созданным файлом Unitl.pas, новой формы
Forml и нового окна Инспектора объектов.
• New Form — Новая форма. Создание новой пустой формы.
• New Frame — Новый фрейм. Создание нового фрейма. Фрейм
представляет собой нечто среднее
между панелью и формой. С формой его роднит то, что он:
• проектируется отдельно как са
мостоятельное окно;
• имеет свой модуль — файл с
расширением .pas;
• имеет возможности наследова
ния, причем даже более широ
кие, чем у формы, так как
может наследоваться даже вну
три одного приложения;
• может включаться в депозита
рий (хранилище) и использо
ваться так же, как и форма,
включая наследование.
С панелью фрейм роднит то, что он:
• не является самостоятельным
окном Windows и может отобра
жаться только на форме или
другом контейнере;
• имеет свойства, методы, события, подобные панели,
а не форме.
Таким образом, фрейм — это панель, т. е. некий фрагмент окна приложения, но способный переноситься на
разные формы, в разные приложения и допускающий использование преимуществ наследования.
• Open... — Открыть.... Отображается диалоговое окно
Open, используемое для открытия объекта (например про
екта или модуля).
• Open Project... — Открыть проект.... Отображается диа
логовое окно Open Project, используемое для открытия
проекта.
• Reopen — Переоткрыть. Открывается список последних
файлов, с которыми работал пользователь.
• Save — Сохранить. Сохранение текущего модуля или со
хранение изменений в модуле.
• Save As... — Сохранить как.... Сохранение текущего мо- •
дуля с другим именем.
• Save Project As... — Сохранить проект как.... Сохранение
текущего проекта с другим именем.
• Save All — Сохранить все. Сохранение проекта и модуля
с возможностью дать им новое имя. По умолчанию проек
ту дается имя Projectl и модулю дается имя Unitl. Если
модуль и проект уже были сохранены, то при выборе этой
команды сохраняются произведенные в них изменения.
• Close — Закрыть. Закрытие текущего модуля.
• Close All — Закрыть все. Закрытие всех открытых объек
тов.
• Use Unit... — Сформировать оператор uses.... Выбор этого
пункта меню вставляет в код текущего модуля оператор
uses (использует) для того модуля (Unit), который вы хо
тите использовать. Это простой способ включения модуля
в код программы, не требующий вставлять вручную имя
этого модуля.
• Print... — Печать.... Производится печать модуля или
формы.
• Exit — Выход. Закрытие программы с одновременным за
крытием всех открытых объектов (например, формы, мо
дуля, проекта).
2.2.1.2. Раздел меню Edit (Правка)
Раздел меню Edit (рис. 3) содержит следующие команды:
• Undelete — Отменить. Отмена последнего изменения.
Эту команду удобно использовать, если случайно удален
нужный объект.
• Redo — Повторить. Повторение последнего действия или
изменения.
• Cut — Вырезать. Удаление в Буфер обмена выделенного
фрагмента текста или выделенного объекта на форме или
группы выделенных объектов. Для того чтобы выделить
несколько объектов на форме, необходимо щелкать на них
указателем мыши при нажатой клавише Shift. Для того
чтобы снять выделение с нескольких объектов, необходимо
щелкнуть указателем мыши на свободной от объектов об
ласти формы.
• Сору — Копировать. Копирование в
Буфер обмена выделенного фрагмен
та текста или выделенного объекта
на форме или группы выделенных
объектов.
• Paste — Вставить. Вставка фраг
мента текста из Буфера обмена в ме
сто, указанное курсором. Вставка на
форму объекта или группы объектов
из Буфера обмена.
• Delete — Удалить. Удаление выде
ленного фрагмента текста. Удаление
выделенного объекта или группы
объектов.
• Select Аll — Выделить все. Выделя
ются все объекты на форме, если
окно фор мы явл яетс я акти вн ы м.
Выделяется весь текст модуля, если
окно модуля является активным.
• Align to Grid — Выровнять по сет
ке. Команда выравнивает разме
щенные на форме объекты по узлам
сетки. Если установлена опция Snap
to Grid на странице Preference с помощью команды Options | Environment, то пункт меню Align
to Grid не нужен. Все компоненты будут автоматически
размещаться на форме в узлах сетки.
• Bring to Front — Переместить наверх. Выделенный объ
ект или группа объектов на форме занимают положение
«сверху» по отношению к другим объектам, находящим
ся на форме (на передний план).
• Send to Back — Переместить вниз. Выделенный объект
или группа объектов на форме занимают положение «сни
зу» по отношению к другим объектам, находящимся на
форме (на задний план).
• Align.... — Выровнять.... Производится выравнивание вы
деленного объекта или группы объектов на форме относи
тельно окна формы (по левой границе окна формы, по
верхней границе окна формы, по центру формы и т.д.)
• Translation Repository™ — Хранилище перевода.... Позво
ляет подключать к Delphi XML-файлы.
• Configure Tools... — Настроить утилиты.... Настройка
раздела меню Tools (сервис), добавление в него новых
разделов по желанию пользователя.
• Database Desktop — Вызов окна Database Desktop для
создания и редактирования таблиц баз данных.
• Package Collection Editor... — Редактор сборника па
кета.... Содержит набор пакетов, состоящих из несколь
ких модулей.
• Image Editor — Графический редактор.... Вызов окна
Image Editor для создания и редактирования рисунков.
Графический редактор можно применять для создания
рисунков, иконок, курсоров.
2.2.1.10. Раздел меню Help (Помощь)
Пункты меню раздела Help позволяют работать со справочной
системой интегрированной среды программирования Delphi.
Раздел меню Help (рис. 11) содержит следующие команды:
• Delphi Help — Справка Delphi.
Вызов окна справочной системы
Delphi. Окно имеет три вложен
ные страницы: Содержание, Ука
затель, Поиск.
• Delphi Tools — Утилиты Delphi.
Вызов окна справки о до
полнительных программах, по
ставляемых с пакетом Delphi.
• Windows SDK (Software Develop
ment Kit) — Средства Windows
для разработки программ.
• Borland Home Page — Домашняя
страница Борланд. Запуск Internet Explorer для соединения с сервером фирмы Борланд по адресу:
http://www.borland.com/.
• Delphi Home Page — Домашняя страница Delphi. Запуск
Internet Explorer для соединения с сервером по адресу:
http://www.borland.com/delphi/index.html.
• Delphi Developer Support — Поддержка разработчиков
Delphi. Запуск Internet Explorer для соединения с сервером
по адресу: http://www.borland.com/devsupport/delphi/.
• Delphi Direct... — Запуск Internet Explorer для получения
новостей и обновлений Delphi.
• Customize... — Настроить.... Вызов программы Borland
OpenHelp, предоставляющей пользователю простой путь
конфигурирования файлов справки с расширением .Ыр.
• About... — Справка о Delphi.... Нажатие клавиши Alt и на
бор слова DEVELOPERS показывает список разработчи
ков версии.
2.2.2. Страницы Палитры компонентов
Standard. Большинство компонентов на этой странице являются аналогами экранных элементов самой операционной системы Windows. Страница Standard (стандартные) содержит
меню, кнопки, полосы прокрутки и другие компоненты. Но
компоненты Delphi обладают также некоторыми удобными дополнительными встроенными возможностями.
Additional. Эта страница содержит более развитые компоненты, которые дополняют стандартные компоненты, расположенные на предыдущей странице, главное назначение которых —
отображение графической информации. Например, компонент
TImage (изображение) загружает и отображает растровые изображения, а компонент TShape (фигура), предназначен для отображения на форме окружностей, квадратов и т. д.
Win32. Эта страница содержит компоненты, позволяющие
созданным с помощью Delphi программам использовать просмотр древовидных структур, просмотр списков, панель состояния, присутствующую в интерфейсе программы Explorer
(Проводник), расширенный текстовый редактор и др.
System. Страница System (системные) предоставляет возможность комбинировать отдельные элементы, такие как списки дисков, каталогов и файлов. Страница System также содержит
компоненты, обрабатывающие обмен высокого уровня между
программами посредством OLE (Object Linking and Embedding
(см. Приложение 2)). А компонент TTimer (таймер) может генерировать события через определенные, заранее установленные
промежутки времени.
Data Access (доступ к данным) и Data Controls (управление
данными). Интегрированная среда программирования Delphi
использует механизм баз данных компании Borland (Borland
Database Engine, BDE) для организации доступа к файлам баз
данных различных форматов. Компоненты этих двух страниц
облегчают программам Delphi использование сервиса баз данных,
предоставляемого BDE (см. Приложение 2), например
многопользовательского считывания, записи, индексации и выдачи запросов для таблиц dBASE и Paradox.
ADO. Связь с базами данных через Active Data Objects (ADO,
см. Приложение 2) — множество компонентов ActiveX, использующихся для доступа к информации баз данных Microsoft
OLEDB.
InterBase. Прямая связь с Interbase, минуя Borland Database
Engine (BDE) и Active Data Objects (ADO).
Midas и Decision Cube. Здесь собраны компоненты для доступа
к удаленным серверам и осуществления SQL-запросов.
InternetExpress. Построение приложений InternetExpress —
одновременно приложений сервера Web и клиента баз данных с
параллельными потоками.
Internet. Эта страница предоставляет компоненты для разработки приложений, позволяющих создавать HTML-файлы непосредственно из файлов баз данных и других типов,
взаимодействующих с другими приложениями для Internet. Delphi
5 дает вам возможность создавать приложения для Web-сервера
(см. Приложение 2) в виде DLL-файлов: (Dynamic Link Library —
Динамически компонуемая библиотека), способных содержать
невизуальные компоненты. С помощью компонентов страницы
Internet довольно просто создавать обработчики событий для
обращения к определенному URL (Uniform Resource Locator —
Унифицированный локатор ресурса), представлению документов
в HTML-формате и пересылки их клиент-программе.
FastNet. Различные протоколы доступа к Internet.
QReport. Эта страница предоставляет компоненты баз данных.
Здесь содержатся особые версии надписей, полей, примечаний
и других элементов управления. С помощью компонентов этой
страницы создаются отчеты по данным таблиц баз данных.
Dialogs. Программная оболочка Windows 3.1 ввела в употребление стандартные диалоговые окна для операций над файлами, выбора шрифтов, цветов и т.д. Однако для использования
их в обычной программе Windows может потребоваться написать
немало вспомогательного кода. Страница Dialogs (диалоги)
предоставляет программам Delphi простой доступ к этим
стандартным диалоговым окнам.
Win 3.1. На этой странице, как в сибирской ссылке, находятся
компоненты Delphi 1.0, возможности которых перекрываются
аналогичными компонентами Windows 95.
Samples. Эта отличающаяся полнотой страница содержит
компоненты, которые не встроены в Delphi, но демонстрируют
мощь системы компонентов. Для этих компонентов нет встроенной интерактивной справки. Все же они не менее полезны, чем
компоненты с других страниц.
ActiveX. Эта страница содержит компоненты ActiveX, разработанные независимыми производителями программного обеспечения: сетка, диаграмма, средство проверки правописания.
Servers. Оболочки VCL для распространенных серверов СОМ
(см. Приложение 2).
Далее приведены примеры содержания некоторых страниц:
2.2.2.1. Страница Standard
Фрейм (кадр). Компонент визуальный. Панель с
возможностями наследования. Проектируется
как отдельное окно. Фрейм представляет собой
нечто среднее между панелью и формой. Главное
меню. Компонент невизуальный. Он позволяет
вам поместить главное меню в программу.
Всплывающее меню. Компонент невизуальный.
Этот компонент позволяет создавать всплывающее контекстное меню. Этот тип меню появляется
по щелчку правой кнопки мыши на объекте, к
которому привязано данное меню. У всех видимых объектов имеется свойство PopupMenu, где и
указывается нужное меню. Создается Popup-Menu
аналогично главному меню. Метка. Компонент
визуальный. Этот компонент служит для
отображения текста на экране. Вы можете
изменить шрифт и цвет метки, если дважды
щелкнете на свойстве Font (шрифт) в Инспекторе
объектов. Вы увидите, что это легко еде-
лать и во время выполнения программы, написав
всего одну строчку кода.
Окно редактирования. Компонент визуальный.
Это стандартный управляющий элемент Windows
для ввода. Он может быть использован для
отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.
Многострочное окно редактирования. Компо-
нент визуальный. Это иная форма TEdit. Подразумевает работу с большими текстами. ТМето
может переносить слова, сохранять в Clipboard
(Буфер обмена) фрагменты текста и восстанавливать их. ТМето имеет ограничения на объем текста в 32 Кб, это составляет 10-20 страниц.
Командная кнопка. Компонент визуальный. Он
позволяет выполнить какие-либо действия при
нажатии кнопки во время выполнения программы. Поместив компонент TButton на форму, вы по
двойному щелчку можете создать заготовку
обработчика события нажатия кнопки. Далее
нужно
заполнить
заготовку
кодом.
Контрольный индикатор с флажком. Компонент визуальный. Он отображает строку текста с
маленьким окошком рядом. В окошке можно поставить отметку, которая означает, что что-то выбрано. Например, если посмотреть окно диалога
настроек компилятора (пункт меню Options | Project, страница Compiler), то можно увидеть, что оно
состоит
преимущественно
из
Checkbox'ов.
Радиокнопка. Компонент визуальный. Он позволяет выбрать только одну опцию из нескольких.
Радиокнопки часто применяются в диалоговых
окнах настройки какого-либо элемента операционной среды Windows. Посмотрите программы
папки Панель управления.
Окно списка. Компонент визуальный. Он нужен
для показа прокручиваемого списка. Классический пример ListBox'a в среде Windows — выбор
файла из списка в пункте меню File | Open (Файл |
Открыть) многих приложений. Названия файлов
или директорий и находятся в ListBox'e. Полоса
прокрутки.
Компонент
визуальный.
Она
появляется автоматически в объектах редактирования, ListBox'ax, при необходимости прокрутки
текста для просмотра.
Групповое окно. Компонент визуальный. Он используется для визуальных целей и для указания
Windows, каков порядок перемещения по компонентам на форме (при нажатии клавиши TAB).
Группа радиокнопок. Компонент визуальный.
Является комбинацией группового окна TGroupВох с набором радиокнопок TRadioButton; служит
специально для создания групп радиокнопок, но
никакие другие органы управления не
разрешены.
Панель. Компонент визуальный. Управляющий
элемент, похожий на TGroupBox, используется в
декоративных целях. Чтобы использовать TPanel,
просто поместите его на форму и затем положите
другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания
линейки инструментов и окна статуса. Список
событий.
Компонент
невизуальный.
Обеспечивает диспетчеризацию событий компонентов.
2.2.2.2. Страница Additional
Кнопка с графикой. Компонент визуальный. Эта
кнопка похожа на кнопку TButton, однако на ней
можно разместить картинку (glyph). Компонент
TBitBtn имеет несколько предопределенных типов
(bkClose, bkOK и др), при выборе которых кнопка
принимает соответствующий вид. Кнопка с
фиксацией. Компонент визуальный. Это кнопка
для создания панели быстрого доступа к
командам (SpeedBar). Пример — SpeedBar слева от
Палитры компонентов в среде Delphi.
Обычно на данную кнопку помещается только
картинка (glyph).
Маскированный ввод. Компонент визуальный.
Это аналог компонента TEdit, но с возможностью
форматированного ввода. Формат определяется в
свойстве EditMask. В редакторе свойств для EditMask есть заготовки некоторых форматов: даты,
валюты и т.п. Специальные символы для маски
можно посмотреть в справочнике. Таблица
строк. Компонент визуальный. Он служит для
представления текстовых данных в виде
таблицы. Доступ к каждому элементу таблицы
происходит через свойство Cell (ячейка). Таблица
рисунков. Компонент визуальный. Он служит
для представления данных любого типа в виде
таблицы. Доступ к каждому элементу таблицы
происходит через свойство CellRect (ячейка и
столбец).
Изображение. Компонент визуальный. Он отображает графическое изображение на форме.
Воспринимает форматы BMP, ICO, WMF. Если
картинку подключить во время дизайна программы, то она прикомпилируется к ехе-файлу.
Фигуры. Компонент визуальный. Он служит для
отображения простейших графических объектов
на форме: окружность, квадрат и т.п. Рамка.
Компонент
визуальный.
Этот
компонент
используется для рельефного оформления интерфейса приложения.
Окно с прокруткой. Компонент визуальный. Он
позволяет создать на форме прокручиваемую область с размерами большими, нежели экран. На
этой области можно разместить свои объекты. :
Список с флажками. Компонент визуальный.
Компонент является комбинацией свойств списка
TListBox и индикаторов TCheckBox в одном
компоненте.
Разделитель панелей. Компонент визуальный.
Используется для создания в приложении панелей с изменяемыми пользователем размерами.
Метка с бордюром. Компонент визуальный.
Компонент подобен компоненту TLabel, но
обеспечивает дополнительные возможности
по созданию стиля бордюра.
Инструментальная панель. Компонент
визуальный. Используется для размещения
компонентов инструментальной панели.
События приложения. Компонент невизуальный. Перехватывает события на уровне
приложения.
Диаграммы и графики. Компонент визуальный. Компонент принадлежит к семейству компонентов TChat, которые используются для создания диаграмм и графиков.
2.3. Инспектор объектов (Object Inspector)
Инспектор объектов имеет два вложенных листа: лист Properties (свойства)
и лист Events (события). Каждый лист
состоит из двух колонок На листе
Properties (свойства) Инспектора объектов (Object Inspector) отображаются
свойства выделенного объекта, которые при необходимости можно легко
изменить. В левой колонке отображаются названия свойств, а в правой колонке отображаются значения этих
свойств. Свойства имеют различные
типы значений: символьное, численное
или логическое. На рис. 12 показаны
свойства активной формы в Инспекторе объектов. Для изменения названия
формы, отображаемого в строке заголовка формы, следует в свойстве Caption (заголовок) для формы записать ее
название, например: «Мой проект». В
свойстве Name (имя) указывается (набирается с клавиатуры) имя формы,
например: FormMyProject. В свойстве
Name указываются также и имена объектов, расположенных на форме. Например, если на форме есть кнопки
«Открыть» и «Закрыть», то по умолчанию они имеют имена Buttonl и
Button2, и им было бы разумно дать
имена: bt_Open и bt_Close. Прежде чем изменять свойства объекта, его необходимо выделить, щелкнув на нем указателем
мыши. Размеры формы (или какого-либо объекта на форме)
можно изменить с помощью мыши, а можно задать с помощью
соответствующих свойств, содержащихся в Инспекторе объектов. Для формы и для объектов, расположенных на ней, размеры определяются следующими свойствами: Width — ширина
объекта, Height — высота объекта. Положение объекта на форме
определяется свойствами: Тор — расстояние от верхней границы
объекта до верхней границы окна формы, Left — рас-
стояние от левой границы объекта до левой границы окна формы. С помощью свойства Color (цвет) устанавливается цвет
выделенного объекта. В этом свойстве открывается список, из
которого щелчком мыши выбирается нужный цвет. Такие свойства, как Font (шрифт) содержат в свою очередь еще несколько
свойств, доступ к которым осуществляется щелчком на «плюсике» рядом с названием свойства. Для включения и вы ключения объекта используется свойство Enabled (включение),
которое определяет реакцию объекта на какое-либо событие
(щелчок указателем мыши, нажатие клавиши на клавиатуре и
т. д.). Оно имеет два значения: False (ложь) и True (истина). Видимость объекта на форме определяется свойством Visible (видимый). Способы использования этих и других свойств объектов содержатся в упражнениях, в описании создания проектов
приложений.
На листе Events (события) Инспектора объектов отображаются
события, которые могут происходить с формой или с объектом,
помещенным на нее (щелчок указателем мыши на объекте,
двойной щелчок и др.). Если вы выберете событие для объекта
из имеющегося списка событий в левой колонке листа и
произведете двойной щелчок на пустом окошке напротив названия этого события (в правой колонке листа), то в программной части проекта (модуле) автоматически создается
заготовка процедуры для этого события. Вы с помощью операторов описываете, что должно происходить при этом событии.
Операторы записываются между словами begin (начало) и end
(конец) и разделяются «точкой с запятой».
2.4. Дизайнер форм (Form Designer)
При запуске Delphi открывается заготовка окна будущей
программы. Это Дизайнер форм (рис. 13), который для простоты
будем называть формой. Форма — важнейший компонент, на
котором основана вся работа по проектированию и разработке
приложения. Форма является компонентом Delphi класса TForm.
Интерфейс создаваемого приложения Windows определяется
свойствами формы и расположенными на ней визуальными
компонентами. Форма имеет вид стандартного окна операционной системы Windows. В верхней части формы расположена Строка заголовка, отображающая иконку окна, название
окна, кнопки управления окном («Свернуть», «Развернуть»,
«Закрыть»). Форме автоматически присваивается имя Form1.
Форме желательно сразу дать новое имя, соответствующее ее
содержанию. Для этого надо в свойстве Name (имя) для формы
записать, например: FormFirst (Первая форма).
Форма имеет богатый набор свойств, методов и событий. Рассмотрим некоторые из свойств формы:
Свойство BorderS tyle (Стиль границы) имеет следующие значения:
bsDialog
В Строке заголовка окна отображается только
кнопка «Закрыть» для закрытия окна. В Строке заголовка отсутствует иконка. Размер окна
не изменяется. Такое окно удобно применять в
качестве диалогового окна, например окна запроса на сохранение изменений в документе.
bsNone
Окно не имеет Строки заголовка, следовательно, оно не имеет ни иконки, ни названия, ни
кнопок управления. Для закрытия такого окна
необходимо использовать оператор. Такое окно
удобно применять в качестве заставки, которая
отображается на экране монитора, пока загружается окно основной программы.
bsS ingle
Окно имеет Строку заголовка, в которой отображаются иконка, название окна и все кнопки
управления окном. Окно имеет постоянный
размер.
bsSizeable Окно имеет Строку заголовка, в которой отображаются
иконка, название окна и все кнопки
управления окном. Размеры окна можно изменять с помощью мыши. Такое окно создается в
среде Delphi по умолчанию при создании проекта приложения.
bsSizeToolWin Окно имеет Строку заголовка и кнопку «Закрыть».
Отсутствует иконка окна. Размер окна можно
изменять.
bsTiilWindow Окно имеет Строку заголовка и кнопку «Закрыть».
Отсутствует иконка окна. Размер окна нельзя изменять.
Свойство Borderlcons (иконки границы) является составным
и состоит из следующих свойств:
biSystemMenu Определяет, отображаются или нет иконка и
кнопки управления окном в Строке заголовка
окна приложения. При выборе значения True
(истина) они отображаются, а при выборе значения False (ложь) — отсутствуют.
biMinimize Определяет, отображается или нет кнопка «Свернуть»
в Строке заголовка окна приложения.
biMaximize Определяет, отображается или нет кнопка
♦Развернуть» («Восстановить») в Строке заголовка окна приложения.
biHelp
Определяет, отображается или нет кнопка «Помощь» (значок «?» рядом с кнопками управления окном).
Каждое из свойств имеет значение True или False. Свойство
Position (положение) имеет следующие значения:
poDefault
Операционная система Windows сама определяет положение окна приложения на экране
монитора.
poDefaultPosOnly Произвольное положение окна приложения на
экране монитора.
poDefaultSizeOnly Только произвольный размер окна.
poDesigned Окно приложения принимает такие же размер и
положение, какие были у формы в процессе
конструирования проекта приложения.
poDesktopCenter Окно приложения расположено в центре экрана
монитора.
poScreenCenter Окно приложения расположено в центре экрана
монитора. Работает с многодисплейным режимом
отображения. Свойство WindowState (состояние окна) имеет
следующие
значения:
wsMaximized При запуске приложения окно развернуто на
весь экран монитора.
wsMinimized При запуске приложения окно свернуто в значок.
wsNormal
Окно приложения принимает такой же размер,
какой был у формы в процессе конструирования проекта
приложения.
В Строке заголовка отображается название окна программы,
которое вносится туда с клавиатуры с помощью свойства Caption
(заголовок) для формы. Пиктограмму формы, которая
отображается в левой части Строки заголовка, задает свойство
Icon (иконка). Для выбора пиктограммы надо в свойстве Icon
щелкнуть на трех точках, в открывшемся окне щелкнуть на
кнопке Load (загрузить) и отыскать на жестком диске файл с
расширением .iсо.
С помощью свойства Color (цвет) задается цвет формы. При
выборе цвета формы надо избегать ярких, утомляющих глаз,
цветов.
На форму помещаются компоненты из Палитры компонентов. Это различные кнопки, надписи, таблицы и т. д. Будем
называть компоненты, помещенные на форму, объектами.
Объект становится активным при щелчке на нем указателем
мыши. При этом он выделяется маркерами, с помощью которых можно изменять размеры объекта. Выделенный объект
можно переместить в любое место формы. Свойства выделенного объекта отображаются в Инспекторе объектов. Объекты на
форме надо располагать так, чтобы программа была удобочитаемой, чтобы все пространство окна работало, чтобы программа
красиво смотрелась.
В режиме работы с формой по умолчанию на Рабочем столе
отображается сама форма и расположенные на ней объекты.
При этом в Инспекторе объектов отображаются события и свойства формы и объектов. Такой режим называется View as Form
(просмотр в виде формы). Для того чтобы просмотреть форму и
объекты в текстовом режиме, надо щелчком правой кнопкой
мыши по полю формы открыть контекстное меню и выбрать ре-
жим View as Text (просмотр в виде текста). При этом в Окне
редактора исходного текста отобразится информация текстового файла Unitl.dfm. Например, если имеется форма с единственным объектом на ней, кнопкой, то текст файла имеет следующий вид:
object Forml: TForml Left = 340 Top =
111 Width = 1088 Height = 750 Caption
= 'Forml1 Color = clBtnFace Font.Charset
= DEFAULT_CHARSET Font.Color =
clWindowText Font.Height = -11
Font.Name = 'MS Sans Serif ' Font.Style
= [] OldCreateOrder = False
PixelsPerlnch = 96 TextHeight = 13
object Buttonl: TButton Left = 216 Top =
200 Width =75 Height = 25 Caption =
'Buttonl' TabOrder = 0 end end
Для перехода в прежний режим надо вызвать контекстное
меню щелчком правой кнопки мыши на поле окна и выбрать режим View as Form.
2.5. Окно редактора исходного текста
(Editor Window)
Все объекты, помещенные на форму, являются лишь красивым рисунком и никак не работают, пока в программной части
проекта не будут описаны события для них. Программной частью проекта является его Окно редактора исходного текста
(для простоты будем называть его модуль). Оно создается одновременно с созданием окна формы. На рис. 14 видно, что даже
для пустой формы в модуле уже написана программа.
TForml, являющийся классом, потомком класса TForm, содержащий описание формы:
TForml= class(TForm)
В класс включаются все объекты, размещенные на форме.
Здесь же объявляются методы класса (процедуры и функции).
В разделе описания типов есть еще два раздела. В разделе public
(доступные) объявляется то, что будет доступно для других
классов и модулей. В разделе private (личные) объявляется то,
что будет доступно только в данном модуле.
В разделе объявления переменных, после зарезервированного слова var (переменные), декларируется одна переменная этого
типа:
var
Forml: TForml
Модуль начинается с ключевого (или служебного) слова unit
(модуль). После служебного слова unit написано имя модуля. По
умолчанию Delphi присваивает модулю имя Unitl. После имени
модуля ставится знак «точка с запятой».
Интерфейсная часть модуля начинается с ключевого слова
interface (интерфейс). После заголовка интерфейсной части
указаны стандартные модули, подключаемые к данному модулю. Они пишутся после ключевого слова uses (использует) через
запятую. В конце списка подключаемых модулей ставится знак
«точка с запятой». В этот список можно добавить какой-либо
модуль, необходимый для работы приложения, но не указанный в списке, например модуль математических функций
Math. Модули, подключаемые в интерфейсной части, доступны
из любого места данного модуля.
В разделе interface (интерфейс) размещаются переменные,
функции и т. д., которые могут использоваться и другими модулями программы.
Раздел объявления типов начинается со служебного слова
type. После служебного слова type (тип) объявляется тип
Объявленный объект Forml (форма) является экземпляром
класса TForm.
Раздел реализации начинается с ключевого слова implementation (реализация). После ключевого слова implementation к
данному модулю можно подключать другие модули с помощью
служебного слова uses (использует). Подключаемые модули
перечисляются через запятую. Запись подключаемых модулей
заканчивается знаком «точка с запятой». В разделе implementation размещается все то, что имеет отношение только к
данному модулю.
Директива {$R*.DFM} предназначена для связывания модуля с
описанием соответствующей формы. Описание формы и всех
размещенных на ней компонентов хранится в файлах с
расширением .DFM (DelphiForM). Эти файлы имеют текстовый
формат.
В модуле могут быть необязательные разделы. Такими разделами являются раздел инициализации и раздел завершения.
Раздел инициализации начинается с ключевого слова initialization (инициализация). В нем пишутся операторы, выполняемые один раз при запуске приложения.
Раздел завершения начинается с ключевого слова finalizati-оп
(завершение). В этом разделе пишутся операторы, выполняемые
один раз при завершении работы приложения.
В конце модуля всегда ставятся ключевое слово end (конец) и
точка.
3. Полезные советы
Перед тем как начать выполнение упражнений, прочитайте полезные советы, которые пригодятся вам в работе с программами:
• Создайте на жестком диске папку, в которой создайте с
десяток пронумерованных папок. В каждой из этих па
пок будут храниться файлы ваших программ — в одной
папке должна быть одна программа. Все дополнительные
файлы, используемые в какой-либо вашей программе (ри
сунки, фотографии, тексты, таблицы и др.) должны на
ходиться в той же папке, где находится сама программа.
Переименовывайте папки с программами в соответствии с
содержащимися в них программами.
• Для повышения эффективности работы используйте сле
дующие сочетания клавиш:
Ctrl+A — выделить все;
Ctrl+X — вырезать выделенный фрагмент текста или выделенный объект в Буфер обмена;
Ctrl+C — скопировать выделенный фрагмент текста или
выделенный объект в Буфер обмена;
Ctrl+V — вставить выделенный фрагмент текста или выделенный объект из Буфера обмена в место, указанное
курсором;
Ctrl+Z — отменить последнее действие. Ctrl+ клавиши
управления курсором — перемещать выделенный объект
на форме.
Shift+ клавиши управления курсором — изменять размер
выделенного объекта на форме.
* Одновременное выделение нескольких объектов на форме
осуществляется щелчком на них указателем мыши при
нажатой клавише Shift.
• В процессе создания программы время от времени запус
кайте ее в действие (клавиша F9) и проверяйте ее работу.
* Помните, что сохранение изменений в программе в про
цессе ее создания будет происходить только в том случае,
если запущенная на выполнение программа закрыта (на
жата кнопка управления окном X).
* Старайтесь всем элементам вашей программы давать осмыс
ленные имена, легко распознаваемые и запоминающиеся.
4. Знакомство с Палитрой
компонентов
В этом разделе вам нужно будет следовать указаниям текста
при создании вашей первой программы и внимательно читать
комментарии к выполняемым вами действиям.
Запустите интегрированную среду программирования
Delphi. На вашем Рабочем столе появятся панели, про которые вы
уже прочитали выше. Если на вашем Рабочем столе открыты
какие-то папки и программы, то их лучше свернуть или закрыть, чтобы они не мешали вашей работе. Помимо панелей на
Рабочем столе появились еще два окна: окно формы с именем
Forml и окно модуля с именем Unitl.
При запуске программы форма и модуль создаются автоматически. Для создания нового проекта надо выбрать команду
New (создать), в открывшемся окне выбрать: Application (приложение) и щелкнуть на кнопке ОК.
В Инспекторе объектов на листе Properties (свойства) отображены свойства формы. Некоторые из них вы сейчас измените.
В свойстве Caption (заголовок) запишите: «Первый проект».
Вы видите, что название окна вашей программы отобразилось
в Строке заголовка формы. В свойстве Name (имя) запишите:
FormFirst. Выделите мышкой слово First (первый) и нажмите
сочетание клавиш Ctrl+C (вы скопировали это слово в Буфер
обмена).
Сохраните программу в папке под именем «О» (это одна из
тех папок, которые вы создали для хранения ваших программ).
Теперь папку «О» можно будет переименовать, дав ей имя «Первый проект». Сделать это можно в любое удобное для вас время.
Для сохранения программы надо найти среди кнопок быстрого
доступа команду Save All (сохранить все) и щелкнуть на ней. В
открывшемся диалоговом окне запишите имя сохраняемого
файла: UnitFirst (здесь вам пригодится сочетание клавиш Ctrl+V),
выберите для сохранения файла папку «О» и нажмите кнопку
«Сохранить». Файл модуля сохранен. Сразу вслед за первым
появляется второе диалоговое окно. Сохраните файл Проекта с
именем ProjectFirst (опять помогли клавиши Ctrl+V) в той же
папке.
Теперь можно в первый раз запустить программу. Для этого
можно воспользоваться клавишей F9 на клавиатуре или кнопкой
Run (выполнить), которую вы найдете среди кнопок быстрого
доступа, или воспользоваться разделом меню Run. Вы видите, что
ваша программа запустилась без проблем и работает исправно.
Окно программы имеет те размеры, которые придали ему вы, то
название, которое дали ему вы, и находится в том месте
Рабочего стола, куда установили его опять-таки вы. Если вы
еще не попробовали изменять размеры и местоположение окна
программы, то попробуйте сделать это сейчас. Но помните, что
изменения сохранятся только тогда, когда вы закроете окно
программы и вернетесь к ее конструированию. Для сохранения
изменений используйте ту же кнопку, с помощью которой сохраняли ваши модуль и проект. Теперь все изменения будут
автоматически сохраняться в файлах, находящихся в папке
«О». Почаще щелкайте на кнопке Save All (сохранить все) в
процессе создания программы.
Начнем знакомство с объектами, которые добавляются на
форму из Палитры компонентов. Вы будете выбирать в Палитре
компонентов указанные компоненты и располагать их на форме
примерно так, как показано на рис. 15.
Откройте страницу Standard (стандартные) Палитры компонентов, найдите на ней пиктограмму TLabel (всплывающая подсказка отобразит слово Label, метка) и щелкните на ней. Затем
щелкните в любом месте формы и вы увидите, что в этом месте
формы появился объект Label 1. Этот объект выделен маркерами,
является активным и в Инспекторе объектов отображены его
свойства. Вы можете легко изменять размеры и положение
объекта на форме. Попробуйте это сделать. В свойстве Caption
(заголовок) для объекта Label 1 запишите: «Здесь вводится текст,
который будет находиться на форме всегда». Сохраните
изменения и запустите программу. Этим объектом вы будете
пользоваться для пояснений и комментариев к другим объектам на форме. Закройте программу. Попробуйте изменить параметры надписи. Для этого используйте его свойство Font
(шрифт).
Возьмите со страницы Standard (стандартные) следующий
компонент — TEdit (редактируемое окно). В свойстве Text (текст)
для него запишите: «Это начальный текст. Но сюда можно
ввести любой текст в процессе выполнения программы».
Подберите размеры окна так, чтобы в нем отображался весь
текст. Сохраните изменения и запустите программу. Попробуйте использовать окно Edit (редактор), введя в него текст с
клавиатуры). Итак, это редактируемое окно, текст в котором
располагается в одной строке.
А что в это время делается в вашем модуле? Нажмите на клавиатуре клавишу F12. Вы видите программную часть вашего
проекта. Здесь модуль уже носит данное ему вами имя Unit-First.
Здесь уже определены типы объектов, расположенных на вашей
форме. Нажмите еще раз клавишу F12, чтобы возвратиться к
форме.
Добавьте на форму компонент ТМето (многострочное окно
редактирования) со страницы Standard (стандартные). В свойстве
Lines (строки) для него найдите три точки (...) и щелкните на них.
В открывшемся окне запишите: «В это окно можно вводить
большой текст или вставлять текст из Буфера обмена. Текст в
многострочном окне редактирования располагается в
нескольких строках».
Сохраните изменения и запустите программу. Поработайте с
окнами (убедитесь, что все работает нормально).
Следующий компонент, который вы поместите на форму —
TComboBox (редактируемый список) со страницы Standard
(стандартные). В свойстве Items (элементы) для него найдите три
точки (...)> щелкните на них и впишите в открывшемся окне:
1
2
3
4
5
В свойстве Text (текст) запишите: «Выбери число». Запустите
программу. Щелкнув на стрелочке в окне редактируемого
списка, вы можете выбрать любое число из предложенного списка. А можно ли из списка выбрать, например, название месяца? Можно, если в свойстве Items (элементы) написать названия
месяцев. Добавьте на форму еще один компонент TCombo-Вох
(редактируемый список) и используйте его в своей
программе для выбора месяца.
А сейчас вы создадите кнопку и укажете ей, что она должна
будет делать, когда вы на ней щелкнете. Найдите на странице
Standard (стандартные) компонент TButton (кнопка) и добавьте
его на форму. В Инспекторе объектов откройте лист Events (события) и найдите событие OnClick (щелчок указателем мыши)
для кнопки. Двойной щелчок на пустом окне рядом с названием
события приведет вас к программной части вашего проекта. Вы
видите, что здесь уже имеется заготовка процедуры, описывающей действия, которые будут происходить при щелчке на кнопке. Зарезервированные слова begin (начало) и end (конец) являются операторными скобками для процедуры. Между ними
надо написать текст оператора и поставить после него точку с
запятой: Close; (закрыть). Этот оператор закроет окно приложения.
Сохраните изменения и запустите программу. Теперь вы можете закрыть программу щелчком на кнопке. В свойстве кнопки Caption (заголовок) запишите: «Конец». Это делается для
того, чтобы пользователь знал о назначении данной кнопки.
Для того чтобы в программной части отличить эту кнопку от
других (а вдруг их будет в программе с десяток?), надо в свойстве Name (имя) дать ей осмысленное имя, например: bt_Close.
Можно еще подстраховаться, а заодно и попрактиковаться в
применении компонента TLabel (метка) для комментария к другому объекту. Добавьте рядом с кнопкой компонент TLabel и в
свойстве Caption (заголовок) для него запишите: «Щелчок на
этой кнопке закроет программу». Теперь, когда в вашей программе есть уже два компонента TLabel: Label 1 и Label2, следует и им дать другие имена. В свойстве Name (имя) для них запишите: lb_Textl и lb_Text2.
Поместите на форму компонент TPanel (панель) со страницы
Standard (стандартные). Для того чтобы вам не мешала надпись
на панели, в свойстве Caption (заголовок) удалите текст. Панель
предназначена для того, чтобы сделать вашу программу более
привлекательной и удобной для работы. Если ваша программа
содержит много объектов, то она смотрится красивее и с ней
удобнее работать, когда объекты разделены по каким-то критериям и расположены на разных панелях. Панель является активной, если вы щелкнули на ней указателем мыши, в этом случае она выделена маркерами. Если вы сейчас выберете какойлибо компонент и щелкните на панели, то этот компонент
будет расположен на панели и будет принадлежать панели.
Найдите компонент TRadioButton (радиокнопка) на странице
Standard (стандартные) и поместите два таких компонента на
панель. Теперь, если вы будете перемещать панель по форме, то
и радиокнопки будут перемещаться вместе с панелью. В свойстве Caption (заголовок) для радиокнопок запишите: «Первое
условие» и «Второе условие». Такие кнопки применяются для
выбора одного из предложенных взаимоисключающих условий.
Запустите проект и пощелкайте на кнопках, убедитесь, что выбирается лишь одно из двух условий.
Для выбора из большего числа условий надо просто добавить
еще радиокнопок. Для выделения группы объектов можно использовать также такой компонент, как TGroupBox (групповое
окно) со страницы Standard (стандартные). Добавьте на форму
этот компонент. В свойстве Caption (заголовок) для него запишите: «Группа кнопок». Поместите на него два компонента
TCheckBox (контрольный индикатор) со страницы Standard
(стандартные). В свойстве Caption (заголовок) для них запишите:
«Первый параметр» и «Второй параметр». Эти объекты
предназначены для выбора нескольких, не исключающих один
другого, параметров. Сохраните изменения, запустите проект и
убедитесь, что вы можете выбрать или любой из этих двух параметров, или оба сразу, или ни одного из них.
Если в вашей программе есть много объектов, которые не
удается разместить в окне программы, то в окно можно вставить вложенные листы. Добавьте на форму компонент TPage-
Control (многостраничное окно) со страницы Win32. Щелкните
на нем правой кнопкой мыши и выберите строку New Page (создать страницу). Создайте, таким образом, еще два листа. Проверьте работу программы.
Дайте имя каждому листу: «Первый», «Второй», «Третий».
Поместите на каждый лист по одному компоненту TShape (фигура) со страницы Additional (дополнительные). Этот компонент
служит для создания на форме простой фигуры. Пусть на
каждом листе будут разные фигуры, закрашенные в разные
цвета. Используйте для этого свойства Shape (фигура) и Brush
(кисть) — Color (цвет). На свойстве Brush (кисть) есть «плюсик»,
на котором надо щелкнуть для раскрытия составляющих этого
свойства.
Теперь вы создадите кнопку, которая будет открывать на
форме желтый круг. Поместите на форму кнопку (TBitBtn со
страницы Addditional) и фигурку (TShape со страницы Additional, фигурку сделайте желтым кругом). Фигурке с помощью
свойства Name (имя) дайте имя: sh_Krug. В свойстве фигурки
Visible (видимый) выберите значение: False (свойству «Видимый» присваивается значение «ложь»). Это значит, что ее не будет видно. Кнопке дайте имя bt_Open. Щелчок на кнопке сделает
фигурку видимой. Для этого выделите кнопку, на листе
Events (события) найдите событие OnClick (щелчок) и произведите двойной щелчок на пустом окошке рядом с названием события. Запишите в заготовке процедуры следующий оператор:
Sh_Krug.Visible:=True;
Это значит, что свойству Visible (видимый) объекта sh_Krug
присваивается значение True (истина).
Сохраните изменения и запустите проект. Проверьте работу
всех объектов.
Следующий компонент — TImage (изображение) со страницы
Additional (дополнительные). С его помощью в окне вашей
программы можно отобразить рисунок или фотографию. Поместите такой компонент на вашу форму.
Сверните на время программу. Переименуйте папку «О» в
папку «Первый проект». Найдите на вашем жестком диске
файл какого-либо рисунка или фотографии и скопируйте этот
файл в папку «Первый проект». Вернитесь к программе. В свойстве Picture (рисунок) для объекта Imagel щелкните на трех
точках (...) и загрузите файл рисунка из вашей папки. Объекту
Imagel дайте имя: Im_Risunok.
В процессе создания проекта приложения среда программирования Delphi сформировала в папке «Первый проект» группу
файлов, из которых и состоит проект приложения.
На рис. 16 показано содержимое папки «Первый проект».
Созданное вами приложение состоит из нескольких файлов:
• ProjectFirst.cfg — файл конфигурации проекта. Тексто
вый файл, в котором производится настройка опций про
екта.
• ProjectFirst.dof — файл установок проекта (параметры
компилятора, компоновщика и т. д.). Этот файл создается
автоматически при создании нового проекта.
• ProjectFirst.dpr — главный файл проекта. Этот файл со
здается автоматически при создании нового проекта, име
ет расширение .dpr — Delphi PRoject, по умолчанию
имеет имя Projectl.dpr. Программист может дать ему
имя, подходящее по смыслу создаваемому проекту.
• UnitFirst.res — файл ресурсов, содержащий иконку окна
приложения. Программист может заменить стандартную
иконку, выбрав необходимую иконку из имеющегося на
бора.
• UnitFirst.dfm — файл главной формы. Он используется
для сохранения информации о внешнем виде формы: со
держит описание всех компонентов и их свойств, а также
описание формы, и ее свойств. Расширение этого файла
.dfm — Delphi ForM, имя по умолчанию — Unitl.dfm. Информация файла хранится в текстовом формате, что очень
удобно при его редактировании.
• UnitFirst.pas — первый модуль программы. Этот файл
имеет расширение .pas — PAScal, это текстовый файл,
написанный на языке Pascal. Файл содержит обработчи
ки событий компонентов, находящихся на форме. Он ав
томатически создается в начале создания проекта
приложения Windows под именем Unitl.pas. Програм
мист может оставить имя тем же или изменить его, как
было сделано в нашем случае.
• UnitFirst.dcu — файл, появляющийся после компиляции
программы. Этот файл содержит скомпилированные мо
дули.
• UnitFirst.-pas — файл резервной копии. Создается при
повторном и всех последующих сохранениях модуля.
Файл резервной копии содержит предыдущую версию со
держимого сохраняемого модуля.
Рассмотрим подробнее файл ProjectFirst.dpr. Он имеет следующий вид:
program ProjectFirst; // заголовок программы
uses
// список подключаемых Модулей
Forms, UnitFirst in 'UnitFirst.pas' {FormFirst};
($R *.RES}
// подключаемые файлы ресурсов
begin
Application.Initialize; // инициализация приложения
Application.CreateForm(TFormFirst, FormFirst);
{создание окна приложения}
Application.Run;
end.
// запуск приложения
Текст после двойного слэша «//» и в скобках *{}* не воспринимается программой и является комментарием. Для отличия
текста комментария от основного текста, программа преобразовывает его в курсив синего цвета. С помощью двойного слэша
или фигурных скобок можно закомментировать оператор в про-
цедуре. Такой оператор не будет выполняться в процессе работы
приложения.
Заголовок программы содержит название проекта приложения, которое записано после зарезервированного слова program
(программа). После служебного слова uses (использует) производится объявление подключаемых модулей (частей программы). После записи {$R *.RES} производится объявление подключаемых ресурсных файлов. Ресурсными файлами мргут
быть рисунки, иконки и др. Между служебными словами begin
(начало) и end (конец) расположен текст программы.
В этом упражнении вы создали свой первый проект, научились сохранять и запускать его. Вы познакомились с множеством полезных компонентов, которые помогают создавать вашу
программу. Но с еще большим числом не менее интересных
компонентов вы познакомитесь, выполняя следующие упражнения. Начинайте с самого первого и простого упражнения.
Каждое последующее упражнение будет чуточку сложнее.
И если вы его смогли выполнить, значит вы стали немного ближе к вершине мастерства.
Упражнение 5.7. Решение квадратного уравнения
В этом упражнении вы создадите программу, в которой будет
решаться квадратное уравнение стандартного вида
ах2 + Ьх + с = 0.
Создайте папку Windows «Квадратное уравнение».
Создайте проект. В заголовке формы (свойство Caption) запишите: «Решение уравнения ах"2+Ьх+с=0».
Дайте форме имя FormKvUravn (свойство Name). Вид формы
представлен на рис. 26. Сохраните модуль и проект под именами
UnitKvUravn и ProjectKvUravn в папке «Квадратное уравнение».
Поместите на форму компонент TPanel (панель) со страницы
Additional (дополнительные). В свойстве Caption (заголовок) для
панели удалите текст. Поместите на панель три компонента
TLabel (метка) и три компонента TEdit (окно редактирования).
Для компонентов TLabel в свойстве Caption (заголовок) запишите: «Введите параметр а:», «Введите параметр Ь:», «Введите параметр с:». Дайте имена окнам редактирования: Edit_a,
Edit b, Edit_c. Для окон редактирования в свойстве Text (текст)
удалите текст. В эти три окна редактирования вы будете вводить
параметры квадратного уравнения.
Поместите на форму еще одну
панель и на ней разместите компоненты: метку TLabel («Вычислите дискриминант D=b^2-4ac»),
кнопку TBitBtn («Вычислить»), еще
метку TLabel («D=») и окно
редактирования TEdit. Созданному
окну редактирования дайте имя:
Edit_D. Вы будете лишь щелкать
по кнопке, и программа сама
вычислит
дискриминант.
Результат вычислений будет отображаться в окне Edit_D. Но прежде вы укажете программе, как
это делается.
Поместите на форму третью панель. На панель поместите компоненты: метку TLabel («Решение
уравнения: »), метку TLabel («Х1=»), метку TLabel («X2=»), два
компонента TEdit (окно редактирования) напротив каждой
метки, кнопку TBitBtn («Показать результат») и еще метку
TLabel («Уравнение корней не имеет»). Созданным окнам редактирования дайте имена: Edit_Xl и Edit_X2. Последней метке,
указывающей на то, что уравнение не имеет корней, дайте
имя: lb_Otvet. Свойство Visible (видимый) для этой метки установите: False (ложь). Результаты вычисления корней уравнения
будут отображаться в окнах Edit_Xl и Edit_X2. Таким образом,
вы создали макет программы. Сохраните изменения и запустите
программу. Пока ни одна кнопка не работает. Закройте
программу. Приступим к ее оживлению.
Активизируйте модуль проекта (F12). В разделе описания
переменных (var) надо перечислить все переменные, которые
будут использоваться в программе, и указать их тип:
а, Ь, с, D, XI, X2:Real;
В нашем случае все переменные одного типа — вещественные
числа. Теперь эти переменные будут «видны» во всем модуле.
Описание переменных можно было бы производить и в каждой
процедуре, где они используются.
Теперь надо записать процедуру вычисления дискриминанта
для кнопки «Вычислить»:
a:=StrToFloat(Edit_a.Text);
b:=StrToFloat(Edit_b.Text) ;
c:=StrToFloat(Edit_c.Text) ;
D:=b*b-4*a*c;
Edit_D.Text:=FloatToStr(D) ;
Функция StrToFloat преобразует текст, введенный в окна
Edit_a, Editjb и Edit_c в цифровую информацию. Первые три
оператора определяют вещественное число, символьное представление которого содержится в этих окнах. Четвертый оператор вычисляет значение дискриминанта. Пятый оператор преобразует цифровую информацию в текстовую, и помещает ее в
окно Edit_D со свойством Text «D=». Это преобразование выполняет функция FloatToStr, обратная первой. В нашем случае в
окне Edit_D будет отображаться результат вычисления дискриминанта.
Затем следует написать процедуру для кнопки «Показать результат»:
procedure TFormKvUravn.BitBtn2Click(Sender: TObject);
begin
if D>=0 then
begin
Xl:=(-b-sqrt(D))/(2*a);
Edit_Xl.Text:=FloatToStr(XI) ;
X2:=(-b+sqrt(D))/(2*a);
Edit_X2.Text:=FloatToStr(X2) ;
end else
lb_Otvet.Visible:=True;
end;
При написании процедуры используется условное предложение if...then...else (если...то...иначе). Если после ключевого слова
then записываются несколько операторов, то они заключаются в
операторные скобки. В нашем случае условное предложение
работает по следующей схеме:
• Если дискриминант не меньше нуля, то выполняются че
тыре оператора, заключенные в оператор ные скобки
begin...end:
• вычисляется значение первого корня уравнения,
• в окне Edit_Xl отображается значение первого корня,
• вычисляется значение второго корня уравнения,
• в окне Edit_X2 отображается значение второго корня.
• Если дискриминант меньше нуля, то выполняется опера
тор, делающий видимой надпись «Уравнение корней не
имеет». Следует заметить, что перед ключевым словом
else не ставится знак «;».
• Функция sqrt() вычисляет квадратный корень выраже
ния в скобках.
Сохраните изменения и проверьте работу программы.
Программу можно усовершенствовать, добавив на форму запись самого уравнения, учитывая, что в каждом последующем
уравнении параметры a, b и с меняются. Попробуйте сделать это
самостоятельно, используя компоненты TLabel (метка). Для
определения корней следующего уравнения надо перезапустить
программу. Но можно ее опять-таки усовершенствовать. Это
предлагается проделать самостоятельно.
Запустите проект и нажмите на кнопку «Вычислить», не вводя
числа в окна параметров. Программа дала сбой. Если вы
введете в окна параметров не числа, а буквы, то программа
опять даст сбой. Чтобы избежать этой неприятности существуют методы защиты программы от сбоев. Один из таких методов
рассмотрен в упражнении «Калькулятор». После выполнения
упражнения «Калькулятор» вы можете вернуться к этому
упражнению и завершить конструирование проекта с учетом
полученных вами знаний.
Упражнение 5.8. Изменение цвета
В этом упражнении вы создадите программу, в которой щелчок по кнопке будет изменять (change) цвет фигуры. Цвет будет
выбираться из предложенного списка.
Создайте папку «Изменение цвета». Создайте проект. В
Строке заголовка формы запишите название: «Изменение цвета» (свойство Caption). Форме дайте имя FormChColor
(свойство Name). Сохраните модуль и проект под именами
соответственно UnitChColor и ProjectChColor в папке «Изменение
цвета».
Поместите на форму следующие компоненты: TLabel (метка),
TComboBox (редактируемый список), TBitBtn (кнопка с графикой),
TShape (фигура). Вид формы представлен на рис. 27. Фигуре дайте имя
sh_Figura. Кнопке дайте имя bt_Co-1ог. Окну редактируемого списка
дайте имя ComboBox_Color.
В свойстве Caption (заголовок) объекта Label1 запишите «Выберите
цвет:». В свойстве Items (элементы) для Объекта ComboBoxl запишите
названия цветов:
Синий
Красный
Зеленый
В свойстве Caption (заголовок) для кнопки bt_Color запишите:
«Применить».
Теперь для кнопки надо записать процедуру изменения цве та Фигуры:
if ComboBox_Color.Text='Синий' then
sh_Figura.Brush.Color:= clBlue
else
if ComboBox_Color.Text='Красный' then
sh_Figura.Brush.Color:= clRed
else
if ComboBox_Color.Text='Зеленый' then
sh_Figura.Brush.Color:= clGreen;
При написании процедуры, как и в предыдущем упражнении, используется условное предложение if...then...else (если...
то... иначе).
Сохраните изменения и запустите программу. Если кнопка
работает правильно, то перейдем к созданию следующей части
программы.
С помощью следующей группы компонентов вы будете изме нять тип фигуры.
Поместите на форму следующие компоненты: метку TLabel,
редактируемый список TComboBox, кнопку TBitBtn.
В свойстве Caption (заголовок) объекта Label2 запишите: «Выберите
фигуру:». В свойстве Items (элементы) для объекта ComboBox2
запишите названия фигур:
Круг
Эллипс
Прямоугольник
В свойстве Caption (заголовок) для кнопки BitBtn2 запишите
«Применить». Дайте кнопке имя bt_Figura. Дайте окну редактируемого
списка имя ComboBox_Figura.
Для кнопки bt_Figura надо записать процедуру:
if ComboBox_Figura.Text='Kpyr' then
sh_Figura.Shape:=stCircle
else
if ComboBox_Figura.Text='Эллипс' then
sh_Figura.Shape:=stEllipse
else
if ComboBox Figura.Text='Прямоугольник' then
sh_Figura.Shape:=stRectangle;
Сохраните изменения. Запустите программу и убедитесь, что
кнопка работает правильно. Вы видите, что изображение круга
и эллипса не отличаются друг от друга. Чтобы изображения
этих фигур были разными, надо внести некоторые изменения в
процедуру для кнопки bt_Figura:
if ComboBox_Figura.Text='Эллипс1 then begin
sh_Figura.Shape:=stEllipse;
sh_Figura.Left:=180;
// расстояние от левой границы окна уменьшить
sh_Figura.Width:=125;
// ширину фигуры немного увеличить end;
Так как добавились еще два оператора, то все операторы заключаются в операторные скобки begin...end (начало...конец).
Операторы разделяются «точкой с запятой». Во втором операто-
ре присвойте расстоянию фигуры от левой границы окна значение, немного меньшее того, что было первоначально (см. свойство Left (слева) объекта sh_Figura). Это необходимо для того,
чтобы фигура не «съехала вправо» при изменении ее ширины.
В третьем операторе присвойте ширине фигуры значение немного большее того, что было первоначально (см. свойство
Width (ширина) объекта sh_Figura).
Можно попробовать изменять размеры фигуры, добавив на
форму еще три компонента: TLabel (метка), TComboBox (редактируемый список), TBitBtn (кнопка с графикой).
Для выбора размера фигуры вы можете использовать не редактируемый список, а другие компоненты.
Упражнение 5.9. Тест
В этом упражнении вы создадите программу-тест, в которой
на каждый вопрос надо будет выбрать ответ из предложенных
вариантов. Результаты теста определяются по количеству верных ответов.
Создайте папку «Тест». Создайте проект. Назовите форму:
«Тест» (свойство Caption). Дайте форме имя FormTest (свойство
Name), сохраните модуль и проект под именами соответственно
UnitTest и ProjectTest в папке «Тест». Вид формы представлен на
рис. 29.
Поместите на форму три компонента TGroupBox (групповое
окно) со страницы Standard (стандартные). В свойстве Caption
(заголовок) для них запишите: «Первый вопрос», «Второй вопрос», «Третий вопрос». В каждое групповое окно вставьте по
одному компоненту TLabel (метка). В свойстве Caption (заголовок) для них запишите: «2x2», «30/5», «15+6». В каждое групповое окно вставьте по одному компоненту TRadioGroup (группа
радиокнопок). В свойстве Caption (заголовок) для групп радиокнопок запишите: «Варианты ответов:». В группы
радиокнопок вставьте по 4 компонента TRadioButton (радиокнопка). В свойстве Caption (заголовок) для радиокнопок запишите: (3; 7; 4; 5), (7; 6; 4; 5), (24; 22; 25; 21). Итак, правильными
будут ответы: RadioButton3, RadioButton6, RadioButtonl2.
Объявите переменную s переменной целого типа, которая будет
служить счетчиком верных ответов:
var
FormTest: TFormTest;
s:Integer=0;
Переменной s присвоено значение «0». При щелчке на кнопке,
содержащей правильный ответ, значение переменной s будет
увеличиваться на единицу. Для этого событие OnClick (щелчок)
для кнопок RadioButton3, RadioButton6, RadioButtonl2 должно
содержать в теле процедуры следующий оператор: s:=s+l;
В нижней части формы расположите кнопку «Результат»
(свойство Caption для кнопки) и три компонента TLabel (метка).
Дайте имена двум меткам: lb_Sum и lb_Text. Используйте для
этого свойство Name (имя) для меток. В свойстве Visible
(видимый) меток выберите значение: False (ложь). При щелчке на
кнопке будут происходить следующие события: в объекте
lb_Sum будет отображаться количество верных ответов, в Объекте lb_Text будут отображаться слова: «Молодец!», «Нормально», «Плохо» или «Очень плохо» в зависимости от того, сколько дано правильных ответов. Для третьей метки в свойстве
Caption (заголовок) запишите: «Количество верных ответов:».
Дайте кнопке «Результат» имя bt_Rez и запишите для нее процедуру:
procedure TFormTest.bt_RezClick(Sender: TObject);
begin
lb_Sum.Visible:=True;
lb_Sum.Caption:=IntToStr(s); if s=3
then begin
lb_Text.Visible:=True ;
lb_Text.Caption:='Молодец!'; end else
if s=2 then begin
lb_Text.Vi sible:=True ;
lb_Text.Caption:='Нормально';
end else
if s=l then
begin
lb_Text.Visible:=True;
lb_Text.Caption:='Плохо';
end else
if s=0 then
begin
lb_Text.Visible:=True;
lb_Text.Caption:='Очень плохо';
end; end;
Сохраните изменения, запустите программу и попробуйте с
ней поработать. Вы видите, что при ответе на вопрос можно несколько раз нажимать разные кнопки. Для того чтобы ответ на
вопрос состоял из единственного щелчка, надо для щелчка на
каждой кнопке написать процедуру невозможности щелчка на
любой другой кнопке. Вот пример такой процедуры для кнопки
RadioButtonl:
procedure TFormTest.RadioButtonlClick(Sender: TObject);
begin
FormTest.RadioButton2.Enabled:=False;
FormTest.RadioButton3.Enabled:=False;
FormTest.RadioButton4.Enabled:=False;
end;
Следует по аналогии написать процедуры и для остальных
кнопок вариантов ответа на первый вопрос.
Теперь, после ответа на первый вопрос тестируемый будет
вынужден перейти ко второму вопросу. Напишите процедуры
отключения кнопок для всех вариантов ответов на вопросы.
Проверьте работу программы. Вы видите, что теперь следует
снять ограничения для кнопок, если вы хотите использовать
тест еще раз. Добавьте на форму кнопку, которую назовите:
«Повторить тест». Дайте кнопке имя: bt_Povtor. Запишите следующую процедуру щелчка на этой кнопке:
procedure TFormTest.bt_PovtorClick(Sender: TObject);
begin
s:=0;
lb_Sum.Visible:=False;
lb_Text.Visible:=False;
FormTest.RadioButtonl.Enabled:=True;
FormTest.RadioButton2.Enabled:=True;
FormTest.RadioButton3.Enabled:=True;
FormTest.RadioButton4.Enabled:=True;
FormTest.RadioButton5.Enabled:=True;
FormTest.RadioButton6.Enabled:=True;
FormTest.RadioButton7.Enabled:=True;
FormTest.RadioButton8.Enabled:=True;
FormTest.RadioButton9.Enabled:=True;
FormTest.RadioButtonlO.Enabled:=True;
FormTest.RadioButtonl1.Enabled:=True;
FormTest.RadioButtonl2.Enabled:=True;
FormTest.RadioButtonl.Checked:=False;
FormTest.RadioButton2.Checked:=False;
FormTest.RadioButton3.Checked:=False;
FormTest.RadioButton4.Checked:=False;
FormTest.RadioButton5.Checked:=False;
FormTest.RadioButton6.Checked:=False;
FormTest.RadioButton7.Checked:=False;
FormTest.RadioButton8.Checked:=False;
FormTest.RadioButton9.Checked:=False;
FormTest.RadioButtonlO.Checked:=False;
FormTest.RadioButtonl1.Checked:=False;
FormTest.RadioButtonl2.Checked:=False;
end;
В этой процедуре обнуляется счетчик, выключается отображение суммы правильных ответов и оценки, выключается ограничение щелчка на кнопке, выключается сам щелчок на кнопке.
Упражнение 5.10. Калькулятор
В этом упражнении вы создадите калькулятор, с помощью
которого можно будет выполнять простые математические действия над двумя числами.
Создайте папку «Калькулятор». Создайте проект. Дайте форме имя FormCalculator (свойство Name). В строке заголовка формы запишите: «Калькулятор» (свойство Caption). Сохраните модуль и проект под именами UnitCalculator и ProjectCalculator в
папке «Калькулятор». На рис. 30 представлен вид формы.
Установите на форму три
компонента TPanel (панель).
В первой панели расположите два компонента TLabel
(метка) и два компонента
TEdit (окно редактирования).
В свойстве Caption (заголовок)
объектов Labell и Label2
запишите: «Число X:» и
♦Число Y:». С помощью
свойства Name дайте меткам
имена: 1Ь_Х и lb_Y. Для
объектов Editl и Edit2 в
свойстве Text (текст) удалите
текст. Расположите все объекты первой панели так, чтобы было
понятно, что в окна должны вводиться числа, над которыми будут выполняться действия. Дайте окнам редактирования имена: Edit_X и Edit_Y.
Во второй панели расположите пять кнопок TBitBtn. В свойстве Caption (заголовок) для них запишите: «X + Y», «X-Y»,
«X*Y», «X/Y», «X"Y». Дайте кнопкам имена соответственно:
bt_Plus, bt_Minus, bt_Umnog, bt_Razdel, bt_Step.
В третьей панели расположите компоненты TLabel (метка) и
TEdit (окно редактирования). В свойстве Caption (заголовок) для
метки запишите: «Ответ:». Дайте метке имя: lb_Otvet. В свойстве
Text (текст) Объекта Edit3 удалите текст. Дайте окну
редактирования имя: Edit_Otvet.
Поместите на форму метку TLabel и дайте ей имя: lb_Zero и
свойство Visible (видимый) для нее установите: False (ложь). Эта
метка будет использоваться в приложении для отображения
текста при неправильном вводе чисел и при делении на нуль.
Внешняя часть программы готова.
В программе будут задействованы три вещественные переменные:
х — это первое число, которое будет вводиться в окно Edit_X,
у - это второе число, которое будет вводиться в окно Edit_Y.
с - это результат действий над парой чисел х и у, который будет отображаться в окне Edit_Otvet.
Следует объявить эти переменные. Так как они будут присутствовать во всех процедурах для кнопок математических
действий, то достаточно объявить их один раз после служебного слова var (переменные) в разделе объявления переменных
модуля:
х, у, с:Real;
Запишите в теле процедуры для первой кнопки следующие
операторы:
x:=StrToFloat(Edit_X.Text) ;
y:=StrToFloat(Edit_Y.Text);
с:=х +у;
Edit_Otvet.Text:=FloatToStr(с);
Первые два оператора производят преобразование символов,
введенных в окна Edit_X и Edit_Y, в цифровые данные. Преобразование производится при помощи метода StrToFloat. Переменным х и у присваиваются преобразованные числовые значения.
Третий оператор производит действие сложения. Переменной
с присваивается значение суммы значений переменных х и у.
Четвертый оператор преобразует цифровые данные в символы, которые будут выводиться в окне Edit_Otvet. Преобразование производится при помощи метода FloatToStr.
Сохраните изменения, запустите проект и убедитесь, что
кнопка работает правильно. Вы можете складывать не только
целые, но и любые другие числа. Заметили недостаток программы: вам мешают числа, оставшиеся в окнах, когда вы хотите сложить следующие числа? Избавьтесь от него. Для этого
надо добавить кнопку «Сброс», и прописать для события «щелчок на кнопке» процедуру вставки во все редактируемые окна
пустых строк:
Edit_X.Text:="; .
Edit_Y.Text:=' ' ;
Edit_Otvet.Text:=" ;
Такую же процедуру можно написать и для щелчка указателем мыши в окне Edit_X. Тогда, если вы забудете нажать кнопку
«Сброс» и щелкнете в первом окне для ввода чисел, то все окна
тотчас станут пустыми.
В процедурах для второй, третьей и четвертой кнопок используйте соответственно операторы:
с:=х-у;
с:=х*у;
с:=х/у.
Для кнопки возведения в степень запишите следующую процедуру:
с:=ехр(у*1п(х)) ;
Edit_Otvet.Text:=FloatToStr(с);
Сохраните изменения, запустите проект и проверьте, правильно ли работают все кнопки вашего калькулятора.
Теперь калькулятор можно совершенствовать. Запустите
проект и попробуйте разделить какое-либо число на нуль. Калькулятор дал сбой в работе. Значит надо предусмотреть этот
вариант. Преобразуйте процедуру деления так, чтобы она приняла следующий вид:
procedure TFormCalculator.bt_RazdelClick(Sender:
TObject);
begin
x:=StrToFloat(Edit_X.Text);
y:=StrToFloat(Edit_Y.Text); if
y<>0 then begin c:=x/y;
Edit_Otvet.Text:»FloatToStr(c); end
else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Дурень, на нуль делить нельзя'; end; end;
Для удаления надписи необходим оператор, делающий ее невидимой. Подумайте, какой оператор надо написать и в какие
процедуры вы будете его добавлять?
Запустите проект и попробуйте выполнить действие, не вводя
числа в редактируемые окна. Попробуйте выполнить действия,
вводя в окна не числа, а буквы. Программа даст сбой. Чтобы
избежать этого, применим функцию Val. Добавьте в разделе
описания переменных следующую запись: kl,k2:integer;
Функция Val производит проверку ввода чисел в окна Edit_X и
Edit_Y и преобразует строку текста окна редактирования в число,
значение которого присваивает соответствующей переменной.
Если введены вещественные числа, то параметры kl и к2
принимают значение «О». Если окно пустое или введены
буквенные выражения, то параметры принимают значения, отличные от нуля. Посмотрите, как применяется эта функция для
процедуры сложения:
procedure TFormCalculator.bt_RezClick(Sender: TObject); begin
Val(Edit_X.Text, x, kl);
Val(Edit_Y.Text, y, k2); if (kl=0)
and (k2=0) then begin c:=x+y;
Edit_Otvet.Text:=FloatToStr(c) ; end
else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Введите число!'; end;
{x:=StrToFloat(Edit_X.Text);
y:=StrToFloat (Edit_Y. Text) ; c:=x+y;
Edit_Otvet.Text:=FloatToStr(c);} end;
Обратите внимание, что если проверяются два условия, то
каждое условие заключается в круглые скобки. Логический
оператор and (и) подразумевает, что должны выполняться оба
условия одновременно.
Операторы, работавшие в этой процедуре, закомментированы скобками и заменены другими операторами. Измените в
своей программе процедуру сложения чисел. Если у вас все
получилось, то измените все остальные процедуры действий над
числами.
Далее приведен листинг всей программы:
unit UnitCalculator;
interface
// имя Модуля
// здесь начинается раздел интерфейса
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls, StdCtrls,
Buttons, Math; // список стандартных Модулей
type
// здесь начинается раздел типов
TFormCalculator = class(TForm) // объявление класса
lb_X: TLabel;
lb_Y: TLabel;
lb_Otvet: Tlabel; // объявление Объектов и методов
Edit_X: TEdit;
Edit_Y: TEdit;
Edit_Otvet: TEdit;
bt_Plus: TBitBtn;
bt_Minus: TBitBtn;
bt_Umnog: TBitBtn;
bt_Razdel: TBitBtn;
bt_Step: TBitBtn;
PI: TPanel;
P2: TPanel;
P3: TPanel;
lb_Zero: TLabel;
bt_Rez: TBitBtn;
bt_Povtor: TBitBtn;
procedure bt_PlusClick(Sender: TObject);
procedure Edit_XClick(Sender: TObject);
procedure bt_MinusClick(Sender: TObject);
procedure bt_UmnogClick(Sender: TObject);
procedure bt_RazdelClick(Sender: TObject);
procedure bt_StepClick(Sender: TObject);
procedure bt_RezClick(Sender: TObject);
procedure bt_PovtorClick(Sender: TObject);
private
{ Private declarations } public
{ Public declarations } end; // здесь
заканчивается раздел интерфейса
var
// раздел объявления переменных
FormCalculator: TFormCalculator;
{объявление экземпляра класса}
х,у,с:Real;
// объявление переменных kl,k2:integer;
implementation // здесь начинается раздел реализации
{$R *.DFM}
procedure TFormCalculator.bbt_PlusClick(Sender:
TObject);
begin
Val(Edit_X.Text, x, kl);
Val(Edit_Y.Text, y, k2); if
(kl=0) and (k2=0) then begin
c:=x+y;
Edit_Otvet.Text:=FloatToStr(c) ; end
else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Введите число!';
end;
{x:=StrToFloat(Edit_X.Text);
y:=StrToFloat (Edit_Y.Text) ;
c:=x+y;
Edit_Otvet.Text:=FloatToStr(c);}
end;
procedure TFormCalculator.Edit_XClick(Sender: TObject);
begin
Edit_X.Text:='';
Edit_Y.Text:='';
Edit_Otvet.Text:='';
Lb_Zero.Visible:=False ;
end;
procedure TFormCalculator.bt_MinusClick(Sender:
TObject);
begin
Val(Edit_X.Text, x, kl);
Val(Edit_Y.Text, y, k2); if (kl=0)
and (k2=0) then begin c:=x-y;
Edit_Otvet.Text:=FloatToStr(c);
end
else
begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Введите число!';
lx:=StrToFloat (Edit_X.Text);
y:=StrToFloat (Edit_Y. Text) ; c:=x-y;
Edit_Otvet.Text:=FloatToStr(c) ;}
end;
end;
procedure TFormCalculator.bt_UmnogClick(Sender:
TObject);
begin
Val(Edit_X.Text, x, kl);
Val(Edit_Y.Text, y, k2) ; if
(kl=0) and (k2=0) then begin
c:=x-y;
Edit_Otvet.Text:=FloatToStr(c); end
else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Введите число!';
{x:=StrToFloat(Edit_X.Text);
y:=StrToFloat (Edit_Y. Text) ; c:=x*y; Edi
t_Otvet.Text:=FloatToStr(c);}
end; end; procedure
TFormCalculator.bt_RazdelClick(Sender:
TObject);
begin
{x:=StrToFloat(Edit_X.Text);
y:=StrToFloat (Edit_Y. Text) ;}
Val(Edit_X.Text, x, kl);
Val(Edit_Y.Text, y, k2) ; if
(kl=0) and (k2=0) then if y<>0
then begin c:=x/y;
Edit_Otvet.Text:=FloatToStr(c);
end
else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:=lДурень, на нуль делить нельзя';
end else begin
lb_Zero.Visible:=True;
lb_Zero.Caption:='Введите число!'; end;
end;
procedure TFormCalculator.bt_StepClick(Sender:
TObj ect);
begin
c:=exp(y*ln(x));
Edit_Otvet.Text:=FloatToStr(c);
end;
procedure TFormCalculator.bt_PovtorClick(Sender:
TObject);
begin
Edit_X.Text: = '' ;
Edit_Y.Text:='';
Edit_Otvet.Text: ='' ;
Lb_Zero.Visible:=False;
end; end.
Вы можете сделать свой калькулятор более «продвинутым»,
добавив в него кнопки вычисления некоторых функций (sin(x),
cos(x), abs(x), sqrt(x) и др.).
Download