Рассмотрим некоторые свойства более подробно.
Стр 1 из 3Следующая ⇒ Объект Canvas Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Сам по себе холст (Canvas) представляет собой поверхность, на которую можно выводить текст и иные графические изображения - линии, прямоугольники, эллипсы и т.д. Но при ближайшем рассмотрении можно увидеть, что этот холст представляет собой плоскость, состоящую из отдельных точек - пикселей. Пиксель - это базовый элемент графического ввода, представляющий собой отдельную точку. Фактически, при рисовании на холсте вы просто закрашиваете его отдельные точки тем или иным цветом. Но, разумеется, работая с холстом посредством методов, предоставляемых классом TCanvas, можно без лишних хлопот выводить не только точки, но и текст, линии, прямоугольники, многоугольники, окружности, и даже готовые изображения. Канва состоит из отдельных точек – пикселей. Положение пикселя характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксель имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо. Значения координат правой нижней точки холста зависят от размера холста. Размер канвы можно получить, обратившись к свойствам Height и Width области иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth. Вид выводимых на канву графических элементов определяется свойствами канвы Pen (карандаш) и Brush (кисть). Свойство Pen отвечает за внешний вид вычерчиваемых линий и контуров, свойство Brush – за заливку областей, ограниченных контурами. На канву можно также загрузить изображение из файла либо вывести на неё текст. Рассмотрим основные свойства и методы объекта Canvas, обратившись к таблице 1. При их рассмотрении имейте в виду, что все геометрические фигуры рисуются текущим пером. Те из них, которые можно закрашивать, закрашиваются с помощью текущей кисти. Кисть и перо при этом имеют текущий цвет.
Таблица 1
Где же найти ту канву, на которой предстоит рисовать? Во-первых, ею снабжены все потомки классов TGraphicControl и TCustomControl, т. е. почти все визуальные компоненты из Палитры компонентов; в том числе и форма. Во-вторых, канву имеет растровая картинка (класс TBitmap); вы можете писать и рисовать не на пустом месте, а на готовом изображении.
Рассмотрим некоторые свойства более подробно. Начнем с Pixels. Это свойство, представляющее собой двумерный массив, содержит информацию о цвете каждой точки поверхности, описывая, таким образом, всю поверхность холста. Изменяя цвет той или иной точки, мы можем выводить изображения. Например, если нам надо изменить цвет точки в левом верхнем углу, мы можем написать такое выражение: Canvas.Pixels[1,1]:=clRed; Здесь мы обратились к 1-му элементу 1-го ряда массива, которой как раз и соответствует левому верхнему углу холста, и назначили ему значение clRed, т.е. установили красный цвет. У каждого пикселя две стандартных координаты: x — расстояние от левой границы холста, y — расстояние от верхней границы. Точка (0,0) — это левый верхний угол. Чтобы узнать или поменять цвет пикселя с координатами (x,y), используют обращение Canvas.Pixels[x,y]. Поскольку с использованием различных методов объекта Canvas можно выводить не только точки, но и различные фигуры, а так же текст, то остальные свойства как раз позволяют настроить параметры вывода этих фигур и текста. Так, для текста используется свойство Font, являющееся, в свою очередь, классом TFont и имеющим такие свойства, как Color (цвет), Name (гарнитура шрифта), Size (размер) и Style (стиль). Последнее свойство имеет 4 флага, позволяющих сделать шрифт полужирным, наклонным, подчеркнутым или зачеркнутым:
Canvas.Font.Color:=clBlue; //шрифт будет синего цвета Canvas.Font.Name:='Arial'; //выбрана гарнитура Arial Canvas.Font.Size:=12; //установлен размер шрифта в 12pt Canvas.Font.Style:=[fsBold,fsItalic]; //шрифт будет полужирным наклонным Что касается таких свойств холста, как Pen и Brush, то для них предусмотрено изменение цвета и стиля линии (для Pen) или заполнения (для Brush). Кроме того, для пера можно определить ширину линии и режим наложения цвета. Соответственно, мы имеем следующие свойства: Color - определяет цвет линии для пера или заполнения для кисти; Style - определяет стиль линии или заливки. Для линии возможны следующие значения: psSolid, psDash, psDashDot, psDashDotDot, psClera и psInsideFrame. Для заливки: bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross; Width - определяет толщину линии в пикселях. Следует учитывать, что изменить стиль линии возможно только в том случае, если ее толщина установлена в 1 пиксель (что, впрочем, является значением по умолчанию). При любом другом значении толщины линия всегда будет сплошной - psSolid. У пера Pen имеется еще одно свойство, которое мы пока не рассматривали. Это свойство — Mode (режим). По умолчанию значение Mode = pmCopy. Это означает, что линии проводятся цветом, заданным в свойстве Color. Но возможны и другие режимы, в которых учитывается не только цвет Color, но и цвет соответствующих пикселей фона. Наиболее интересным из этих режимов является режим pmNotXor — сложение с фоном по инверсному исключающему ИЛИ. Если задан этот режим, то повторное рисование той же фигуры на том же месте канвы убирает ранее нарисованное изображение и восстанавливает цвета пикселей, которые были до первого изображения фигуры. Эту особенность режима pmNotXor можно использовать для создания простенькой анимации. Достаточно нарисовать нечто, затем стереть нарисованное, перерисовать немного измененным — и рисунок будет представляться ожившим. Черчение фигур Чтобы лучше представить себе использование объекта Canvas, попробуем использовать его свойства и методы для рисования фигур. Для начала попробуем вывести простую линию на поверхность формы, для чего создадим новое приложение, щелкнем по автоматически созданной форме (Form1), после чего перейдем в окно инспектора объекта и на закладке Events дважды щелкнем по строке напротив надписи OnClick. В ответ на это Delphi создаст обработчик события FormClick в редакторе кода:
procedure TForm1.FormClick(Sender: TObject); Begin end; Теперь остается поместить в него код, рисующий линию. Поскольку у формы уже имеется свойство Canvas, то будет достаточно просто обратиться к его методам MoveTo и LineTo. Пусть линия начнется в точке со смещением в 10 пикселей от левого верхнего угла по вертикали и горизонтали, и продлится до точки в 200 пикселей по горизонтали. В результате код получится следующим: procedure TForm1.FormClick(Sender: TObject); Begin Form1.Canvas.MoveTo(10,10); Form1.Canvas.LineTo(200,10); end; Теперь остается запустить приложение и щелкнуть по любому месту на форме. Результатом будет вывод тонкой горизонтальной линии. Добавив к коду процедуры вызов метода Ellipse, мы получим построение эллипса, а Rectangle - прямоугольника: Form1.Canvas.Ellipse(30,30,150,150); Form1.Canvas.Rectangle(230,30,350,150); Здесь в обоих случаях мы построили правильные фигуры, т.е. окружность и квадрат. Но поскольку для класса TCanvas не определены методы, строящие именно эти фигуры, то мы использовали методы для построения эллипса и прямоугольника, рассматривая окружность и квадрат как частные случаи этих типов фигур. В то же время, при необходимости можно было бы создать собственные методы, добавив их к классу TCanvas. Сделать это, на самом деле, несложно: достаточно определить новый класс, являющийся наследником TCanvas, и определить для него 2 новых метода. Назовем такой класс TMyCanvas, а методы - Circle и Square: TMyCanvas = class(TCanvas) procedure Circle(Rad, X, Y: integer); procedure Square(Size, X, Y: integer); end; Определение этого класса следует поместить в части interface, непосредственно после определения класса TForm1, которое уже размещено в модуле самой Delphi. В части же implementation мы определим сами эти функции: procedure TMyCanvas.Circle(Rad, X, Y: integer); Begin end; procedure TMyCanvas.Square(Size, X, Y: integer); Begin end; Теперь остается написать код, выполняющий построение фигур. Для начала примем, тот факт, что для метода Circle параметр Rad означает радиус окружности, а параметры X и Y - ее центр. Таким образом, мы можем использовать унаследованный метод Ellipse, подставив нужные параметры в его вызов: Ellipse(X-Rad, Y-Rad, X+Rad, Y+Rad); Что касается метода Square, то его параметр Size будет означать размер стороны квадрата, а X и Y - координаты верхнего левого угла. Таким образом, можно использовать метод Rectangle, указав для него соответствующие параметры: Rectangle(X, Y, X+Size, Y+Size); Теперь, когда методы определены и новый класс готов, следует разобраться с тем, как его использовать. Прежде всего, нам понадобится определить переменную - экземпляр класса. Кроме того, нам понадобится создать ее, использовав конструктор Create. Ну и, наконец, используя свойство Handle (указатель), мы должны связать наш объект с холстом формы. Все это можно разместить во все том же методе обработки щелчка мышкой.
procedure TForm1.FormClick(Sender: TObject); var MC: TMyCanvas; begin MC:=TMyCanvas.Create; // используем конструктор родительского класса MC.Handle:=Canvas.Handle; // назначаем холст окна областью вывода MC.Circle(50,200,100); // рисуем окружность диаметром 50 пикселей MC.Square(50,100,100); // рисуем квадрат со сторонами 50 пикселей MC.Free; end; Разумеется, все методы, доставшиеся классу TMyCanvas в наследство от TCanvas, так же можно использовать, включая те же Create и Free, чем мы и воспользовались. Применительно к остальным свойствам и методам можно делать то же самое, например, установить толщину и цвет линии, вывести линию при помощи MoveTo и т.д.: MC.Pen.Width:=3; MC.Pen.Color:=clRed; MC.MoveTo(10,10); MC.LineTo(200,10); MC.Brush.Style:=bsHorizontal;
Таким образом, можно оформить вывод фигур, при помощи заполнения, штриховкой, а линию сделать толще и изменить ее цвет. Рис. Вывод графики на холст окна
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|