Методы объекта Delphi TCanvas: Pixels

TextWidth и TextHeight

Давайте сразу познакомимся еще с двумя методами для работы с текстом — Textwidth и TextHeight. Обоим методам нужно передать какой-нибудь текст и первый из них вернет его ширину, а второй— высоту в пикселах. Эти методы очень удобны, когда нужно выводить форматированный текст.
Допустим, что необходимо вывести две строки текста. Вы можете вывести одну из них, а потом чуть ниже вывести другую. А вот теперь самое интересное— на сколько ниже? Ведь если взять слишком много, то будет большой промежуток, а если слишком мало, то одна строка наедет на другую или попросту ее перекроет. Эти методы позволяют точно узнать длину или высоту текста в зависимости от ис¬пользуемого в данный момент шрифта.
СОВЕТ. Используйте их каждый раз, когда это нужно, и не надейтесь на собственные расчеты, потому что шрифт на разных машинах может выглядеть по-разному. Ба¬нально, но под одним и тем же именем могут прятаться совершенно разные шрифты.

Arc

Следующий метод объекта TCanvas — это Arc, который предназначен для рисо­вания дуги. У него 8 параметров: x1, y1, x2, y2, хз, y3, x4, y4. Как видите, это 4 па­ры координат х и y, которые указывают 4 точки, через которые надо провести дугу.

Copy Rect

Этот метод предназначен для копирования указанного прямоугольника из одно­го объекта TCanvas в другой. У метода три параметра:

  • Dest: TRect — область, указывающая, куда надо копировать;
  • canvas: TCanvas — объект, из которого надо копировать;
  • source: TRect — область, указывающая, откуда надо копировать.

Первый и последний параметры имеют тип TRect. Это простая структура из че­тырех целых чисел— Left, тор, Right, Bottom. Не трудно догадаться, что это координаты прямоугольника. Для создания переменной такого типа лучше всего использовать функцию Rect. Ей нужно передать четыре этих параметра Left, тор, Right, Bottom, и она вернет вам готовую структуру.

Давайте рассмотрим пример и увидим все на практике. Допустим, у нас есть две формы. Мы хотим из второй формы Form2 скопировать все ее содержимое в пер­вую форму Forml. При этом отобразим содержимое второй формы на первой в прямоугольнике размером (10, 10, 110, 110).

Программный код, выполняющий эти действия, будет выглядеть так:

 

 

 

var

SRect, DRect: TRect;// Объявляю две переменные типа TRect

begin

SRect: =Rect (0, 0, Form2. Width, Form2 . Height) ;

DRect:=Rect(10, 10, 110, 110);

Forml.Canvas1.CopyRect(DRect, Form2.Canvas, SRect);

end;

 

В первой строке мы заполняем структуру SRect с помощью функции Rect. При этом указываем полные координаты окна Form2 т. е. (0, о, ширина второй формы, Высота второй формы).

Во второй строке заполняется структура DRect с помощью все той же функции Rect. В принципе, ею можно не пользоваться и заполнять поля, как и для любой другой структуры:

 

DRect.Left:=10;

DRect.Top:=10;

DRect.Right:=110;

DRec t.Bo11om:=110;

 

В этом случае код займет 4 строки, а это уже недостаток. Лучше все записать одной строкой. Чем проще пишете, тем легче потом воспринимается код.

 

И последнее— мы копируем холст второй формы в первую. Сразу надо заме­тить, что если размер области источника больше приемника, то область будет рас­тянута или сжата до размеров приемника. Таким образом, если размеры второй формы больше чем 100x100 (именно в такой квадрат на форме 1 мы хотим скопи­ровать вторую форму), то изображение второй формы будет сжато до размеров 100x100.

 

Иногда можно столкнуться с проблемой, когда в функции уже есть переменная или другая функция с именем Rect. Уж слишком простое имя и в самом VCL ис­пользуется для решения разных задач, поэтому и возникают проблемы. В этом слу­чае компилятор Delphi может запутаться и не сможет определить, что именно вы хотите сейчас использовать. Чтобы помочь компилятору, можно написать перед именем функции имя модуля, где описана функция, например:

SRect: =Classes. Rect (0, 0, Form2 . Width, Fozrn2. Height) ;

Draw

Этот метод тоже предназначен для копирования изображений, но другого фор­мата. У него три параметра: х и y— координаты, куда копировать; объект типа TGraphic, который надо копировать. Этот объект мы еще не рассматривали и узна­ем о нем чуть позже. Тогда и будут примеры с методом Draw. Сейчас необходимо только запомнить, что этот метод не сжимает и не растягивает картинки при копи­ровании, а оставляет их в неизменном виде.

Ellipse

Метод предназначен для рисования эллипса (овала). Есть две его реализации:

procedure Ellipse(XI, Yl, X2, Y2: Integer); procedure Ellipse(const Rect: TRect);

В первом случае нужно передать четыре координаты прямоугольника, в кото­рый будет вписан эллипс. Во втором случае достаточно одного параметра типа TRect (как вы уже знаете, у этой структуры есть все необходимые четыре поля). Какой вы будете использовать — ваше дело. Иногда удобнее один способ, а иногда другой.

FillRect

У этого метода только один параметр— TRect, указывающий область, которую необходимо залить цветом кисти. В принципе, это то же самое, что и нарисовать прямоугольник.

FloodFill

FioodFill — заливка. У этого метода четыре параметра. Первые два — х и y — координаты точки, с которой нужно начинать заливку. Третий параметр— цвет. Последний параметр — способ заливки. Возможны два способа заливки:

  • fsSurface— залить всю область, где цвет равен цвету, указанному в третьем параметре;
  • fsBorder— залить всю область, где цвет не равен цвету, указанному в третьем параметре.

Этих методов пока достаточно. Здесь показаны только основные методы, кото­рые вам могут пригодиться. С ними и многими другими мы познакомимся на прак­тике чуть позже.

dle

Помоги проекту! Расскажи друзьям об этом сайте: