Графические возможности Delphi
Delphi позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации.
Программа выводит графику на поверхность объекта (формы или компонента Image).
Поверхности
объекта соответствует свойство canvas. Для того чтобы вывести на
поверхность объекта графический элемент (прямую линию, окружность,
прямоугольник и т. д.), необходимо применить к свойству canvas этого
объекта соответствующий метод.
Например, инструкция Form1.Canvas.Rectangle (10,10,100,100) вычерчивает в окне программы прямоугольник.
Холст
Как было
сказано ранее, поверхности, на которую программа может выводить графику,
соответствует свойство Canvas. В свою очередь, свойство canvas — это
объект типа TCanvas. Методы этого типа обеспечивают вывод графических
примитивов (точек, линий, окружностей, прямоугольников и т. д.), а
свойства позволяют задать характеристики выводимых графических
примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей;
характеристики шрифта при выводе текстовой информации.
Методы вывода
графических примитивов рассматривают свойство Canvas как некоторый
абстрактный холст, на котором они могут рисовать (canvas переводится как
"поверхность", "холст для рисования"). Холст состоит из отдельных точек
— пикселов.
Положение пиксела характеризуется его горизонтальной
(X) и вертикальной (Y) координатами. Левый верхний пиксел имеет
координаты (0, 0). Координаты возрастают сверху вниз и слева направо.
Значения координат правой нижней точки холста зависят от размера холста.
Координаты точек холста
Размер
холста можно получить, обратившись к свойствам Height и width области
иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth.
Карандаш
Карандаш
используется для вычерчивания точек, линий, контуров геометрических
фигур: прямоугольников, окружностей, эллипсов, дуг и др. Вид линии,
которую оставляет карандаш на поверхности холста, определяют свойства
объекта треп.
Свойство Color задает цвет линии, вычерчиваемой карандашом.
Свойство width задает толщину линии (в пикселах). Например, инструкция Canvas. Pen.
width: =2 устанавливает толщину линии в 2 пиксела.
Свойство
style определяет вид (стиль) линии, которая может быть непрерывной или
прерывистой, состоящей из штрихов различной длины. Толщина пунктирной
линии не может быть больше 1. Если значение свойства Pen.width больше
единицы, то пунктирная линия будет выведена как сплошная.
Свойство
Mode определяет, как будет формироваться цвет точек линии в зависимости
от цвета точек холста, через которые эта линия прочерчивается. По
умолчанию вся линия вычерчивается цветом, определяемым значением
свойства Pen.Color.Однако программист может задать инверсный цвет линии
по отношению к цвету фона. Это гарантирует, что независимо от цвета фона
все участки линии будут видны, даже в том случае, если цвет линии и
цвет фона совпадают.
Кисть
Кисть
(canvas.Brush) используется методами, обеспечивающими вычерчивание
замкнутых областей, например геометрических фигур, для заливки
(закрашивания) этих областей.
Color - Цвет закрашивания замкнутой области
Style - Стиль (тип) заполнения области
Область
внутри контура может быть закрашена или заштрихована. В первом случае
область полностью перекрывает фон, а во втором — сквозь незаштрихованные
участки области будет виден фон.
В качестве значения свойства Color можно использовать любую из констант типа TColor.
Вывод текста
Для вывода текста на поверхность графического объекта используется метод TextOut.
Инструкция вызова метода TextOut в общем виде выглядит следующим образом:
Объект.Canvas.TextOut(x, у, Текст)
где:
объект — имя объекта, на поверхность которого выводится текст;
х, у — координаты точки графической поверхности, от которой выполняется вывод текста
Текст — переменная или константа символьного типа, значение которой определяет выводимый методом текст.
Графика в Visual C++
Описание класса CView
Объекты
класса CView имеют окно, представляющее собой обычную прямоугольную
область экрана, без рамки, меню и других элементов. Вывод в такое окно
(в том числе и текста) производится в графическом виде. При работе с
этим классом очень важны моменты, рассматриваемые ниже.
Сообщение и метод OnDraw
Предположим,
в окне отображен какой-либо рисунок, который затем перекрыт другим
окном, а через некоторое время верхнее окно сдвигается с рисунка. Если
перекрывающее окно небольшое, например, окно меню, то при его закрытии
перекрытая часть восстанавливается системой Windows. В большинстве же
случаев Windows обращается за помощью к владеющему окном приложению и
посылает ему сообщение о необходимости восстановить окно. Дело
разработчика приложения, реагировать на это сообщение или нет. Если
обработка сообщения не предусмотрена, то велика вероятность исчезновения
части рисунка из окна.
Итак, для обеспечения корректного
отображения информации в окне нужна функция, которая будет
перерисовывать содержимое окна всякий раз, когда оно потребуется. Для
этого служит метод OnDraw . В качестве параметра этому методу передается
указатель на контекст устройства, используя который, можно перерисовать
окно.
Графическое устройство и его контекст
Работа
с графическими устройствами, такими, как принтер, плоттер, дисплей в
системе Windows вообще и в Visual C++ в частности является
аппаратно-независимой. Это значит, что при программировании под Windows
средств прямого доступа к аппаратуре нет. Все взаимодействие с ней
производится через функции API (Application Program Interface). При этом
для вывода на графические устройства используется один и тот же набор
функций.
Для того, чтобы определить, на какое устройство
осуществляется вывод, в Windows и в Visual C++ используется понятие
контекста устройства (device context). Далее везде будет рассматриваться
контекст устройства, реализованный в Visual C++. Контекст устройства -
это объект класса CDC, содержащий все методы для построения изображения в
окне. Кроме того, он содержит данные о графическом устройстве вывода.
Для осуществления вывода создается контекст устройства и тем самым
определяется конкретное устройство для вывода. А далее к созданному
объекту можно применять все имеющиеся методы класса CDC.
При
выводе многие параметры долгое время остаются неизменными, например,
цвет линии и другие. Указывать все такие параметры при каждом обращении к
методам вывода неудобно. Контекст устройства содержит целый ряд таких
параметров, обычно их называют атрибутами контекста устройства. Методы
имеют лишь те параметры, что определяют существо их действия, а
остальные атрибуты для рисования берутся из контекста устройства. При
создании контекста устройства его атрибуты устанавливаются по умолчанию.
Затем их можно изменять методами класса CDC.
Поврежденная область и поврежденный прямоугольник
При
работе с окнами обычно "повреждается" только часть окна, так что
перерисовывать все окно неэкономно. Поэтому система Windows фиксирует не
только необходимость перерисовки, но и информацию о поврежденной
области (invalid region). Но более важным является понятие поврежденный
прямоугольник (invalid rectangle) - минимальный прямоугольник,
покрывающий поврежденную область. Windows и Visual C++ обеспечивают
следующие возможности при работе с поврежденным прямоугольником:
Методы
GetUpdateRect и GetUpdateRgn класса CWnd позволяют получить описание
поврежденного прямоугольника и поврежденной области.
Если
производить перерисовку стандартным путем (например, внутри метода
обработки сообщения OnDraw), то рисование в окне результативно только в
области поврежденного прямоугольника. В этом случае говорят, что
поврежденный прямоугольник задает область усечения, вне которой
содержимое окна не изменяется.
Если в момент возникновения
поврежденной области сформированное ранее системой Windows сообщение
WM_PAINT о необходимости перерисовки окна не было обработано приложением
и стоит в очереди приложения, новое сообщение WM_PAINT в очередь не
добавляется. В качестве поврежденной области берется минимальный
прямоугольник, покрывающий одновременно старый и новый прямоугольники.
Методы
Invalidate, InvalidateRect и InvalidateRgn класса CWnd позволяют
объявить соответственно клиентскую область, некоторые прямоугольник и
область окна поврежденными и послать сообщение WM_PAINT в очередь
приложения.
Методы ValidateRect и ValidateRgn класса CWnd
позволяют отменить объявление некоторого прямоугольника или области
поврежденными. Это ведет к корректировке текущего поврежденного
прямоугольника.
При создании окна поврежденный прямоугольник
устанавливается равным клиентской части окна. Обработчик сообщения
Update класса CView также устанавливает поврежденный прямоугольник
равным клиентской части окна.