Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи.doc
Скачиваний:
19
Добавлен:
18.03.2015
Размер:
389.12 Кб
Скачать

Контрольні питання

  1. Як створюється багатодокументний інтерфейс Windows (Multiple Document Interface)?

  2. Поясніть значення властивості Stretch компонента Image. Назвіть найважливіші властивості та методи класу TPicture.

  3. Поясніть значення параметра Action процедури оброблення події OnClose.

  4. Поясніть значення списків Автоматично створювані форми та Доступні форми.

  5. Поясніть рядок коду Child := TChild.Create(Self);

  6. Як використовується властивість DefaultExt компонента SavePictureDialog та OpenPictureDialog? Для чого використовується функція ExtractFileName?

  7. Поясніть значення змінної ActiveMDIChild;

  8. Для чого використовуються методи Tile; Cascade; ArrangeIcons;?

Література

1. Александровский А. Delphi 5. Разработка корпоративных приложений. – М.: ДМК, 2000. – 512 с.

2. Архангельский А. Я. Object Pascal в Delphi. – М.: ЗАО «Издательство Бином», 1999. – 224 с.

3. Архангельский А. Я. Программирование в Delphi 6. – М.: ЗАО «Издательство Бином», 2002. – 1120 с.

4. Бобровский С. Delphi 5: Учебный курс. – СПб.: Питер, 2002. – 640 с.

5. Вирт Н. Алгоритмы + структуры данных = программы. – М.: Мир, 1985. – 406 с.

Лабораторна робота № 11

Тема: Створення графічного редактора.

Мета: Ознайомитись із технологією програмування графіки в ОС Windows.

Завдання

Крок 1. Відкриття проекту

Запустіть систему програмування Delphi. Відкрийте проект зі створення програми для перегляду рисунків, що Ви розробляли на попередньому занятті.

Крок 2. Написання коду для малювання ліній

Деякі візуальні компоненти надають у розпорядження програміста полотно (Canvas), призначене для малювання. Наприклад, щоб намалювати на формі Form1 лінію з поточної позиції графічного курсору (PenPos) у точку (100, 100), необхідно записати:

Form1.Canvas.LineTo(100, 100);

Де LineTo є одним із методів вбудованого у форму полотна Canvas.

Для того, щоб на полотні компонента залишався слід у процесі переміщення вздовж нього покажчика миші, необхідно згенерувати для компонента процедуру оброблення події OnMouseMove (при переміщенні миші).

У дочірню форму нашого додатка вмонтований компонент Image, що також має полотно для малювання. Згенеруйте процедуру оброблення події OnMouseMove для компонента Image і вставте туди наступний рядок:

Image.Canvas.LineTo(X, Y);

Перегляньте результати програмування. Зверніть увагу, як параметри X і Y (координати миші) передаються в згенеровану процедуру оброблення ImageMouseMove.

Ще одним параметром процедури ImageMouseMove є Shift: TShiftState, тобто набір, що містить стан натиснутих кнопок миші та клавіатури. Якщо необхідно, щоб лінія малювалася при натиснутій лівій кнопці миші, то процедуру оброблення події OnMouseMove треба змінити на наступну:

If ssLeft in Shift Then

Image.Canvas.LineTo(X, Y);

Операція in перевіряє, чи міститься елемент ssLeft у наборі Shift, тобто, чи була натиснута ліва кнопка миші.

Для того, щоб змінити колір лінії при малюванні на полотні, треба вибрати олівець (Pen):

Image.Canvas.Pen.Color := clRed;

Цей запис встановлює колір (Color) олівця (Pen) у червоний (clRed). Додайте цей рядок в процедуру оброблення і перегляньте результати програмування. Після цього видаліть рядок.

Примітка. Зверніть увагу, що у випадку необхідності компонент Image самостійно перерисовує (відновлює) зображення: наприклад, якщо форму згорнути та розгорнути, то малюнок компонента Image зберігається. Це і є основною перевагою використання компонента Image для малювання (при малюванні на полотні інших компонентів зображення треба відновлювати програмно при виникненні події OnPaint).

Крок 3. Малювання графічних примітивів

Додайте на панель інструментів ще одну кнопку швидкого доступу, назвіть її Circle (коло). Властивість GroupIndex установіть в 1: тепер кнопка кольору Color і кнопка малювання кола Circle відносяться до різних груп і їх поведінка незалежна. Властивість AllowAllUp установіть в true, що дозволить використовувати кнопку Circle як перемикач (натиснутий/віджатий стан).

Натискання кнопки Circle переводить програму в режим малювання кола, що здійснюється при натисканні лівої кнопки миші на рисунку.

Введіть у модулі ChildUnit дві нові глобальні змінні, які визначать координати кола:

xc, yc : Integer;

Згенеруйте для Image процедуру оброблення події OnMouseDown і введіть туди наступний код:

// Якщо натиснута кнопка Circle

if MainForm.Circle.Down Then

begin

xc := X; // Присвоїти координатам кола

yc := Y; // координати миші

Image.Canvas.Ellipse(xc-100, yc-100, xc+100, yc+100);

end;

Примітка. Для того, щоб властивість Down (натиснута) кнопки Circle, описаної у модулі головної форми, була доступна й у модулі дочірньої форми, необхідно в останньому зробити запис uses MainUnit;

Запустіть програму і перегляньте результати програмування. При натисканні лівої кнопки миші виводиться коло, при русі миші рисується лінія.

Для того, щоб переміщати коло, необхідно модифікувати процедуру оброблення події переміщення миші:

if ssLeft in Shift Then // Якщо натиснута ліва кнопка миші

// Якщо натиснута кнопка Circle

if MainForm.Circle.Down Then

begin

// Стерти старе коло

Image.Canvas.Ellipse(xc-100, yc-100, xc+100, yc+100);

xc := X; // Присвоїти координатам кола

yc := Y; // нові координати

// Намалювати нове коло

Image.Canvas.Ellipse(xc-100, yc-100, xc+100, yc+100);

end // Інакше намалювати лінію

else Image.Canvas.LineTo(X, Y);

Зверніть увагу, що для стирання кола використовується той саме код, як і для малювання. Такий підхід здійснюється завдяки встановлення інвертованого стилю виведення:

Image.Canvas.Pen.Mode := pmNotXor;

Цей рядок треба помістити в процедуру оброблення події OnCreate (при створенні) форми Child.