Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»
Рисунок 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 формы, т.к. в момент создания окна с холстом оно еще не появилось на экране.
