
- •Лабораторная работа №1 Delphi. Форма, компоненты Button и Memo
- •Лабораторная работа №2 Delphi. Формы. Рисование линий и прямоугольников
- •Лабораторная работа №3 Delphi. Рисование графиков
- •Лабораторная работа №4 Delphi. Компоненты Image, OpenPictureDialog, SavePictureDialog. Рисование и сохранение графической информации
- •Лабораторная работа №5 Delphi. Компоненты MainMenu, Memo Создание и сохранение текстовой информации
- •Создание структуры меню.
- •Справка. Если не добавить что-либо в шаблон обработчика события, то он и соответствующий заголовок метода в объявлении класса tForm1 будут удалены из текста программы при её подготовке к выполнению.
- •Добавление переменных, представляющих текущее состояние процесса обработки данных.
- •Создание обработчиков событий.
- •Лабораторная работа №6 Delphi. Компоненты диалога, RichEdit. Создание, редактирование, изменение стиля, сохранение и поиск текстовой информации
- •1. Меню
- •2. Работа с файлами
- •3. Шаблоны и действия
- •4. Панель инструментов
- •Лабораторная работа №7 Delphi. Компоненты ListBox, ComboBox, StringGrid Создание и использование
- •Лабораторная работа №8 Delphi. Страничные раскладки. Создание их и использование
- •Лабораторная работа №9 Общие представления. Графика
Лабораторная работа №2 Delphi. Формы. Рисование линий и прямоугольников
В данном уроке научимся работать с Canvas. Что это такое? Если перевести это слова на русский язык то получится, что это холст, канва. Canvas представляет из себя область компонента, на которой можно создавать, хранить и модифицировать графическое изображение.
У формы есть свойство Canvas. Такое же свойство есть и у TImage. Следовательно можно нарисовать начиная от простой точки до овала и вывода текста. Давайте попробуем нарисовать прямую линию из точки А в точку Б. Выложите на форму кнопку и в обработчике onClick пишем:
Form1.Canvas.MoveTo(0,0); Form1.Canvas.LineTo(100,100);
Что есть что? MoveTo - это из каких координат начинать рисовать линию, можно сказать это начало линии. А LineTo соответственно конец линии.
Изменим цвет линии. Перед тем как начинать рисовать напишем:
Form1.Canvas.Pen.Color := clRed;
У канвы есть свойство Pen. С его помощю можно поменять толщину (Width), цвет (Color), стиль (Style) и многое другое.
Теперь нарисуем прямоугольник:
Form1.Canvas.Rectangle(0,0,100,50);
Координаты думаю понятны. Первые две указывают левый верхний угол, еще две - правый нижний угол прямоугольника.
Нарисовать-то нарисовали, цвет рамки поменять сможем (pen), а вот как поменять цвет заливки фигуры - свойство Brush (заливка). Поменяем цвет заливки квадрата на зеленый, для этого перед тем как рисуем сам прямоугольник напишем:
Form1.Canvas.Brush.Color:=clGreen;
Помимо этого можно сделать чтобы заливка была не сплошной а узором. Для этого перед рисованием прямоугольника делаем:
Form1.Canvas.Brush.Style:=bsDiagCross;
Чтобы было проще разобраться с Pen и Brush выложите на форму TShape и у него найдите эти свойства. Поэкспериментируйте и поглядите как меняется компонент. И уже исходя из этих знаний можно все это сделать программно, просто в коде обратиться к изменяемым свойствам.
Помимо прямоугольников можно рисовать эллипсы:
Form1.Canvas.Ellipse(0,0,100,50);
Ну и напоследок как один пиксель сделать определенного цвета:
Form1.Canvas.Pixels[10,10]:=clRed;
В данном случае цвет красный.
Лабораторная работа №3 Delphi. Рисование графиков
Генератор
колебаний. Пример.
У формы и у компонента PaintBox
(страница
System палитры компонентов) есть свойство
Canvas. Это свойство представляет собой
растровое изображение, на котором можно
рисовать или в которое можно загрузить
рисунок. Я не буду рассказывать подробно
об особенностях рисования, тем более,
что я в этом не силен, но основные сведения
дам.
Свойство Canvas доступно только во время работы приложения и с помощью его можно:
Canvas.Brush - свойство фона. У него можно установить свойство Canvas.Brush.Color в необходимый цвет и с помощью следующей за ней командой Canvas.FillRect(ClientRect) можно очистить всю рабочую область компонента под заданный цвет. С помощью свойтва Canvas.Brush можно в качестве фона установить рисунок. Для этого есть свойство Canvas.Brush.Bitmap, которому нужно присваивать переменную с растровым рисунком.
Canvas.MoveTo(x,y) - устанавливает перо в заданную точку, где x и y - координаты точки, относительно компонента. Начало координат, точка [0,0] находится в верхнем левом углу. После этой команды перо установлено, но точка не нарисована. Чтобы провести линию от текущего положения пера до заданного Canvas.LineTo(x,y). Поставить точку определенного цвета на холсте Canvas.Pixels[x,y]:=ЦВЕТ_ТОЧКИ.
Через Canvas можно писать текст, рисовать дуги, сектор круга, овал, прямоугольник, ломаную линию, кривую.
Свойства пера содержатся в Canvas.Pen. Здесь можно задать толщину пера Canvas.Pen.Width:=ТОЛЩИНА_В_ТОЧКАХ. Задать цвет Canvas.Pen.Color:=ЦВЕТ.
Рассмотрим пример генератора колебаний/ Генератор сам по себе есть только на экране. Колебания, которые он создает, рассчитываются по формуле. Следовательно, он вам может оказаться полезным. Можно изменить рассчетную функцию и вы получите для этой функции график. Даю основные сведения, которые вам понадобятся при самостоятельном написании этой программы. 1.Программа имеет только одно окно Form1, у которого сразу переименовываем заголовок на подходящее название. 2. Устанавливаем свойство Form1.Position в poDesktopCenter, чтобы окно при каждом запуске и при любом экранном разрешении всегда было ровно посередине экрана. 3. Устанавливаем свойство Form1.BorderStyle в bsSingle, для неизменяемого размера окна. Оставляем во вложенных свойствах BorderIcons только biSystemMenu в true, остальные в false. Это для того, чтобы окно нельзя было свернуть в значек, развернуть во весь экран и окно имело иконку в заголовке. 4. Устанавливаем в форму компонент PaintBox, два компонента RadioButton, CheckBox, три кнопки Button и TrackBar, расположенный на странице Win32. 5. RadioButton1.Caption переименовываем в "Sin". Этот флаг будет признаком рисования синусоиды. RadioButton2.Caption переименовываем в "Cos" - косинусоида. Начальное значение флага Checked для RadioButton1 в true. 6. CheckBox1.Caption переименовываем в "Все". Если флаг установлен, то будет рисоваться два графика. 7. Названия кнопок Button1 - "Старт", Button2 - "Стоп (пауза)" и Button3 - "Выход". Названия на кнопках меняются через свойство Caption. Теперь назначение этих кнопок понятно. 8. Компонент TrackBar1 свойство минимального значения Min устанавливаем в 1, максимальное значение Max - 50. 9. PaintBox1, на котором будет непосредственно рисоваться график размеры высоты Height=140, ширина Width=500. Привдим текст модуля для окна Form1. Сразу после слова implementation в модуле окна объявляем глобальные переменные, которые будут доступны из любой процедуры в этом модуле. Var stop:boolean; // признак рисования x:Integer; // координата оси X Реакция на событие нажатия на кнопку Button1 (Начало рисования) procedure TForm1.Button1Click(Sender: TObject); Var y:Integer; // ось Y begin if x=0 then // если точка в начале координат, то: begin PaintBox1.Canvas.Brush.Color:=clWhite; // цвет фона белый PaintBox1.Canvas.FillRect(ClientRect); // заливка всей рабочей области end; stop:=false; // флаг старта процесса рисования While not stop do // бесконечный цикл, пока флаг остановки не поднят: begin if (RadioButton1.Checked)or(CheckBox1.Checked) then // если установлен "Sin" или "Все", то: begin y:=Round(Sin(pi*x/100)*50)+70; // вычисление положения синусоиды PaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точку end; if (RadioButton2.Checked)or(CheckBox1.Checked) then // если установлен "Cos" или "Все", то: begin y:=Round(Cos(pi*x/100)*50)+70; // вычисление положения косинусоиды PaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точку end; inc(x); // увеличить значение X на едицину. Аналог X:=X+1 if x>500 then // если X вышел за пределы PaintBox1, то: begin x:=0; // установить X на начало координат PaintBox1.Canvas.Brush.Color:=clWhite; // Цвет фона белый PaintBox1.Canvas.FillRect(ClientRect); // Очистка рабочей области PaintBox1 end; Sleep(TrackBar1.Position); // Процедура "засыпает" на заданное время в миллисекундах Application.ProcessMessages; // Обработка всей очереди сообщений end; end;
Коротко расскажем о работе этой процедуры. Как только нажата кнопка "Старт" Компонент PaintBox1 очищается и начинается бесконечный цикл While, выйти из которого можно только, пока переменная Stop не примет значение true. Это можно сделать кнопкой Button2, соответствующая процедура которой обработается во время Application.ProcessMessages. С помощью бегунка TrackBar1 можно менять скорость рисования кривой. Этот параметр передается в команду Sleep.
Процедура нажатия на кнопку остановки Button2: procedure TForm1.Button2Click(Sender: TObject); begin Stop:=true; // установить флаг остановки процесса рисования end; Процедура создания окна Form1OnCreate: procedure TForm1.FormCreate(Sender: TObject); begin x:=0; // начальное значение X end;
Если нажата кнопка "Выход", то реакция на это событие будет таким: procedure TForm1.Button3Click(Sender: TObject); begin Close; // закрыть окно end; И реакция перед закрытием окна OnClose. Без этой процедуры, если рисование включено, то окно не закроется. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Stop:=true; // остановить (если включен) цикл рисования end;
После
запуска программы, установки флажка
"Все" и нажатии на кнопку "Старт"
на экране отобразится этот график:
В принципе, с нашей программой можно отслеживать практически любые функции. Просто надо описать свою отслеживаемую функцию вместо моих строк Y:=Sin... Если вы хотите убрать постоянную прорисовку графика функции, то следующий код в программе if x>500 then // если X вышел за пределы PaintBox1, то: begin x:=0; // установить X на начало координат PaintBox1.Canvas.Brush.Color:=clWhite; // Цвет фона белый PaintBox1.Canvas.FillRect(ClientRect); // Очистка рабочей области PaintBox1 end; измените на: if x>500 then // если X вышел за пределы PaintBox1, то: begin x:=0; // установить X на начало координат Stop:=true; // остановка рисования end;
Напомним, что график функции вы видите перевернутым. Начало координат в мониторе находится в верхнем левом углу. Математики тут найдут выход. Для переворачивания функции нужно от значения рабочей высоты элемента, на котором рисуем, вычитать значение функции Y:=140 - ФУНКЦИЯ;
Как видите, поле для экспериментов велико.