Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Цель: Изучение компонента 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 «Инвертировать», при выборе которого цвет области построения становится черным, а графики функций вырисовываются белым цветом.






Date: 2015-12-12; view: 346; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию