Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ракитин Р.Ю. ООП в Turbo Delphi

.PDF
Скачиваний:
54
Добавлен:
18.03.2015
Размер:
3.59 Mб
Скачать

51

окажется пустое окно, которое можно закрыть, нажав на крестик в правой верхней части окна.

Теперь сохраним созданное приложение, для это выберем File Save All (Файл → Сохранить всё). Будет предложено сохранить файл с исходным текстом модуля Unit1 в файл Unit1.pas. Внимание! Имя модуля и имя файла

PAS должны совпадать. Затем необходимо сохранить файл проекта, имеющего расширение DPR.

3.Изменение заголовка формы.

Создадим приложение, на главной форме которого напечатан некоторый текст, например, «Первый проект на системе Delphi».

Перейдем в Проектировщик форм. Работая в нем, мы следуем принципу

WYSIWYG (What You See Is What You Get что ты видишь, то ты и получаешь), в соответствии с которым окно созданной программы будет выглядеть так, как оно было подготовлено в Проектировщике форм.

Любой объект в среде программирования Delphi доступен по его имени. Имя объекта это свойство, которое можно изменить в Object Inspector

(Инспектор объектов), свойство названо Name.

Создадим заготовку проекта. Для этого свойству Caption (заголовок) формы Form1 присвоим значение «Первый проект». Для этого активизируем форму Form1 щелчком мыши (при этом вокруг компонента появятся квадратики маркеры для изменения размера). В окне Object Inspector (Инспектор объектов) Properties (Свойства объекта) выбираем свойство

Сaption и присваиваем ему значение «Первый проект» (пишем в ячейке справа от Caption «Первый проект»).

4.Вывод на форму текстового сообщения.

Это можно сделать, используя различные объекты, например с помощью:

элемента управления TLabel (Метка);

элемента управления TEdit (Одна строка);

элемента управления TMemo (Несколько строк).

Наиболее правильным для вывода текста будет использование компонента TLabel. Компоненты TEdit и TMemo хоть и подходят для вывода текста (имеют соответствующие свойства), но больше подходят для ввода текста в приложение. Эти компоненты будут рассмотрены в Главе 7.

Рассмотрим подробнее свойства и методы компонента TLabel (Метка) :

Name имя компонента, используемое в программе для доступа к компоненту и его свойствам;

Caption текст, отображаемый в поле компонент;

Font шрифт, который используется для отображения текста; Color цвет фона поля компонента;

Left расстояние от левой границы формы до левой границы компонента;

52

Top расстояние от верхней границы формы до верхней границы компонента; Width ширина поля компонента;

Height высота поля компонента;

AutoSize свойство, определяющее, будет ли размер компонента зависеть от текста в поле компонента. В случае значения True размер компонента будет ограничен текстом в поле компонента. В противном случае размер компонента определяется значениями свойств Width и Height;

Transparent признак необходимости задания прозрачного цвета для поля компонента. Если значение равно True, то цвет компонента определяется цветом поверхности, на которой он находится. В противном случае цвет определяется значением свойства Color;

Align определяет границу, к которой будет «прижат» компонент. Он может быть прижат к верхнему краю (alTop), к нижнему краю (alBottom), левому краю (alLeft), правому краю (alRight), быть растянутым на всю форму

(alClient). Также свойство может иметь значение alNone положение и размер компонента определяется свойствами Тор, Left, Width и Height;

Alignment способ выравнивания текста в поле компонента. Текст может быть прижат к левому краю (taLeftJustify), к правому краю (taRightJustify)

или находиться посередине (taCenter);

WordWrap определяет, будет ли текст переноситься на следующую строку; ParentColor и ParentFont свойства, определяющие, будет ли компонент

наследовать цвет и вид шрифта родительского компонента).

Выберем на Панели инструментов класс управляющих элементов TLabel и разместим экземпляр класса Label1 на форме Form1. При этом в окне редактора кода, в разделе описания класса TForm1 автоматически появится новое свойство (ссылка на объект) – Label1: TLabel.

Активизируем метку Label1 щелчком мыши. В окне Object Inspector (Инспектор объектов) Properties (Свойства объекта) выберем свойство

Caption и присвоим ему значение «Первый проект на Delphi».

5.Установка цвета формы и параметров шрифта.

Активизируем форму Form1. В окне свойства объекта выберем свойство Color (цвет фона) и двойным щелчком откроем диалоговое окно с цветовой палитрой. Выберем цвет например, жёлтый. Основные цвета и их значения представлены в приложении. Обращение к цветам может осуществляться в шестнадцатеричной форме.

Как отмечалось выше, свойство Font является составным и позволяет устанавливать различные характеристики шрифта:

Color цвет шрифта;

Size размер шрифта в пунктах;

Name гарнитура шрифта;

53

Style начертание, принадлежит к типу множество с допустимыми значениями: fsBold, fsItalic, fsUnderline, fsStrikeOut.

Например, для изменения начертания шрифта в программе можно написать следующий код:

{размер 24 пт} Label1.Font.Size:= 24;

{полужирный, курсив} Label1.Font.Style:= [fsBold, fsItalic];

{гарнитура Arial} Label1.Font.Name:= ’Arial’;

{цвет зеленый} Label1.Font.Color:=clGreen;

+ Для изменения свойств текста всех объекта на форме необходимо в

их свойстве ParentFont установить значение True. После чего при изменении свойства Font у формы будет изменяться аналогичное свойство у всех подчиненных объектов.

Изменим свойство WordWrap на True, после чего можно будет изменить ширину компонента TLabel, а так же укажем выравнивание по центру. После чего получим следующий вид приложения:

6.Свойства проекта.

После компиляции приложения будет создан файл (по умолчании в папке с сохраненным проектом), имеющий расширение EXE.

Для изменения дополнительных характеристик проекта необходимо перейти Project Options… (Проект → Свойства). Откроется следующее окно:

54

На вкладке Forms, в верхней части, можно выбрать главную форму форму, отображающуюся первой при запуске приложения. Ниже в двух окнах находятся названия форм, создающихся автоматически (Auto-create forms) –

данные формы существуют при запуске приложения, и формы доступные, но несозданные (Available forms) – пользователю, прежде чем начать их использовать, необходимо создать соответствующий объект с помощью конструктора.

+ Как правило, ваши приложения будут состоять из форм,

создаваемых на этапе запуска приложения.

В следующей вкладке Application (Приложение) можно изменить заголовок, отображаемый в панели задач (Title), файл помощи, связанный с приложением (Help file), а также иконка (Icon) вашей программы.

55

Во вкладке Version Info (Информация о версии) указывается подробная информация о версии проекта, которая будет доступна в свойствах исполняемого файла.

56

Глава 4. Событийная модель Delphi

События в среде Delphi

Внутренняя структура программ для Windows кардинальным образом отличается от структуры консольных программ, где операторы выполняются последовательно, от начала программы, ключевого слова begin, до завершающего слова end. Операционная система Windows функционирует по другому принципу. Она обрабатывает возникающие в ней события: щелчок мыши на кнопке, выбор пункта меню, нажатие клавиши, достижение встроенным таймером заданного значения времени и передает их выполняющимся в своей среде программам. Они в свою очередь находятся в состоянии ожидания и активизируются только при получении от Windows сообщений о событиях реагируют на них.

Сообщения Windows обрабатываются программой не одновременно, а последовательно, хотя некоторые сообщения имеют более высокие приоритеты, чем другие. Например, сообщение, требующее завершения работы приложения, не выполняется мгновенно, а ставится в очередь сообщений, и, пока не будут обработаны первые сообщения (это, может быть, информация о щелчках мыши, нажатиях клавиш, кнопок и прочее), работа программы продолжится.

Структура программы для Windows представляет собой набор подпрограмм, каждая из которых ответственна за обработку конкретного события и вызывается только при его получении.

+ Программист сам решает, какие события в программе требуется

обрабатывать. Например, системные события: выбор пункта системного меню, закрытие приложения – обрабатываются в программе, созданной в среде Delphi, автоматически.

Каждый из компонентов Delphi реагирует на определенный набор событий (нажатие кнопки мыши, кнопки клавиатуры, изменение размера и т.д.). С каждым из таких событий связывается определенный обработчик (метод, процедура). В таком обработчике необходимо записать тот код программы, который будет выполняться при наступлении события.

Компоненты Кнопки

Одним из основных компонентов, используемых в программах, являются кнопки. Кнопки используются в подавляющем большинстве программных продуктов и предназначены для однократного выполнения какого-либо действия. Кнопки представляют собой поверхность с подписью, обычно обведенную трехмерной рамкой, которая может появляться при наведении на нее мышью (так называемый flat-стиль). Также имеется возможность вывода на поверхность кнопки графического изображения. В Delphi данные элементы управления реализованы в трех вариантах:

57

1) Компонент Button (Простая кнопка) – является наследником стандартных элементов управления (класс TWinControl).

Компонент Button помимо свойств,

унаследованных от базового класса элементов управления TControl, поддерживает свойство Caption (тип string), в котором хранится строка, выводимая в качестве подписи на кнопке, и

Wordwrap (тип boolean), аналогичное

одноименному свойству компонента Label и указывающее на возможность разбиения подписи на несколько строк.

Шрифт, которым подпись выводится на поверхность кнопки, задается свойством Font типа TFont.

+ Несмотря на то, что в классе TFont описано свойство Color,

теоретически определяющее цвет надписи, подпись на кнопке всегда выводится черным цветом, то есть цвет шрифта игнорируется.

Использование компонентов-кнопок в программе основано на обработчике события OnClick, которое возникает при нажатии пользователем кнопки.

Нажатие может быть произведено с помощью мыши или для компонентов Button и BitBtn с помощью клавиатуры (клавишами Пробел или Enter), когда кнопка находится в фокусе. Обработчик данного события имеет тип TNotifyEvent, то есть в нем не передается каких-либо параметров, кроме ссылки на компонент, который вызвал это событие.

Например, обработчик события нажатия на кнопку, который сдвигает кнопку, вызвавшую это событие, влево на десять точек, может выглядеть следующим образом:

procedure TForml.ButtonlClick.(Sender: TObject); begin

Buttonl.Left:= Buttonl.Left - 10; end;

2) Компонент BitBtn (Кнопка с изображением) – наследник компонента Button.

Компонент BitBtn наследует все описанные возможности Button и добавляет возможность вывода на поверхность кнопки растрового изображения, задаваемого свойством Glyph.

Любая кнопка типа BitBtn может находиться в трех состояниях в зависимости от действий, которые выполняются пользователем в данный момент:

Пользователь не воздействует на кнопку, но компонент допускает взаимодействие, то есть свойство Enabled имеет значение True

58

(см. левую часть рисунка). В таком состоянии на поверхность кнопки выводится изображение, заданное свойством Glyph, и подпись имеет черный цвет.

Пользователь не воздействует на кнопку, и компонент не допускает взаимодействие, то есть свойство Enabled имеет значение False. Изображение, заданное свойством Glyph, переводится в оттенки серого цвета, подпись также изменяет свой цвет (см. центральную часть рисунка).

Пользователь нажал на кнопку и еще не отпустил кнопку мыши. Изображение и подпись соответствуют нормальным, но сдвигаются вправо вниз, чтобы обеспечить эффект вдавленности кнопки (см. правую часть рисунка).

Такая возможность реализуется путем использования в свойстве Glyph трех изображений одинакового размера и расположенных в один ряд.

Для указания относительного расположения подписи и изображения на поверхности кнопки используется перечислимое свойство Layout, возможные значения: blGlyphLeft изображение располагается слева от подписи, blGlyphRight справа от подписи, blGtyphTop сверху от подписи, blGlyphBottom снизу от подписи.

Интересной возможностью компонента BitBtn является набор стилей, для каждого из которых заданы подпись и изображение, что может существенно ускорить построение пользовательского интерфейса. Стиль, который необходимо назначить, находится в перечислимом свойстве Kind. Рассмотрим некоторые из значений:

bkCustom вид компонента определяется свойствами Caption и Glyph;

bkYes ;

bkNo ;

bkCancel .

3) Компонент SpeedButton (Кнопка с фиксацией) – в отличие от двух

предыдущих компонентов является наследником графических компонентов (класс TGraphicControl).

Компоненты SpeedButton близки по внешнему виду к кнопкам BitBtn и поддерживают вышеописанные свойства Caption, Glyph,

NumGlyphs, Layout и Spacing, однако не реализуют

свойства Kind и Wordwrap. Кнопки SpeedButton могут отображаться в плоском виде и принимать трехмерный вид при наведении на них мышью, если свойство Flat имеет значение True.

Особенностью кнопок SpeedButton является их возможность фиксации в нажатом положении. Для определения, в каком состоянии находится кнопка, предусмотрено логическое свойство Down, доступное в Инспекторе объектов и

59

во время работы программы как для чтения, так и для изменения с немедленным отображением соответствующего состояния кнопки на экране:

property Down: Boolean;

После создания компоненты SpeedButton не поддерживают фиксацию в нажатом положении. Для включения этой возможности используется целочисленное свойство Grouplndex.

Если свойство Grouplndex имеет значение 0, то компонент SpeedButton ведет себя как обычная кнопка BitBtn. При ненулевом значении у кнопки появляется возможность фиксации в нажатом положении, причем кнопки, имеющие одинаковое значение этого свойства, образуют группу, в которой может быть нажата только одна из кнопок. При нажатии другой кнопки в группе все остальные переходят в нормальное положение. При этом событие

OnСlick для каждой кнопки возникает только при непосредственном нажатии на нее пользователем, поэтому для работы с группами компонентов

SpeedButton обычно используется общий обработчик события OnClick для каждой группы.

Еще одно свойство AllowAllUp (логический тип) определяет, могут ли все кнопки, входящие в группу, одновременно находиться в не нажатом состоянии.

Флажки и переключатели

1.Объекты класса Флажки (TCheckBox)

Компонент TCheckBox является переключателем, который может находиться в одном из двух состояний, определяемых свойством Checked: выбранном (значение True) или невыбранном (значение False), иногда еще говорят установленном или неустановленном. Рядом с переключателем обычно находится поясняющий текст (свойство Caption).

Помимо двух обязательных состояний возможно и третье неопределенное (флажок при этом окрашивается полностью).

Для того чтобы включить возможность

переключения и трёх состояний, используется свойство AllowGrayed (по умолчании имеет значение False). Для более гибкого регулирования состоянием флажка используется свойство State, определяемое тремя значениями:

Установлен (Checked);

Не установлен (Unchecked);

Не определенное (Grayed).

+Свойства AllowGrayed и Checked взаимосвязаны.

Переключение состояний компонента происходит, как правило, при нажатии кнопки мыши, поэтому обработку действий связывают с событием

OnClick.

60

Реализуем метод, который позволяет по изменению состояния флажка делать текст в Label1 жирным или обычным.

procedure TForm1.CheckBox1Click(Sender: TObject); begin

if CheckBox1.Checked

then Label1.Font.Style:=Label1.Font.Style+[fsBold] else Label1.Font.Style:=

Label1.Font.Style-[fsBold]

end;

Таким образом, если (if) флажок установлен, то (then) текст в Label1 становится жирным, иначе (else) – обычным.

2.Объекты класса Переключатели (TRadioButton)

Переключатели предназначены для выбора одного из нескольких взаимоисключающих решений. Переключатели всегда используются группами. Когда пользователь выбирает один из них, выделение с текущего переключателя снимается. Состояния переключателя, описываемое свойством Checked, может иметь два состояния: True (Выделено), False (Не выделено).

Для отслеживания состояния конкретного переключателя нужно обрабатывать событие OnClick так же, как это делалось для компонента TCheckBox.

Несколько компонентов TRadioButton можно объединить в группу, разместив их в поле компонента TGroupBox, являющегося также контейнером для любых других компонентов. При этом его состояние компонентов, принадлежащих к одной группе, не зависит от состояния компонентов, принадлежащих к другой группе.

3.Объект класса Группа переключателей (TRadioGroup)

Группа переключателей

используется, если в программе

необходимо использовать несколько групп переключателей. После

размещения на форме компонента TRadioButton входящие в него переключатели задаются перечислением их названий в свойстве Items, имеющим значение TStrings (будет рассмотрено позднее). Для

ввода значений используется специальный редактор, вызываемый

из Инспектора объекта. Количество введенных строк соответствует количеству переключателей в объекте RadioGroup. Обращение к переключателю происходит через свойство ItemIndex (нумерация начинается с нуля), если значение равно -1, то ни один из переключателей не выделен.