Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
https://juliapermanent.ru обучение перманентному макияжу москва.
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

Пользователей: 13,370
новичок: dogoco6
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование интернет кафе на GPSS + Отчет
моделирование процесса поступления заявок в ЭВМ на GPSS + Пояснительная ...
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...

Класс TCanvas
Класс TCanvas представляет собой сложное образование для соз-
дания изображений. Он объединяет в себе устройство графического
интерфейса CDI, инструменты (перо, кисть и шрифт, которые уже рас-
смотрены) и набор методов для рисования простейших геометриче-
ских фигур. Класс TCanvas не является компонентом, а входит в каче-
стве свойства во многие визуальные компоненты: TBitmap, TComboBox,
TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid,
TFileListBox, TForm, Tlmage, TListBox, TOutline, TPaintBox,
TPrinter, TStringGrid.
На канве можно представить наличие невидимого курсора, кото-
рый определяет текущее положение карандаша. Для ряда случаев ри-
сование тех или иных примитивов (например, линии) начинается с
текущего положения этого курсора. Имеются средства установки кур-
сора, в заданное положение. При выполнении некоторых операций
курсор меняет свое положение.
Основные свойства класса TCanvas представлены в табл. 1.4.
Таблица 1.4. Свойства класса TCanvas
Свойства класса TCanvas
Для того чтобы на поверхности объекта появилась картинка (на-
пример, содержимое jpg-файла), текст или графический примитив
(точка, линия, прямоугольник, окружность и т.п.), необходимо к свой-
ству Canvas применить соответствующий метод (табл. 1.5), обеспечи-
вающий отображение иллюстрации, вывод текста или вычерчивание
графического примитива. При отображении фигур контур изображает-
ся карандашом Pen с установленными в нем характеристиками. Если
фигура является замкнутой, ее поверхность закрашивается кистью
Brush с установленными в ней характеристиками. Все тексты изобра-
жаются шрифтом Font с заданными характеристиками. Во время вы-
полнения приложения эти характеристики можно изменять, но эти
изменения должны быть выполнены до того момента, как соответст-
вующий инструмент будет использован для отображения графического
примитива.
Методы вывода графических примитивов рассматривают свойство
Canvas как некоторую поверхность, на которой можно рисовать. Гра-
фическая поверхность состоит из отдельных точек – пикселей. Поло-
жение точки характеризуется горизонтальной и вертикальной коорди-
натами (x, y). Координата (0,0) - это координаты верхнего левого пик-
селя, т.е. верхнего левого угла графической поверхности. Координаты
возрастают сверху вниз и слева направо, то есть значения по оси Оу
увеличиваются вниз экрана (рис. 1.2).
Координаты области вывода
Рис. 1.2. Координаты области вывода
Метод построения графического примитива в общем случае имеет
следующий синтаксис:
Компонент.Canvas.Metod(параметры_метода);
Таблица 1.5. Методы рисования класса TCanvas
Методы рисования класса TCanvas



При построении графических изображений часто используются
классы TPoint и TRect, задающие координаты точки и прямоуголь-
ную область:
TPoint=record
x:Longint;
y: Longint
end;
TRect=record
Case integer of
0:(Left,Top,Right,Bottom: integer);
1:(TopLeft, BottomRight: TPoint)
end
end;



Заполнить поля структуры TRect можно при помощи функции
Bounds, обращение к которой в общем случае имеет вид:
Bounds(x, y, w, h)



где: x и y – координаты левого верхнего угла области; w и h – ши-
рина и высота области.
Пример использования структур TPoint и TRect:
procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2: TPoint;
r1, r2: TRect;
begin
p1.X:=50; p1.Y:=50; //координаты первой точки
p2.X:=100; p2.Y:=100; //координаты второй точки
//Зададим координаты углов прямоугольников
r1:=Rect(p1,p2);
r2:=Rect(10,10,100,100);
with Form1.Canvas do
begin
Brush.Color:=clYellow; //цвет кисти
FillRect(r1); //закрашенный прямоугольник
Pen.Color:=clRed; //цвет пера
MoveTo(p1.X, p1.Y); //перемещение курсора
LineTo(p2.X, p2.Y); //проводим линию
Brush.Color:=clBlue; //цвет кисти
FrameRect(r2) //граница прямоугольника
end
end;



На рис. 1.3 для некоторых методов рисования приведены парамет-
ры, определяющие вид геометрической фигуры.

Рис. 1.3. Значения параметров некоторых методов рисования
Рассмотрим примеры, демонстрирующие работу методов рисова-
ния.
Пример использования метода Polygon для вычерчивания трапеции.
var
//координаты вершин многоугольника
point: array[1..4] of TPoint;
begin
//Координаты первой точки
point[1].X:=50; point[1].Y:=100;
//Координаты второй точки
point[2].X:=100; point[2].Y:=50;
//Координаты третьей точки
point[3].X:=150; point[3].Y:=50;
//Координаты четвертой точки
point[4].X:=200; point[4].Y:=100;
Form1.Canvas.Polygon(point);
end;



Пример использования свойства Pixels. При нажатии на кнопку
Button1 всем точкам формы присваивается свой цвет.
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: longint;
begin
Button1.Visible:=false;
for i:=0 to Form1.Width do
for j:=0 to form1.Height do
Form1.Canvas.Pixels[i,j]:=i+j
end;



Пример появления 200 точек случайного цвета в случайном месте
компоненты Image1

const
countPoint=200; //число точек
var
i, x, y: integer;
begin
randomize;
for i:=1 to countPoint do
begin
x:=Random(Image1.Width);
y:=Random(Image1.Height);
Image1.Canvas.Pixels[x,y]:=RGB(Random(256),
Random(256), Random(256))
end
end;



В рассмотренном примере используется функция RGB, которая
определяет цвет из трёх основных составляющих: красного, зелёного и
синего (значения от 0 до 255).
В следующем примере показано, как скопировать графическое
изображение с инвертированием
:
with Canvas do
begin
CopyMode:=cmNotSrcCopy;
CopyRect(ClientRect, Canvas, ClientRect);
end;



Пример использования методов рисования. При нажатии на кноп-
ку Button2 в случайном месте на форме появляется смайлик.
procedure TForm1.Button2Click(Sender: TObject);
var
x, y: integer; //координаты смайла
begin
randomize;
//случайный выбор координат
x:=random(ClientWidth-60);
y:=random(ClientHeight-60);
with Form1.Canvas do
begin
Pen.Width:=1; //толщина карандаша
Pen.Color:=clBlack; //цвет карандаша
Brush.Color:=clYellow; //цвет кисти
Ellipse(x, y, x+60, y+60); //лицо смайла
Brush.Color:=clWhite; //цвет кисти
Ellipse(x+10, y+15, x+25, y+30); //левый глаз
Ellipse(x+35, y+15, x+50, y+30); //правый глаз
Brush.Color:=clBlack; //цвет кисти
Ellipse(x+15, y+20, x+22, y+25); //левый зрачок
Ellipse(x+40, y+20, x+45, y+25); //правый зрачок
Pen.Color:=clRed; //цвет карандаша
Pen.Width:=3; //толщина карандаша
arc(x+15,y+30,x+45,y+50,x+15,y+40,x+45,y+40) //улыбка
end
end;



Пример использования метода Draw(). Графический файл картин-
ка.bmp рисуется на канве формы Form1 в прямоугольной области с
верхним углом (10, 10).
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap; //фоновая картинка
begin
Bitmap:=TBitmap.Create;//создание объекта – битового образа
//Загрузка битового изображения из файла
Bitmap.LoadFromFile('картинка.bmp');
Form1.Canvas.Draw(10,10,Bitmap);
end;



В рассмотренном примере если после загрузки изображения (на-
жатии на кнопку Button1) свернуть окно и вновь его развернуть, то
картинка не будет изображаться на поверхности формы. Это связано с
тем, что не происходит перерисовка компонента, в который загружает-
ся картинка (в данном случае Form1).
Доступ к графической поверхности объекта (свойству Canvas)
имеет процедура обработки события Paint. Поэтому графику должна
выводить именно она. Событие Paint возникает перед тем, как компо-
нент должен быть перерисован, например, для формы это событие
возникает в начале работы приложения, а также всякий раз, когда окно
или его часть (которая была, например, закрыта другим окном) появ-
ляется на экране. Рисование с помощью методов класса TCanvas в
процедуре FormCreatе не осуществляется, так как в процессе создания
формы (onCreat) связь объекта с Windiws на исполнение ко-
манд/запросов еще не установлена. Поэтому выполнение графики на
форме производится либо в специальной процедуре Events/OnPaint
(объект Form). Либо в других обработчиках событий объектов формы
(например, ButtonClick).
Пример использования обработчика OnPaint. Создадим приложе-
ние, в котором фоновый рисунок загружается из файла. Если размер
загружаемого изображения меньше размера окна, то фоновый рисунок
должен быть растиражирован.
var
Form1: TForm1;
implementation
{$R *.dfm}
var
Bitmap: TBitmap; //фоновая картинка
procedure TForm1.FormCreate(Sender: TObject);
begin
Bitmap:=TBitmap.Create;//создание объекта - битового образа
//Загрузка битового изображения из файла
Bitmap.LoadFromFile('картинка.bmp');
end;
procedure TForm1.FormPaint(Sender: TObject);
var
x, y: integer; //левый верхний угол картинки
begin
x:=0;
y:=0;
while y begin
while x begin
form1.Canvas.Draw(x, y, Bitmap);
x:=x+Bitmap.Width
end;
x:=0;
y:=y+Bitmap.Height
end
end;



Для вывода картинки на канву можно также использовать метод
StretchDraw(), он отличается от метода Draw() тем, что растягивает
или сжимает картинку так, чтобы она заполнила весь указанный пря-
моугольник, например:
implementation
{$R *.dfm}
var
Bitmap: TBitmap; //фоновая картинка
procedure TForm1.FormCreate(Sender: TObject);
begin
Bitmap:=TBitmap.Create; //создание объекта-битового образа
//Загрузка битового изображения из файла
Bitmap.LoadFromFile('картинка.bmp');
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.StretchDraw(Rect(0, 0, Form1.Width, Form1.Height),
Bitmap);
end;

















Опубликовал Kest December 05 2009 22:20:25 · 1 Комментариев · 23036 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
khan7700 April 18 2012 15:37:31
Very nice!!!!
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
DelphiX
База игр
WinPopup
DAlarm
С. Г. Горнаков - ...
C# Учебный курс
ShadelLabel
Пример работы с ф...
CS:Source - монит...
Abc_component
Пример клиента ФТ...
База для Allsubmi...
Киллер окон
Архив Апгрейтов с...
JanReplace
Ehlib
«Философия» прогр...
Globus VCL Extent...
Animated Menus
Архив значков

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97836
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Обработка строк в ...
Содержание сайта -...
Объединенные связи...
Алгоритм Leaky Bucket
Настраиваемый клас...
Различные ограниче...
Еще один замечател...
Инструменты для ра...
Jet casino официал...
Structure too large
Строковый тип данных
Игровые автоматы о...
Управление маркерами
Новейший гибкий O...
Строки в стиле язы...
Лунтик аниматор
Графические данные...
Критические ошибки
Тестирование компо...
seeing(X)
Создание нового са...
Игровые автоматы о...
Повышение информац...
Единственность и и...
Когда начинать обс...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?