Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №20.pdf
Скачиваний:
19
Добавлен:
16.03.2015
Размер:
738 Кб
Скачать
☆

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 4 – Редактор «Picture Editor»

Разместите и настройте компоненты на форме как показано на рисунке 5.

Рисунок 5 – Окно "О программе"

Установите значение свойства BorderStyle формы (frmAbout) равным bsDialog. Теперь размер формы нельзя изменять (во время прогона программы) с помощью мыши. Установите значение свойства Position формы frmAbout равным poMainFormCenter, то приведет к тому, что при вызове окна оно будет центрироваться относительно главного окна программы. Создайте обработчик для кнопки btnOk, закрывающий форму.

В форму frmImageView добавьте обработчик события OnKeyDown (листинг 2).

Листинг 2 – Обработка нажатия клавиши F1

procedure TfrmImageView.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState); begin

//если нажата клавиша F1, то показать окно "О программе" if Key=vk_F1 then frmAbout.ShowModal;

end;

Запустите программу. Нажмите клавишу «F1» должно появиться окно «О программе».

Класс TCanvas

Этот класс создает холст, на котором можно рисовать чертежными инструментами – пером, кистью и шрифтом. Поверхности, на которую программа может выводить графику,

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

соответствует свойство Canvas. Объекты класса TCanvas автоматически создаются для всех видимых компонентов, которые должны уметь нарисовать себя. Они инкапсулируют объекты TFont, TPen, TBrush, а также многочисленные методы, использующие эти объекты.

Свойства класса указаны в таблице 2.

Таблица 2 – Свойства класса TCanvas

Свойство

Описание

 

 

property AutoSize:Boolean;

Разрешает/запрещает изменять размеры

 

компонента так, чтобы в нем полностью

property Brush: TBrush;

Объект-кисть.

property ClipRect: TRect;

Определяет текущие размеры области,

 

нуждающейся в прорисовке.

property CopyMode: TCopyMode;

Устанавливает способ взаимодействия растрового

 

изображения с цветом фона.

property Font: TFont;

Объект-шрифт.

property Pen: TPen;

Объект-перо.

property PenPos: TPoint;

Определяет текущее положение пера в пиксела

 

относительно левого верхнего угла канвы

property Pixels[x, y: Integer]: TColor;

Массив пикселов канвы

 

 

Свойство CopyMode используется при копировании части одного холста (источника) в другой (приемник) методом СopyRect и может иметь одно из значений приведенных в таблице 3.

Таблица 3 – Режимы копирования холста

Константа

cmBlackness cmDestInvert cmMergeCopy

cmMergePaint

cmNotSrcCopy cmNotSrcErase

cmPatCopy cmPatInvert

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Константа

cmPatPaint

cmSrcAnd

cmSrcCopy

cmSrcErase

cmSrcInvert

cmSrcPaint

cmWhitness

Холст состоит из отдельных точек – пикселов. С помощью свойства Pixels все пиксели холста представляются в виде двумерного массива точек с нулевой нижней границей по каждому измерению. Положение пиксела характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо. Значения координат правой нижней точки холста зависят от размера холста.

Изменяя цвет пикселов, можно прорисовывать изображение по отдельным точкам. Методы класса TCanvas перечислены в таблице 4.

Таблица 4 – Методы класса TCanvas

Метод

Описание

 

 

procedure Arc (x1, y1, x2, y2, x3, y3,

Чертит дугу эллипса в охватывающем

x4, y4: Integer);

прямоугольнике (x1,y1) – (x2, y2). Начало дуги

procedure Chord (x1, y1, x2, y2, x3, y3 ,

Чертит сегмент эллипса в охватывающем

x4, y4: Integer);

прямоугольнике (x1,y1) – (x2, y2). Начало дуги

procedure CopyRect (Dest: TRect;

Копирует изображение Source канвы Canvas в

Canvas: TCanvas; Source: TRect);

участок Dest текущей канвы

procedure Draw(x, y: Integer; Graphic:

Осуществляет прорисовку графического объекта

TGraphic);

Graphic так, чтобы левый верхний угол объекта

procedure DrawFocusRect (const Rect:

Прорисовывает прямоугольник с помощью

TRect);

операции xor, поэтому повторная прорисовка

procedure Ellipse(x1, y1, x2, y2:

Чертит эллипс в охватывающем прямоугольнике

Integer);

(x1,y1) – (x2, y2). Заполняет внутреннее

procedure FillRect (const Rect: TRect);

Заполняет текущей кистью прямоугольную

 

область Rect, включая ее левую и верхнюю

procedure FloodFill(x, y: Integer; Color:

Производит заливку канвы текущей кистью.

TColor; FillStyle: TFillStyle);

Заливка начинается с точки (x, y) и

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Метод

Описание

 

 

procedure FrameRect (const Rect:

Очерчивает границы прямоугольника Rect

TRect);

текущей кистью толщиной в 1 пиксел без

procedure LineTo(x, y: Integer);

Чертит линию от текущего положения пера до

 

точки (x, y)

procedure MoveTo(x, y: Integer);

Перемещает перо в положение (x, y) без

 

вычерчивания линий

procedure Pie(x1, y1, x2, y2, x3, y3 , x4,

Рисует сектор эллипса в охватывающем

y4: LongInt);

прямоугольнике (x1,y1) – (x2, y2). Начало дуги

procedure Polygon (Points: array of

Вычерчивает пером многоугольник по точки

TPoint);

заданным в массиве Points. Конечная точка

procedure Polyline (Points: array of

Вычерчивает пером ломаную прямую по точкам

TPoint);

заданным в массиве Points

procedure Rectangle(x1, y1, x2, y2:

Вычерчивает и заполняет прямоугольник (x1,y1) –

Integer);

(x2, y2). Для вычерчивания без заполнения

procedure Refresh;

Устанавливает в канве шрифт, перо и кисть

 

принятые по умолчанию

procedure RoundRect(x1, y1, x2, y2, x3,

Вычерчивает и заполняет прямоугольник (x1,y1) –

y3: Integer);

(x2, y2) со скругленными углами. Прямоугольник

procedure StretchDraw (const Rect:

Вычерчивает и при необходимости масштабирует

TRect; Graphic: TGraphic);

графический объект Graphic так, чтобы он

function TextExtent (const Text: String):

Возвращает ширину и высоту прямоугольника,

TSize;

охватывающего текстовую строку Text

function TextHeight (const Text:

Возвращает высоту прямоугольника,

String): Integer;

охватывающего текстовую строку Text

procedure TextOut(x, y: Integer; const

Выводит текстовую строку Text так, чтобы левый

Text: String);

верхний угол прямоугольника, охватывающего

procedure TextRect (Rect: TRect; x, y:

Выводит текстовую строку Text так, чтобы левый

Integer; const Text: String);

верхний угол прямоугольника, охватывающего

function TextWidth (const Text: String):

Возвращает ширину прямоугольника,

Integer;

охватывающего текстовую строку Text

Обратите внимание на то, что создаваемые на канве изображения безвозвратно теряются при перемещении окна программы, его перекрытии другими окнами, при изменении размеров окна или канвы. Поэтому необходимо выносить прорисовку изображения в отдельную подпрограмму и вызывать ее в обработчиках событий OnActivate и OnResize. Кроме того, при рисовании на холсте игнорируется свойство Visible компонента. Также нельзя прорисовывать изображение в обработчике OnCreate формы, т.к. в момент создания окна с холстом оно еще не появилось на экране.