Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
samost_pascal_delphi_2012.doc
Скачиваний:
0
Добавлен:
04.01.2020
Размер:
4.33 Mб
Скачать

Практична робота № 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. При цьому автоматично буде створений новий проект з формою.

  2. Збережіть проект у своїй папці, створивши в ній папку генератор функцій. Для чого виконайте команду Save All, Unit назвіть U_generat, проект - P_generat.

  3. Встановіть властивості форми Form1:

    1. Дайте назву формі: «Генератор функцій».

    2. Встановіть властивість Form1.Position в poDesktopCenter, щоб вікно при кожному запуску і при будь-якому екранному дозволі завжди було рівно посередині екрана.

    3. Устанавіть властивість Form1.BorderStyle в bsSingle, для незмінного розміру вікна.

    4. Залиште у вкладених властивостях BorderIcons тільки biSystemMenu в true, інші в false. Це для того, щоб вікно можна було скрутити в значок, розгорнути на весь екран і вікно мало іконку в заголовку.

  4. В становіть у форму компонент PaintBox (вкладка System), два компонента RadioButton, один компонент CheckBox, три кнопки Button (всі компоненти розташовані на панелі Standard) і повзунок прокрутки TrackBar, розташований на вкладці Win32. Розташуйте компоненти, як це зазначено на малюнку нижче:

  1. RadioButton1.Caption перейменуйте в "Sin". Цей прапор буде ознакою малювання синусоїди. Початкове значення властивості Checked для RadioButton1 встановіть в true.

  2. RadioButton2.Caption перейменовуємо в "Cos" - косінусоіда.

  3. CheckBox1.Caption перейменуйте: "Усі". Якщо цей прапор встановлений, то буде малюватися два графіки.

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

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

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

  7. Відразу після слова Implementation в модулі вікна оголошуємо глобальні змінні, які будуть доступні з будь-якої процедури в цьому модулі.

Var

stop: boolean; / / ознака малювання

x: Integer; / / координата осі X

  1. В обробнику події OnClick для кнопки 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); // Очищення робочої області

// Процедура "засинає" на заданий час в мілісекундах

PaintBox1end;Sleep (TrackBar1.Position);

Application.ProcessMessages; // Обробка всієї черги повідомлень

end;

end;

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

  1. Напишіть процедуру натискання на кнопку зупинки Button2

procedure TForm1.Button2Click (Sender: TObject);

begin

Stop: = true; / / встановити прапор зупинки процесу малюванн

end;

  1. Напишіть процедуру створення вікна

Form1OnCreate

procedure TForm1.FormCreate (Sender: TObject);

begin

x: = 0; / / початкове значення X

end;

  1. Напишіть процедуру OnClick для кнопки Button3. Якщо натиснута кнопка "Вихід", то реакція на цю подію буде таким:

procedure TForm1.Button3Click (Sender: TObject);

begin

Close; / / закрити вікно

end;

  1. Напишіть процедуру для форми OnClose: реакція перед закриттям вікна OnClose. Без цієї процедури, якщо малювання включено, вікно не закриється.

procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);

begin

Stop: = true; / / зупинити (якщо включений) цикл малювання

end;

  1. Після запуску програми, установки прапорця "Все" і натисненні на кнопку "Старт" на екрані з'явиться графік:

  2. Виконайте самостійно:

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

    2. Зробіть так, щоб в неінвертірованном режимі синусоїда зображувалася червоним кольором, а косинусоіда - синім.

    3. Поексперементуйте з програмою, додавши ще графіки: y = sin2x y = sin і можливість одночасної трансляції графіків трьох функцій: y = sin2x, y = sinx, y = sin різними кольорами. Спробуйте рухати повзунок прокрутки TrackBar вліво або вправо при запущеній програмі.

Результатом виконання даної практичної роботи є створений згідно із завданням програмний продукт. Виконане завдання повинне бути пред'явлено викладачеві в електронному вигляді. В ході захисту практичної роботи студент повинен продемонструвати свої навички роботи з вивченими компонентами і методами проектування інтерфейсу користувача.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]