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 может запутаться и не сможет определить, что именно вы хотите сейчас использовать. Чтобы помочь компилятору, можно написать перед именем функции имя модуля, где описана функция, например:
Draw
Этот метод тоже предназначен для копирования изображений, но другого формата. У него три параметра: х и y— координаты, куда копировать; объект типа TGraphic, который надо копировать. Этот объект мы еще не рассматривали и узнаем о нем чуть позже. Тогда и будут примеры с методом Draw. Сейчас необходимо только запомнить, что этот метод не сжимает и не растягивает картинки при копировании, а оставляет их в неизменном виде.
Ellipse
Метод предназначен для рисования эллипса (овала). Есть две его реализации:
В первом случае нужно передать четыре координаты прямоугольника, в который будет вписан эллипс. Во втором случае достаточно одного параметра типа TRect (как вы уже знаете, у этой структуры есть все необходимые четыре поля). Какой вы будете использовать — ваше дело. Иногда удобнее один способ, а иногда другой.
FillRect
У этого метода только один параметр— TRect, указывающий область, которую необходимо залить цветом кисти. В принципе, это то же самое, что и нарисовать прямоугольник.
FloodFill
FioodFill — заливка. У этого метода четыре параметра. Первые два — х и y — координаты точки, с которой нужно начинать заливку. Третий параметр— цвет. Последний параметр — способ заливки. Возможны два способа заливки:
- fsSurface— залить всю область, где цвет равен цвету, указанному в третьем параметре;
- fsBorder— залить всю область, где цвет не равен цвету, указанному в третьем параметре.
Этих методов пока достаточно. Здесь показаны только основные методы, которые вам могут пригодиться. С ними и многими другими мы познакомимся на практике чуть позже.