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

Управление и оптимизация / Osnovi informatsionnikh i komputernikh tekhnologiy 2011

.pdf
Скачиваний:
50
Добавлен:
02.09.2019
Размер:
2.13 Mб
Скачать

Окно Редактора Кода без встроенного окна Code Explorer

Редактор Кода в Delphi 6 имеет две страницы: Code (код) и Diagram (диаграммы). Закладки этих страниц вы можете видеть в нижней части окна. Первая из них (в версиях, младше Delphi 6, только она и имеется) содержит коды модулей вашего приложения и тексты других файлов, которые вы открыли в процессе проектирования. Вторая страница», введенная только в Delphi 6, позволяет вам строить диаграммы, иллюстрирующие взаимоотношения компонентов в вашем приложении.

Эта страница является полноценным программным редактором. В редакторе применяется выделением цветом и шрифтом синтаксических элементов.

Взаголовке окна Редактора Кода отображается имя текущего файла, того, с текстом которого вы работаете. В верхней части окна вы можете видеть также закладки или ярлычки, указывающие текущую страницу.

Внижней части окна Редактора Кода вы можете видеть строку состояния. В самой левой ее позиции находится индикатор строки и колонки. Это помогает вам понимать, в каком месте кода вы находитесь.

Второй элемент строки — индикатор модификации. Когда вы начинаете новый проект, то код, который Delphi автоматически написала для вас, еще не сохранен. Вы должны сделать это сами командой File | Save. Если код изменялся вами или Delphi с того момента, когда вы в последний раз сохраняли его в файле, в индикаторе модификации (правее индикатора строки и колонки) появляется слово «Modified». Это слово показывает вам, что код, который вы видите, не тот же самый, что на диске.

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

141

В окно Редактора Кода, как и в другие окна Delphi, встроена контекстная справка. Чтобы получить справку по какому-то слову кода (ключевому слову, написанному имени функции и т.п.), достаточно установить курсор на это слово и нажать клавишу F1.

Инспектор объектов

Инспектор Объектов (Object Inspector) обеспечивает простой и удобный интерфейс для изменения свойств объектов Delphi и управления событиями, на которые реагирует объект.

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

Страница свойств (а) и страница событий (6) Инспектора Объектов

Страница свойств (Properties) Инспектора Объектов показывает свойства того объекта, который в данный момент выделен вами. Щелкните на окне пустой формы и на странице свойств Инспектора Объектов вы сможете увидеть свойства формы (они показаны на рис.6 а). Вы можете изменять эти свойства. Например, измените свойство Caption (надпись) вашей формы, написав в нем «Моя форма», и вы увидите, что эта надпись появится в полосе заголовка вашей формы.

Страница событий (Events) составляет вторую часть Инспектора Объектов. На ней указаны все события, на которые может реагировать выбранный объект.

Теперь вы имеете некоторое представление об основных элементах Интегрированной Среды Разработки Delphi. Напишем первое приложение.

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

142

1.Запустите Delphi с помощью меню Windows Пуск | Программы. После этого откройте новое приложение. Для этого вам надо выполнить команду File | New Application.

2.Перенесите на пустую форму, которая открылась вам, кнопку типа ТВutton со страницы Standard палитры компонентов.

3.Аналогичным образом перенесите на форму с той же страницы Standard палитры компонентов метку Label. В этой метке в процессе выполнения приложения будет появляться текст при нажатии пользователем кнопки. Delphi присвоит ей имя Label1.

4.Разместите компоненты на форме примерно так, как показано на рисунке. При этом уменьшите до разумных размеров окно формы, так как в вашем первом приложении никаких других компонентов не будет.

а б Форма (а) и окно в процессе выполнения (б)

вашего приложения

5.Выделите на форме компонент Button1 — кнопку. Перейдите в Инспектор Объектов и измените ее свойство Caption (надпись), которое по умолчанию равно Button1 на «Пуск».

6.Укажите метке Label1, что надписи на ней надо делать жирным шрифтом. Для этого выделите метку, в окне Инспектора Объектов раскройте двойным щелчком свойство Font (шрифт), затем также двойным щелчком раскройте подсвойство Style (стиль) и установите в true свойство fsBold (жирный).

7.Сотрите текст в свойстве Caption метки Label1, чтобы он не высвечивался, пока пользователь не нажмет кнопку приложения.

Теперь вам осталось только написать оператор, который заносил бы в свойство Caption метки Label1 нужный вам текст в нужный момент. Этот момент определяется щелчком пользователя на кнопке. При щелчке в кнопке генерируется событие OnClick. Следовательно, обработчик этого события вы

идолжны написать.

8.Выделите кнопку Button1 на форме, перейдите в Инспектор Объектов, откройте в нем страницу событий (Events), найдите событие кнопки OnClick (оно первое сверху) и сделайте двойной щелчок в окне справа от имени этого события. Это стандартный способ задания обработчиков любых событий. Но перейти в обработчик события OnClick (только этого события) можно и иначе: достаточно сделать двойной щелчок на компоненте Button1 на форме. В обоих случаях вы окажетесь в окне Редактора Кода и увидите там текст:

143

Procedure Tform1.Button1Click(Sender: TObject); begin

end;

Заголовок этой процедуры складывается из имени класса вашей формы ТForm1, имени компонента (Button1) и имени события без префикса

On (Click).

9. Напишите в обработчике оператор задания надписи метки Label1. Этот оператор может иметь вид:

Label1.Caption:='Это мое первое приложение';

Таким образом, полностью ваш обработчик события должен иметь вид: procedure TForm1.Button1Click(Sender: TObject);

begin

Label1.Caption:='Это мое первое приложение'; end;

Если требуется отобразить числовую информацию, можно воспользоваться функциями FloatToStr и IntToStr, переводящими соответственно числа с плавающей запятой и целые в строку. Для формирования текста, состоящего из нескольких фрагментов, можно использовать операцию «+», которая для строк означает их склеивание (конкатенацию).

Практическая часть 2.

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

1.Создайте каталог для нового проекта. Выберите пункт меню File | New Application. Сразу же сохраните новый проект в данном каталоге.

2.Разместите на форме две кнопки с надписями Старт и Выход, компонент TLabel (статический текст) и компонент TEdit (строка редактирования).

3.Кнопки-выключатели и радиокнопки используются для установки различных флагов и режимов выполнения задачи. Кнопки-выключатели могут переключаться независимо друг от друга, а в группе радиокнопок включенной может быть только одна из них.

Добавим на форму кнопку-выключатель CheckBox и группу радиокнопок RadioGroup. Зададим для CheckBox значение свойства Caption – градусы (аргумент синуса измеряется в градусах, а если кнопка выключена, то в радианах).

Для занесения кнопок в радиогруппу нажмем «...» напротив свойства Items компонента RadioGroup1. В раскрывшемся диалоговом окне запишем

наименования радиокнопок в три строчки: sin cos tg .

Закроем окно. В свойство Caption запишем Функция. После установки необходимых свойств форма примет вид:

144

4. Запишем код для проверки состояния кнопок. Состояние кнопки

CheckBox хранится в ее свойстве Checked типа Boolean. Если Checked –

истина, то кнопка включена (помечена), если ложь, то выключена. Состояние группы радиокнопок проверяется с помощью ее свойства ItemIndex типа Integer. Если ItemIndex равен 0, то включена первая по порядку кнопка, если 1, то 2-я и т.д. Если -1, то ни одна из кнопок не включена. Изменим обработчики событий для кнопки Вычислить:

procedure TForm1.Button1Click(Sender: TObject); var x: real;

code: integer; s: string;

begin val(Edit1.text,x,code);

if CheckBox1.Checked then x:=pi*x/180.0; {Перевод в радианы}

case RadioGroup1.ItemIndex of {Варианты расчета} 0,-1: x:=sin(x);

1:x:=cos(x);

2:x:=sin(x)/cos(x);

end; str(x:7:4, s);

Label3.Caption:=S;

end;

5. Выполните приложение. Результат его работы будет иметь следующий вид:

145

Практическая часть 3

Списки (компонент ListBox) используются для выбора элемента, комбинированные списки (ComboBox) могут дополнительно отредактировать этот выбранный элемент.

Напишем пример, позволяющий выбирать из списка цвет компонента. 1. Откроем, как обычно, новый проект и сохраним его в отдельном

каталоге. Разместим на форме компоненты ListBox и одну кнопку. 2.Выбрав свойство Items cписка ListBox1, занесем в него строки Blue,

Red, Green, так что форма примет вид

3. Напишем обработчики события OnClick для ListBox1: procedure TForm1.ListBox1Click(Sender: TObject);

var s: string; begin

with ListBox1 do begin

s:= Items[ItemIndex]; { ItemIndex - порядковый номер элемента,

нумерация начинается с нуля} if s=’Green’ then

color:=clGreen else if s=’Red’ then

color:=clRed

else if s=’Blue’ then color:=clBlue;

end;

end;

и OnClick для Button1:

procedure TForm1.Button1Click(Sender: TObject); begin

Close;

end;

4. Запустите проект. При выборе элемента списка цвет области списка будет мгновенно меняться.

Компонент ComboBox объединяет возможности ListBox и Edit. Список значений заполняется через свойство Items, а доступ к выбранному значению

146

списка – через свойство Text типа String. Обращаться к выбранному значению через его номер в списке, например, s:= Items[ItemIndex] уже нет необходимости.

Лабораторная работа: «Работа с графикой. Создание программ с несколькими формами».

Цели работы:

изучить способы представления графики в Delphi;

научиться использовать несколько форм в проекте;

построить свою форму «О программе…».

Технические средства: ПЭВМ с установленной операционной системой

Windows.

Программные средства: Delphi 7.

Теоретическое введение

Windows называют графическим интерфейсом пользователя. Решающее отличие генерации визуальной информации в Windows в том, что вся она – как текст, так и рисунки – выводится в графическом виде. Поэтому текст сам по себе является графическим объектом, свойства которого инкапсулированы в классе Font.

Есть несколько типов выходных устройств, с которыми можно работать при создании графического вывода в Delphi: два наиболее общеупотребительных – это дисплей и принтер.

В Windows есть множество стандартных встроенных элементов интерфейса пользователя, поддержку которых осуществляет Windows. К таким элементам относятся текстовые окна и окна редактирования, окна списков, комбо-окна, линейки прокрутки, кнопки и многое другое. Delphi инкапсулирует стандартные элементы интерфейса Windows в компоненты страницы Standard палитры компонентов.

Объект Canvas

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

Очень важное преимущество использования Canvas в том, что можно пользоваться одной и той же абстракцией для доступа к поверхности рисования как дисплея, так и принтера. При выводе изображений и текста используется Canvas объекта Printer для печати, и Canvas визуального объекта – для вывода на дисплей. Canvas сам по себе является свойством других визуальных объектов Delphi. Вообще говоря, если у объекта есть свойство Canvas, на поверхности этого объекта можно рисовать, достигая при этом различных графических эффектов.

К наиболее важным свойствам класса TCanvas относятся:

147

Pen – для черчения линий;

Brush – для заполнения внутренних областей фигур различными цветами и сетками;

Font – для вывода текста;

Handle – для прямого доступа к контексту устройства Windows при работе с вызовами GDI на низком уровне.

Для того, чтобы упростить рисование графических объектов, Canvas предоставляет различные сокращения для черчения общеупотребительных геометрических фигур – линий, прямоугольников и эллипсов. Ниже приведен обзор наиболее часто используемых методов класса TCanvas, которые позволяют чертить различные фигуры и линии:

Rectangle служит для черчения прямоугольников и квадратов; Ellipse предназначен для черчения эллипсов и окружностей; MoveTo и LineTo используется при черчении прямых линий;

Polygon и PlyLine служат для черчения соответственно многоугольников и ломаных линий, состоящих из нескольких отрезков;

TextOut выводит текст.

Метод TCanvas.Rectangle определяется следующим образом: Tcanvas = class(TPersistent)

. . .

public

. . .

procedure Rectangle(X1, Y1, X2, Y2: Integer);

. . .

end;

Метод Rectangle можно использовать так: TForm1.Canvas.Rectangle(10,10,210,210);

При этом будет начерчен прямоугольник с левым верхним углом в точке (10,10), и правым нижним углом в точке (210,210).

Метод TCanvas.Ellipse определяется следующим образом: TCanvas = class(TPersistent)

. . .

public

. . .

procedure Ellipse(X1, Y1, X2, Y2: Integer);

. . .

end;

Метод Ellipse можно использовать так: TForm1.Canvas.Ellipse(10,10,210,210);

При этом будет начерчен эллипс с большой осью, занимающей пиксели с 10 по 210, и с малой осью с 10 по 210 пиксель.

Для черчения обычных линий можно использовать пару методов MoveTo и LineTo. Для целей рисования линий Canvas поддерживает свойство, называемое текущей позицией пера – PenPos. Можно либо непосредственно устанавливать текущее положение пера, присваивая

148

свойству PenPos величину типа TPoint, либо использовать метод MoveTo для его изменения.

В обоих случаях воображаемое перо переместится в заданную точку поверхности рисования. После этого можно использовать последовательность вызовов метода LineTo для рисования отрезков.

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

TCanvas = class(TPersistent)

. . .

public

. . .

procedure MoveTo(X, Y: Integer); procedure LineTo(X, Y: Integer);

. . .

end;

Два метода - черчениe ломаных (Polyline) линий и многоугольников (Polygon) определяются следующим образом:

TCanvas = class(TPersistent)

. . .

public

. . .

procedure Polygon(Points: array of TPoint); procedure Polyline(Points: array of TPoint);

. . .

end;

Одно из качеств графического интерфейса, подобного Windows, в том, что можно сочетать графику и текст и без усилий выводить и то и другое на одной старице или в одном окне дисплея. Для вывода текста можно пользоваться методом TextOut, определяемым в классе TCanvas. Метод NextOut объявляется следующим образом:

TCanvas = class(TPersistent)

. . .

public

. . .

procedure TextOut(X, Y: Integer; const Text: String);

. . .

end;

Практическая часть 1

Пример программы черчения случайных линий

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

1: procedure TForm1.FormActivate(Sender: TObject);

149

2:begin

3:if Running then

4:Exit;

5:Running :=True;

6:Done :=False;

7:repeat

8:Canvas.Pen.Color := RGB(Random(255), Random(255), Random(255));

9:Canvas.MoveTo(Random(ClientWidth), Random(ClientHeigth));

10:Canvas.LineTo(Random(ClientWidth), Random(ClientHeigth));

11:Application.ProcessMessages;

12:until Done;

13:Ranning := False;

14:end;

Основной цикл, в котором выполняется рисование, расположен в строках с 7 по 12. Для этой цели используется цикл repeat-until. Внутри этого цикла цвет пера устанавливается равным значению генерируемого случайного числа. Значение цвета конструируется из трех базовых компонентов – красного, зеленого и голубого, используемых в стандартной функции RGB. Каждый из этих компонентов независимо генерируется случайным образом с помощью вызова стандартной функции Random.

Строки 9 и 10 задают положение и направление вычерчиваемого на каждой итерации отрезка.

Оператор в строке 11 гарантирует, что при выполнении данного приложения остальная часть Windows не остановится. Вызов Application.ProcessMessages гарантирует, что у других приложений будет шанс получить управление и обработать свои сообщения даже тогда, когда метод FormActivate будет непрерывно вычерчивать случайные линии.

В этом месте надо обратить внимание на то, что когда пользователь приложения будет переключаться с этого приложения на другое и обратно, в ответ на активацию окна будет повторно вызываться метод обработки событий FormActivate. Для того, чтобы каждый раз при этом не начинал работать еще один цикл repeat-until, в форме есть переменная – логический флаг Running. Изначально установленный в False, этот флаг устанавливается в строке 5 в значение True. При каждом следующем входе в подпрограмму проверяется значение этого флага. Если проверка выполняемая в строке 3, возвращает значение True, это означает, что цикл уже выполняется и что нет необходимости начинать выполнение нового цикла. В этом случае в результате выполнения оператора Exit в строке 4 метод немедленно заканчивается, возвращая управление вызвавшему его коду.

Для определения момента, когда надо закончить работу, в цикле в строках с 7 по 12 используется логическая переменная Done. Аналогично ключу Ranning, эта переменная определяется в форме вне метода FormActivate, поскольку по крайней мере еще один метод должен иметь к ней доступ. Для того, чтобы иметь возможность изменить состояние флага

150