Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Компонент Канва (класс TCanvas)




Класс создает Канву – холст для рисования (поверхность для рисования). Рисование выполняется с помощью свойств и методов, входящих в класс TCanvas.

Свойства:

Brush:TBrush – кисть;

Pen:TPen – перо;

Font:TFont – шрифт;

PenPos:TPoint – определяет текущее положение пера над холстом в пикселях относительно левого верхнего угла;

CopyMode:TCopyMode – способ взаимодействия растрового изображения с цветом фона, используется при копировании части канвы на другую методом CopyRect:

       cmBlackness – заполнение черным цветом,

       cmDestInvert – заполнение инверсным фоном,

       cmSrcCopy – копирует изображение источника на канву и т.д.;

Pixels[X,Y:Integer]:TColor – массив пикселей канвы.

 Методы:

procedure MoveTo(X,Y:Integer) – перемещает перо в указанную точку;

procedure LineTo(X,Y:Integer)– чертит линию из текущей точки в заданную;

procedure Rectangle(X1, Y1, X2, Y2: Integer)– рисует и закрашивает кистью прямоугольник;

procedure Polyline(Points:array of TPoint)– рисует ломаную линию;

procedure Polygon(Points: array of TPoint)– рисует и закрашивает кистью многоугольник;

procedure Ellipse(X1, Y1, X2, Y2: Integer)– рисует эллипс в заданном прямоугольнике и закрашивает кистью;

procedure FrameRect(const Rect:TRect) – очерчивает границы прямоугольника текущей кистью без заполнения;

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 Pie(X1,Y1,X2,Y2,X3,Y3, X4,Y4:integer) – чертит сектор эллипса в прямоугольнике (X1,Y1,X2,Y2), направление – против часовой стрелки;

procedure RoundRect(X1,Y1,X2,Y2, X3,Y3:integer) – чертит и заполняет прямоугольник с закругленными краями

procedure FillRect(const Rect: TRect)– закрашивает кистью прямоугольник, включая левую и верхнюю границы.

type TRect = record

case Integer of

       0: (Left, Top, Right, Bottom: Integer);

        1: (TopLeft, BottomRight: TPoint);

end;

procedure FloodFill(X,Y:Integer;Color:TColor;FillStyle:TFillStyle)– заливка области, зависит от типа TFillStyle.

 

type TFillStyle = (fsSurface,fsBorder);

FillStyle=fsBorder -заливка области с границей цвета Color;

FillStyle=fsSurface - заливка области цвета Color цветом,                                       определенным кистью.

procedure TextOut(X,Y:Integer; const Text:string)– вывод строки текста шрифтом TFontв прямоугольник с верхним левым. углом в точке (X,Y);

function TextExtent(Const Text:String):TSize – возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text;

function TextWidth(Const Text:string):Integer – возвращает ширину прямоугольника, охватывающего текстовую строку;

5.3 Пример построения графического изображения

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

Для рисования закрашенного прямоугольника необходимо отметить первый угол нажатием левой кнопки мыши. Второй угол фиксируется в момент отпускания левой кнопки. Пока кнопка нажата, за курсором мыши должен тянуть контур.

                          Рисунок 10 – Вид основной формы редактора

program Draw;

uses

Forms, MainUnit in 'MainUnit.pas' {MainForm};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm (TMainForm, MainForm);

Application.Run;

end.

 

unit MainUnit;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls,

          Forms, Dialogs, StdCtrls, ExtCtrls;

type

TMainForm = class(TForm)

ImagePole:TImage; {поле рисования}

ExitButton: TButton; {кнопка выхода}

     procedure FormActivate(Sender: TObject);

procedure ImagePoleMouseDown(Sender: TObject;

             Button: TMouseButton;Shift: TShiftState; X, Y: Integer);   

                {установка начальной точки} 

   procedure ImagePoleMouseMove(Sender: TObject;

              Shift: TShiftState; X, Y:Integer);{тянем контур,

               пока мышь движется с нажатой кнопкой}

procedure ImagePoleMouseUp(Sender: TObject;

              Button: TMouseButton;Shift: TShiftState; X,Y:Integer );     

             {завершаем рисование прямоугольника}

procedure ExitButtonClick(Sender: TObject);

end;

 

var MainForm: TMainForm;

 

implementation

Var Rect:TRect;first:boolean;

{$R *.DFM}

 

procedure TMainForm.FormActivate(Sender: TObject);

begin ImagePole.Canvas.Brush.Color:=clWhite end; {Установка

                                                                                                     белого цвета фона}

end;

 

procedure TMainForm.ImagePoleMouseDown(Sender: TObject;

   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin     {Координаты первой точки}

if Button=mbLeft then

         begin Rect.Left:=x;    

                                 Rect.Top:=y;    

                                first:=true;     

         end;

end;

 

procedure TMainForm.ImagePoleMouseMove(Sender: TObject;

                            Shift: TShiftState; X, Y: Integer);

begin

 if ssLeft in Shift then

begin

if first then first:=not first

    else

      begin

       ImagePole.Canvas.Pen.Color:=clWhite; {Белое перо}

       ImagePole.Canvas.Rectangle(Rect.Left,Rect.Top,

                                                         Rect.Right,Rect.Bottom);{Стираем}

      end;

Rect.Right:=X; {Меняем координаты}

Rect.Bottom:=Y;

ImagePole.Canvas.Pen.Color:=clBlack;{Черное перо}

ImagePole.Canvas.Rectangle(Rect.Left,Rect.Top,

                                                           Rect.Right,Rect.Bottom);{Рисуем}

end;

end;

 

procedure TMainForm.ImagePoleMouseUp(Sender: TObject;

           Button: TMouseButton; Shift: TShiftState; X,Y:Integer);

begin

if Button=mbLeft then

   begin

     ImagePole.Canvas.Pen.Color:=clWhite; {Белое перо}

     ImagePole.Canvas.Rectangle(Rect.Left,Rect.Top,

                                   Rect.Right,Rect.Bottom); {Стираем}

     Rect.Right:=X;{Меняем координаты}

     Rect.Bottom:=Y;

     ImagePole.Canvas.Brush.Color:=clRed; {Красная кисть}

      {Рисуем последний вариант - красный прямоугольник}        

ImagePole.Canvas.FillRect(Rect);

     ImagePole.Canvas.Pen.Color:=clBlack; {Черное перо}

  end;

end;

 

procedure TMainForm.ExitButtonClick(Sender: TObject);

begin

Close;

end;

 

end.

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 265.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...