Можливості графіки в системі Delphiреалізовані через так званий дескриптор контексту графічного пристрою DC і три його інструменти -шрифт, перо, пензель. Відповідно до цього в Delphiстворені класи, що дають змогу використовувати графічні інструменти Windows: для контексту - клас TCanvas, для шрифту - TFont, для пера - ТРеп, для пензля --TBrush. Пов'язані з цими класами об'єкти автоматично створюються для всіх видимих елементів і стають доступними "через властивості Canvas, Font, Pen, Brush.
Canvas(канва, полотно) - це площа видимого елемента, на якій можна малювати. Вона є однією з властивостей видимого елемента, Font, Penта Brushє підвластивостями в Canvas.
Pen (перо) - це лінія, яка виділяє зовнішній контур фігури. Можна задавати товщину, колір, вигляд (тип) такої лінії.
Brush(пензель) - це площина фігури, тобто внутрішня від контура частина. Можна задавати колір площини фігури та спосіб зафарбовування, наприклад, горизонтальними чи діагональними лініями.
Font-• використовують для вибирання шрифтів, які застосовують під час виведення тексту за допомогою методів TextOut або TextRect об'єкта Canvas.
У процесі розробки проекту властивість Canvasнедоступна у вікні Object Inspector.Щоб використати Canvas,треба писати оператори, які присвоюють властивостям Canvasнеобхідні значення та викликають методи Canvas.Наприклад, щоб намалювати на формі голубий прямокутник, заповнений жовтими діагональними штрихами, треба ввести в опрацювання події форми OnPaintтакі оператори:
With Canvas do {малюватимемо на полотні форми}
begin
Pen.Color:=clBlue; {колір ліній-'- Голубий}
Brush.Color:=clYellow; {колір зафарбовування - жовтий}
Brush.Style:=bsDiagCross; {спосіб зафарбовування -
діагональні лінії} Rectangle(10,10,100,100);
end;
Не всі компоненти мають властивість Canvas,наприклад, її не мають панелі - компоненти типу ТРапеІ. Однак і на таких компонентах можна малювати, розмістивши на них спеціальну компоненту типу TPaintBox, яка власне і призначена для малювання. Крім того, об'єкти PaintBox можна використовувати для обмеження на формі чи на деякій компоненті ділянки малювання одним чи декількома прямокутниками. Коротка характеристика властивостей та методів Клас ТРеп:
Color - колір лінії;
Width- товщина лінії в пікселях;
Style - стиль (зображення) лінії;
Mode- метод малювання лінії, тобто спосіб накладання кольору
лінії на поверхню. Клас Tj3rush:
Color- колір зафарбовування;
Style - спосіб зафарбовування внутрішньої площини фігури. Клас TFont;
Name- назва шрифту, наприклад, АгіаІ;
Style- стиль шрифту: грубий, курсив, підкреслений, перекреслений; Color- колір шрифту; Size- розмір шрифту в пунктах. Клас TCanvas:
Pen, Brush, Font-визначено вище;
Pixelsт двовимірний масив точок для доступу до окремих пікселів
об'єкта Canvas.
Крім того, є низка методів для малювання різноманітних фігур:» Arc, Chord, Ellipse, LineTo, FillRect, Draw, Polygon, Rectangle тощо.
Приклад 1. Вивчити можливості малювання ліній та фігур'у графічній підсистемі Delphi -стилі та кольори ліній, кольори та способи зафарбовування площини фігур. Малювати на формі, яка не містить жодних компонент, у процедурі опрацювання події форми OnPaint.
Наприклад, створити таку композицію'малюнка та геометричних фігур, як показано на рис.1

Рис.1 Приклад графічної композиції
Нижче наведено приклад реалізації цього завдання. Варто звернути увагу на спосіб, за~яким на форму можна виводити готові' Малюнки- фотографії, схеми тощо, підготовлені попередньо в Bmp-файлах. Фотографія, зображена на рис.1, була зісканована та переписана у файл у форматі Вmр.
unit Unitl;
interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForml= class(TForm)
procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject);
private (Private declarations}
gr: TBitmap; {для запам'ятовування малюнка з файлу}
public
{Public declarations) end;
var
Forml: TForml;
implementation
{$R*.DFM}
procedure TForml:.FormPaint(Sender: TObject) ;
{метод виконується у випадку„кожного перемальовування
форми}
var
a: integer; R: TRect;
begin
With Canvas do :
begin
Pen.Color:=clBlue; {спочатку визначаємо кольори та.
стиль зафарбовування} Brush.Color:=clYellow; Brush.Style:=bsDiagCross; ,
for a:=l to 5 do {малюємо п'ять прямокутників, визначаючи їхнє розташування та розміри}
Rectangle((а-І)*100+10,25,а*100,115); Brush.Style:=bsSolid; '{тепер змінюємо стиль, не
змінюючи кольорів}
for a:=l to 5 do {малюємо п'ять еліпсів}
Ellipse((а-1)*100+10,140,а*100,200); {вивести в нижній частині форми готовий малюнок}
.R.Left:=30; R.Right:=370;
R.Top:=220; R.Bottom:=450;
StretchDraw(R,gr); {цей метод переносить малюнок у межі
заданого прямокутника R}
end;
end;
procedure TForml.FormCreate(Sender: TObject); {метод виконується один раз під час першого створення
форми)
begin
gr:=TBitmap.Create; (створюємо об'єкт для картинки} //і завантажуємо файл з картинкою з поточного каталогу
gr.LoadFromFile('Univerl.bmp'); {для завантаження є готовий метод}
end;
procedure TForml.FormDestroy(Sender: TObject) ;
(метод виконується один раз під час остаточного закриття форми - закінчення роботи}
begin
gr.Free; //вивільнити пам'ять у разі закінчення роботи
end;
end.
Приклад 2 (для самостійного виконання). Придумати та вивести на форму складніший малюнок, який би складався з геометричних фігур. Фігури зафарбовувати різними кольорами та способами. Для цього треба переглянути довідкову систему Delphi і відшукати там перелік назв кольорів, стилів ліній, способів зафарбовування, а також перелік методів Canvas для безпосереднього малювання.
Приклад 3 (для самостійного виконання). Підібрати три готові Bmp-файли. Розташувати на формі шість кнопок - по дві на кожен Втр-файл. У разі натискання на одну кнопку картинка з Bmp-файлу повинна виводитися на форму, а внаслідок натискання на іншу - стиратися. Картинки повинні виводитися незалежно одна від одної.
Приклад 4 (для самостійного виконання). Розділивши умовно форму приблизно навпіл, розташувати на ній дві компоненти типу TPaintBox. Малювати не на формі безпосередньо, а на об'єктах PaintBox. На кожному з двох таких об'єктів виконувати малювання після клацання на цьому об'єкті мишкою (подія OnClick). У разі подвійного клацання на об'єкті (подія OnDblClick) малюнок повинен стиратися.