Лабораторная работа №7. Генератор функций — КиберПедия 

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Лабораторная работа №7. Генератор функций

2019-07-12 90
Лабораторная работа №7. Генератор функций 0.00 из 5.00 0 оценок
Заказать работу

 

Цель: Изучение компонента PaintBox и методов рисования на канве. Компонент TrackBar

Краткие теоретические сведения.

PaintBox представляет собой некоторую ограниченную поверхность с канвой, на которую можно заносить изображения. Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Она содержит свойства и методы, существенно упрощающие графику Delphi.

Канва имеет свойство Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например, Canvas.Pixels[10,20] соответствует цвету пикселя, 10-го слева и 20-го сверху. С массивом пикселей можно обращаться как с любым свойством: изменять цвет, задавая пикселю новое значение, или определять его цвет по хранящемуся в нем значению. Например, Canvas.Pixels[10,20]:= 0 или Canvas.Pixels[10,20]:= clBlack — это задание пикселю черного цвета.

Канва — объект класса TCanvas имеет множество методов, которые позволяют рисовать графики, линии, фигуры с помощью свойства Pen — перо. Это свойство является объектом, в свою очередь имеющим ряд свойств. Одно из них уже известное вам свойство Color — цвет, которым наносится рисунок. Второе свойство — Width (ширина линии). Ширина задается в пикселях. По умолчанию ширина равна 1. Свойство Style определяет вид линии.

Фигуры в общем случае рисуются не пустыми, а закрашенными с помощью свойства канвы Brush — кисть. Свойство Brush является объектом, имеющим в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style определяет шаблон заполнения (штриховку). По умолчанию значение Style равно bsSolid, что означает сплошное закрашивание цветом Color.

Компонент TrackBar представляет собой элемент управления в виде ползунка, который пользователь может перемещать курсором мыши или клавишами во время выполнения. Таким образом, пользователь может управлять какими-то процессами: громкостью звука, размером изображения и т.п. Основное свойство компонента — Position. Это свойство можно задавать во время проектирования или программно во время выполнения. При перемещении пользователем ползунка можно прочитать значение Position, характеризующее позицию, в которую пользователь переместил ползунок. Свойство Position — целое, значение которого может изменяться в пределах, задаваемых свойствами Min и Мах.

Ход работы

1. После запуска Delphi программа имеет только одно окно Form1, у которого сразу переименовываем заголовок (свойство Caption) на «Генератор функций». Устанавливаем свойство Form1.Position в poDesktopCenter, чтобы окно при каждом запуске и при любом экранном разрешении всегда было ровно посередине экрана. Устанавливаем свойство Form1.BorderStyle в bsSingle, для неизменяемого размера окна. Оставляем во вложенных свойствах BorderIcons только biSystemMenu в true, остальные в false. Это для того, чтобы окно нельзя было свернуть в значок, развернуть во весь экран и окно имело иконку в заголовке.

2. Устанавливаем в форму компонент PaintBox (вкладка System), два компонента RadioButton, один компонент CheckBox, три кнопки Button (все компоненты расположены на панели Standard) и ползунок прокрутки TrackBar, расположенный на вкладке Win32. Расположим компоненты, как это указано на рисунке ниже.

3. RadioButton1.Caption переименовываем в "Sin". Этот флаг будет признаком рисования синусоиды. RadioButton2.Caption переименовываем в "Cos" - косинусоида. Начальное значение свойства Checked для RadioButton1 устанавливаем в true.

4. CheckBox1.Caption переименовываем в "Все". Если этот флаг установлен, то будет рисоваться два графика.

5. Названия кнопок Button1 - "Старт", Button2 - "Стоп (пауза)" и Button3 - "Выход". Названия на кнопках меняются через свойство Caption. Теперь назначение этих кнопок понятно.

6. Компонент TrackBar1 свойство минимального значения Min устанавливаем в 1, максимальное значение Max - 50.

7. Для PaintBox1, на котором будет непосредственно рисоваться график задаем размеры высоты Height=140, ширина Width=500.

8. Сразу после слова implementation в модуле окна объявляем глобальные переменные, которые будут доступны из любой процедуры в этом модуле. Var stop:boolean; // признак рисования x:Integer; // координата оси X

9. В обработчике события OnClick для кнопки Button1 («Старт») напишем следующее:

procedure TForm1.Button1Click(Sender: TObject);Var y:Integer; // ось Ybeginif x=0 then // если точка в начале координат, то:beginPaintBox1.Canvas.Brush.Color:=clWhite; // цвет фона белыйPaintBox1.Canvas.FillRect(ClientRect); // заливка всей рабочей областиend;stop:=false; // флаг старта процесса рисованияWhile not stop do // бесконечный цикл, пока флаг остановки не поднят:beginif (RadioButton1.Checked)or(CheckBox1.Checked) then // если установлен "Sin" или "Все", то:beginy:=Round(Sin(pi*x/100)*50)+70; // вычисление положения синусоидыPaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точкуend;if (RadioButton2.Checked)or(CheckBox1.Checked) then // если установлен "Cos" или "Все", то:beginy:=Round(Cos(pi*x/100)*50)+70; // вычисление положения косинусоидыPaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точкуend;inc(x); // увеличить значение X на едицину. Аналог X:=X+1if x>500 then // если X вышел за пределы PaintBox1, то:beginx:=0; // установить X на начало координатPaintBox1.Canvas.Brush.Color:=clWhite; // Цвет фона белыйPaintBox1.Canvas.FillRect(ClientRect); // Очистка рабочей области PaintBox1end;Sleep(TrackBar1.Position); // Процедура "засыпает" на заданное время в миллисекундахApplication.ProcessMessages; // Обработка всей очереди сообщенийend;end;

Коротко расскажем работу этой процедуры. Как только нажата кнопка "Старт" Компонент PaintBox1 очищается и начинается бесконечный цикл While, выйти из которого можно только, пока переменная Stop не примет значение true. Это можно сделать кнопкой Button2, соответствующая процедура которой обработается во время Application.ProcessMessages. С помощью бегунка TrackBar1 можно менять скорость рисования кривой. Этот параметр передается в команду Sleep.

10. Процедура нажатия на кнопку остановки Button2:

procedure TForm1.Button2Click(Sender: TObject);

begin

Stop:=true; // установить флаг остановки процесса рисования

end;

11. Процедура создания окна Form1OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

x:=0; // начальное значение X

end;

 

12. Если нажата кнопка "Выход", то реакция на это событие будет таким:

procedure TForm1.Button3Click(Sender: TObject); begin Close; // закрыть окно end;

13. И реакция перед закрытием окна OnClose. Без этой процедуры, если рисование включено, то окно не закроется.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Stop:=true; // остановить (если включен) цикл рисования end; После запуска программы, установки флажка "Все" и нажатии на кнопку "Старт" на экране отобразится график:

Выполнить самостоятельно:

1. Добавьте CheckBox «Инвертировать», при выборе которого цвет области построения становится черным, а графики функций вырисовываются белым цветом.


Поделиться с друзьями:

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.