Как сделать ластик в делфи
Графические возможности Delphi: Холст, карандаш, кисть
Холст
Как было сказано ранее, поверхности, на которую программа может выводить графику, соответствует свойство Canvas. В свою очередь, свойство canvas — это объект типа TCanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т. д.), а свойства позволяют задать характеристики выводимых графических примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации.
Методы вывода графических примитивов рассматривают свойство canvas как некоторый абстрактный холст, на котором они могут рисовать (canvas переводится как «поверхность», «холст для рисования»). Холст состоит из отдельных точек — пикселов. Положение пиксела характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо (рис. 10.1). Значения координат правой нижней точки холста зависят от размера холста.
Размер холста можно получить, обратившись к свойствам Height и width области иллюстрации (image) ИЛИ К свойствам формы: ClientHeight И ClientWidth.
Художник в своей работе использует карандаши и кисти. Методы, обеспечивающие вычерчивание на поверхности холста графических примитивов,тоже используют карандаш и кисть. Карандаш применяется для вычерчивания линий и контуров, а кисть — для закрашивания областей, ограниченных контурами.
Карандашу и кисти, используемым для вывода графики на холсте, соответствуют свойства Реп (карандаш) и Brush (кисть), которые представляют собой объекты типа треп и TBrush, соответственно. Значения свойств этих объектов определяют вид выводимых графических элементов.
Карандаш
Карандаш используется для вычерчивания точек, линий, контуров геометрических фигур: прямоугольников, окружностей, эллипсов, дуг и др.
Вид линии, которую оставляет карандаш на поверхности холста, определяют свойства объекта треп, которые перечислены s табл.10.1:
Свойство color задает цвет линии, вычерчиваемой карандашом. В табл. 10.2 перечислены именованные константы (тип TColor), которые можно использовать в качестве значения свойства color.
Таблица 10.2. Значение свойства Color определяет цвет линии
Свойство width задает толщину линии (в пикселах). Например, инструкция Canvas. Pen. width: =2 устанавливает толщину линии в 2 пиксела. Свойство style определяет вид (стиль) линии, которая может быть непрерывной или прерывистой, состоящей из штрихов различной длины.
В табл. 10.3 перечислены именованные константы, позволяющие задать стиль линии. Толщина пунктирной линии не может быть больше 1. Если значение свойства Pen.width больше единицы, то пунктирная линия будет выведена как сплошная.
Таблица 10.3. Значение свойства Реn. туре определяет вид линии
Свойство Mode определяет, как будет формироваться цвет точек линии в зависимости от цвета точек холста, через которые эта линия прочерчивается. По умолчанию вся линия вычерчивается цветом, определяемым значением свойства Реп. Color.
Однако программист может задать инверсный цвет линии по отношению к цвету фона. Это гарантирует, что независимо от цвета фона все участки линии будут видны, даже в том случае, если цвет линии и цвет фона совпадают.
В табл. 10.4 перечислены некоторые константы, которые можно использовать в качестве значения свойства Pen.Mode.
Таблица 10.4. Значение свойства Реп. Mode влияет на цвет линии
Кисть
Кисть (canvas. Brush) используется методами, обеспечивающими вычерчивание замкнутых областей, например геометрических фигур, для заливки(закрашивания) этих областей. Кисть, как объект, обладает двумя свойствами, перечисленными в табл. 10.5.
Таблица 10.5. Свойства объекта Tbrush (кисть)
Область внутри контура может быть закрашена или заштрихована. В первомслучае область полностью перекрывает фон, а во втором — сквозь не заштрихованные участки области будет виден фон.
В качестве значения свойства color можно использовать любую из констант типа TColor (см. список констант для свойства Pen. Color в табл. 10.2). Константы, позволяющие задать стиль заполнения области, приведены в табл. 10.6.
Таблица 10.6. Значения свойства Brush. style определяют тип закрашивания
В качестве примера в листинге 10.1 приведена программа Стили заполнения областей, которая в окно (рис. 10.2) выводит восемь прямоугольников, закрашенных черным цветом с использованием разных стилей.
Свойства карандаша в Delphi
Теперь давайте напишем пример, в котором увидим свойства карандаша в действии. Создайте новое приложение. Создайте обработчик события OnPaint и напишите в нем код, представленный в листинге:
procedure TForm1.FormPaint(Sender: TObject);
//Рисуем сплошную линию (psSolid)
//Рисуем psDash линию
//Рисуем psDash линию
//Рисуем psDashDot линию
//Рисуем psDashDotDot линию
//Рисуем psClear линию
//Рисуем psInsideFrame линию
Результат работы программы вы можете увидеть на рис.
В данном примере по событию onPaint (когда надо перерисовать форму) поочередно рисуются линии разного стиля. Для этого сначала выбирается нужный стиль (например, Canvas.Pen.Style:=psSolid выбирает стиль сплошной линии).
Потом перемещается карандаш в точку начала линии— canvas.MoveTo(х, y). Meтод MoveTo перемещает карандаш в позицию, указанную в качестве параметров х и у. При перемещении не происходит никакого рисования на холсте (canvas), х и y—это не сантиметры и не миллиметры, а количество пикселов (количество экранных точек).
Отсчет координаты х идет слева. Это значит, что левая сторона окна равна нулевой позиции х, а правая сторона окна—это максимальное значение. Но это не означает, что х не может быть отрицательным или больше максимума. Вы без проблем можете указывать любые значения, только нужно учитывать, что часть линии может уйти за пределы окна.
Отсчет координаты y идет сверху. Верхнее обрамление окна является нулевой точкой y. При этом заголовок окна (с названием формы и системными кнопками) не входит в пространство клиентской области окна.
После прорисовки первой линии выбираем следующий стиль и перемещаемся в позицию на 20 пикселов ниже уже нарисованной линии. После этого рисуем следующую линию.
Теперь добавим в нашу программу возможность смены цвета карандаша. Для этого установим на форму кнопку с надписью «Изменить цвет» и компонент coiorDialog с вкладки Dialogs. Компонент coiorDialog предназначен для отображения стандартного диалога выбора цвета. На форме он будет выглядеть в качестве простого квадратика с пиктограммой и при запуске не будет виден.
Для события onclick кнопки напишем следующий код:
if ColorDialogl.Execute then
В первой строке кода отображается окно выбора цвета (ColorDialog1. Execute). Если пользователь выбрал цвет и не нажал ОК (нажал отмену или нажал кнопку крестика в заголовке), то окно возвращает значение false. Поэтому мы проверяем, если результат показа окна равен true, то изменить цвет:
Напоминаю, что по умолчанию конструкция if проверяет указанный код на равенство true, если не указано обратное. В связи с этим эту же конструкцию можно было бы записать так:
Результат выбранного цвета записывается в свойство color компонента ColorDialogl. Именно его мы и присваиваем цвету карандаша canvas.Pen.color. После этого нужно только перерисовать рисунок. Для этого явно вызывается процедура— обработчик события OnPaint формы. У нас обработчик называется FormPaint, именно его и необходимо вызывать.
Можете запустить программу и проверить результат работы смены цветов линий.
Теперь добавим возможность выбора толщины линии. Для этого установим компонент upDown с вкладки Win32. Для события onclick этого компонента напишем следующий код:
procedure TFormi.UpDownlClick(Sender: TObject; Button: TUDBtnType);
После этого вызывается метод главной формы Repaint. Этот метод генерирует событие о том, что надо перерисовать содержимое окна. Это значит, что будет автоматически вызван обработчик события onPaint. Результат тот же, что и просто вызов напрямую обработчика, как это делалось после смены цвета. Но такой способ считается более правильным.
Программирование на Delphi. Часть 1. Установка Delphi Community Edition (бесплатная версия)
Компания Embarcadero в 2018 году представила Delphi Community Edition — бесплатную версию легендарной среды разработки Delphi. Использовать её могут студенты, стартаперы, небольшие команды, некоммерческие организации. Условия использования: лицензия на использование продолжает действовать до тех пор, пока прибыль физического лица или компании от приложений Delphi не достигнет 5 000 долларов США, или штат команды разработчиков не превысит 5 человек.
С помощью Delphi Community Edition можно разрабатывать мультиплатформенные приложения на Windows, Android, iOS и macOS. В этой статье мы пошагово пройдём процесс установки среды и напишем тестовое приложение под Windows. Delphi всегда был инструментом для быстрого старта в разработке под Windows на языке Pascal, это мы сегодня и проверим.
Примерное время установки: около 40-60 минут.
1. Скачивание бесплатной версии Delphi
Для того, чтобы получить доступ к Delphi Community Edition, пройдите по этой ссылке https://www.embarcadero.com/ru/products/delphi/starter/free-download
Заполните форму, введенный пароль сохраните. В качестве компании я указал один из своих сайтов, телефон реальный, но мне никто пока что не звонил :). Главное: правильно укажите электронную почту.
На почту вам придёт письмо с ключом — его лучше сохранить. После отправки формы начнётся процесс загрузки. Если загрузка не начнётся, ссылка будет также в письме. Письмо вам необходимо — если оно не пришло, проверяйте спам. Если вообще не пришло, регистрируйтесь заново на другой ящик. Я регистрировался дважды на разные email — один на доменную почту, второй на Gmail. Оба раза всё было ок. Вот как выглядит письмо:
2. Установка Delphi Community Edition
Введите Serial number из письма в почте и нажмите Register.
Программа начнёт связываться с серверами Embarcadero и попытается зарегистрировать вашу копию. На одном компьютере у меня всё произошло мгновенно, на другом с третьей попытки. Судя по сообщениям, проблема была с серверами Embarcadero. Если всё получилось, переходите к следующему разделу статьи. Если нет, попробуйте сделать следующее. На скриншоте ниже кликните по ссылке «Trouble connection…»
Графические возможности Delphi: Текст, линия, окружность
Вывод текста
Шрифт, который используется для вывода текста, определяется значением свойства Font соответствующего объекта Canvas. Свойство Font представляет собой объект типа TFont. В табл. 10.7 перечислены свойства объекта TFont, позволяющие задать характеристики шрифта, используемого методами Textout и TextRect для вывода текста.
Таблица 10.7. Свойства объекта TFont
Внимание!
Область вывода текста закрашивается текущим цветом кисти. Поэтому перед выводом текста свойству Brush.Color нужно присвоить значение bsciear или задать цвет кисти, совпадающий с цветом поверхности, на которую выводится текст.
Следующий фрагмент программы демонстрирует использование функции TextQut для вывода текста на поверхность формы:
После вывода текста методом Textout указатель вывода (карандаш) перемещается в правый верхний угол области вывода текста.
Иногда требуется вывести какой-либо текст после сообщения, длина которого во время разработки программы неизвестна. Например, это может быть слово «руб.» после значения числа, записанного прописью. В этом случае необходимо знать координаты правой границы уже выведенного текста. Координаты правой границы текста, выведенного методом Textout, можно получить, обратившись к свойству EenPos.
Следующий фрагмент программы демонстрирует возможность вывода строки текста при помощи двух инструкций Textout.
Линия
Вычерчивание прямой линии осуществляет метод LineTo, инструкция вызова которого в общем виде выглядит следующим образом:
Метод LineTo вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.
Начальную точку линии можно задать, переместив карандаш в нужную точку графической поверхности. Сделать это можно при помощи метода MoveTo, указав в качестве параметров координаты нового положения карандаша.
Вид линии (цвет, толщина и стиль) определяется значениями свойств объекта Реп графической поверхности, на которой вычерчивается линия.
Довольно часто результаты расчетов удобно представить в виде графика. Для большей информативности и наглядности графики изображают на фоне координатных осей и оцифрованной сетки. В листинге 10.2 приведен текст программы, которая на поверхность формы выводит координатные оси и оцифрованную сетку (рис. 10.4).
Рис. 10.4, Форма приложения Координатная сетка
Листинг 10.2. Оси координат и оцифрованная сетка
Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.
Ломаная линия
Метод Polyline вычерчивает ломаную линию. В качестве параметра метод получает массив типа Tpoint. Каждый элемент массива представляет собой запись, поля х и у которой содержат координаты точки перегиба ломаной. Метод Polyline вычерчивает ломаную линию, последовательно соединяя прямыми точки, координаты которых находятся в массиве: первую со второй, вторую с третьей, третью с четвертой и т. д.
В качестве примера использования метода Polyline в листинге Ю.З приведена процедура, которая выводит график изменения некоторой величины. Предполагается, что исходные данные находятся в доступном процедуре Массиве Data (ТИП Integer).
Листинг 10.3. График функции (использование метода Polyline)
Метод Polyline можно использовать для вычерчивания замкнутых контуров.
Для этого надо, чтобы первый и последний элементы массива содержали координаты одной и той же точки. В качестве примера использования метода PoiyLine для вычерчивания замкнутого контура в листинге 10.4 приведена программа, которая на поверхности диалогового окна, в точке нажатия кнопки мыши, вычерчивает контур пятиконечной звезды (рис. 10.5). Цвет, которым вычерчивается звезда, зависит от того, какая из кнопок мыши была нажата. Процедура обработки нажатия кнопки мыши (событие MouseDown).
вызывает процедуру рисования звезды starLine и передает ей в качестве параметра координаты точки, в которой была нажата кнопка. Звезду вычерчивает процедура starLine, которая в качестве параметров получает координаты центра звезды и холст, на котором звезда должна быть выведена. Сначала вычисляются координаты концов и впадин звезды, которые записываются в массив р. Затем этот массив передается в качестве параметра методу Polyline. При вычислении координат лучей и впадин звезды используются функции sin и cos. Так как аргумент этих функций должен быть выражен в радианах, то значение угла в градусах домножается на величину pi/180, где pi — это стандартная именованная константа равная числу пи.
Листинг 10,4. Вычерчивание замкнутого контура (звезды) в точке нажатия кнопки мыши
Работа со строками в Delphi
Функция Length языка Delphi
Эта функция возвращает длину строки. У нее есть только один параметр — строка, длину которой надо вернуть. Функция Length выглядит так:
function Length(S): Integer;
Пример использования функции:
В этом примере объявлены две переменные str (строка) и index (целое число). В первой строке кода в переменную str помещается строка «Привет». После этого переменной index присваивается длина строки str. Результат, записанный в переменную index, будет равен числу 6 — длина строки.
Функция Сору языка Delphi
Эта функция возвращает указанный отрывок строки. Например, вам нужно получить из строки «Меня зовут Михаил» символы начиная с 5-го по 10-й. Это легко сделать с помощью функции сору. У нее есть три параметра.
function Сору(S; Index, Count: Integer): string;
Пример использования функции:
Stri: =’Меня зовут Михаил ‘ ;
Здесь объявлено две строковых переменных: str1 и str2. В первой строке кода мы присваиваем переменной str1строку «Меня зовут Михаил». В следующей строке происходит копирование в переменную str2 пяти символов из переменной stri, начиная с 5-го символа. Получается, что мы копируем строку с 5-го символа по 10-й. Результатом будет в str2 строка: «зовут».
Функция Delete языка Delphi
Эта функция удаляет кусок текста из указанной строки. У нее есть три параметра.
procedure Delete(var S: string; Index, Count:Integer);
Пример использования функции Delete:
Strl:= ‘Меня зовут Михаил’;
В этом примере мы удаляем из строки stri символы, начиная с 5-го по 10-й (пять символов, начиная с 5-й позиции). В результате в переменной str1 останется только строка «Меня Михаил».
Функция Pos языка Delphi
Эта функция ищет указанные символы в строке или, можно сказать, ищет подстроку. Если эти символы найдены, то она вернет порядковый номер, начиная с которого найдена нужная строка. У функции два параметра.
Если подстрока не найдена, то функция вернет ноль, function Pos(Substr: string; S: string): Integer; Пример использования функции Pos:
Stri:=’Меня зовут Миша’;
В этом примере мы запускаем поиск строки «Миша» в строке stri. В данном случае строка «Миша» есть в строке переменной и начинается с символа 11. Результат — в переменной index будет число 11.
Функция Insert языка Delphi
Эта процедура вставляет одну строку в другую, начиная с указанного символа. У нее есть три параметра.
В общем виде функция выглядит так:
procedure Insert(Source: string; var S: string; Index: Integer) ;
Пример использования функции insert:
Strl:=’Меня Миша’; Insert(‘зовут’, Strl, б);
Здесь вставляется в строку strl текст «зовут», начиная с 6-го символа. Результатом будет строка «Меня зовут Миша».