- •1. Теоретические основы объектно – ориентированного программирования 5
- •2. Использование системы программирования Delphi для создания Windows-приложений 9
- •3. Лабораторный практикум 27
- •Введение
- •1. Теоретические основы объектно – ориентированного программирования
- •1.1.Объектная модель и ее элементы.
- •1.2.Основные понятия объектно-ориентированного подхода - объект и класс.
- •1.3.Методы построения классов.
- •2. Использование системы программирования Delphi для создания Windows-приложений
- •2.1. Интерфейс интегрированной среды разработки Delphi
- •2.2. Синтаксические правила языка Object Pascal
- •2.3. Создание и структура пользовательских приложений в среде Delphi
- •2.4. Структура модуля (*.Pas)
- •2.5. Создание формы и написание откликов на события
- •1) Компоновка формы и задание свойств компонентов
- •2) Написание отклика на событие
- •2.6. Компиляция и исполнение программы
- •2.7. Ввод и вывод данных. Функции преобразования типов данных
- •3. Лабораторный практикум Лабораторная работа 1. Разработка приложения Калькулятор
- •Лабораторная работа 2. Использование курсоров в приложениях Windows.
- •Лабораторная работа 4. Создание простого текстового редактора.
- •Лабораторная работа 5. Рисование мышью в форме
- •Лабораторная работа 6. Применение графических компонентов
- •Лабораторная работа 7.Создание числовых изображений
- •Лабораторная работа 8. Создание текстурных заливок
- •Лабораторная работа 9. Поддержка справочной системы. Создание всплывающих подсказок.
- •Лабораторная работа 10.Создание видеопроигрывателя
- •Лабораторная работа 12.Создание браузера
- •Лабораторная работа 13. Работа с внешним файлом.
- •Лабораторная работа 14. Работа с базами данных.
- •Лабораторная работа 15. Создание многооконных приложений.
- •Литература Основная литература
- •Дополнительная литература
Лабораторная работа 8. Создание текстурных заливок
Задание 1.
1. Откройте новый проект и разместите на нем компонент Image1(Additional). 2. Установите следующие размеры этого компонента: Width=255, Height=255.
Таким образом, поле для рисования будет 255х255=50725 пикселей, причем каждый пиксель будет изображать отдельное число. Числа будут образовывать спираль, раскручивающуюся от центра. Если число простое, то соответствующую ему точку закрасим черным цветом, иначе – желтым цветом.
3. Для определения простого числа напишем функцию Good. После строки {$R *.DFM} наберите следующий код.
function good(Numb:integer):boolean;
var
i:integer;
begin
good:=true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0 then
begin
good:=false;
exit;
end;
end;
После указания имени функции в круглых скобках указывается параметр Numb. Функция должна определить простое это число или составное и результат определения поместить после круглых скобок. В данном случае тип Boolean означает, что функция произведет результат True или False. Принцип работы функции Good заключается следующем. В цикле по i , пробегающему значению от 2 до Trunc(Sqrt(Numb)), проверяется делится ли число Numb на i. Если делится, то число Numb составное, иначе простое.
Добавим на форму кнопку Пуск и опишем событийную процедуру.
Procedure Tform1.Button1Click(Sender: Tobject);
Label
up;
var
i, // Счетчик цикла
x,y, // Текущие координаты точки
n, // Текущее число
nx,ny:integer; // Количество шагов вдоль осей х,у
begin
// Начальная установка
n:=2;
x:=Image1.Width div 2+ 1;
y:=x-1 ;
with Image1.Canvas do //Стандартные средства рисования
begin
Brush.Color:=clYellow;
FillRect(ClientRect); // Закрашиваем фон в желтый цвет
Pixels[x,y]:=clBlack; // Рисуем первую черную точку
ny:=1;
up: for i:=1 to ny do //Двигаемся вверх
begin
dec(y) ;
inc(n) ;
if good(n) then Pixels[x,y]:=clBlack;
end;
nx:=ny+1;
for i:=1 to nx do //Двигаемся влево
begin
dec(x) ;
inc(n) ;
if good(n) then Pixels[x,y]:=clBlack;
end;
ny:=nx;
for i:=1 to ny do //Двигаемся вниз
begin
inc(y);
inc(n);
if good(n) then Pixels[x,y]:=clBlack;
end;
nx:=ny+1;
for i:=1 to nx do //Двигаемся вправо
begin
inc(x);
inc(n);
if good(n) then Pixels[x,y]:=clBlack;
end;
if n>=image1.Width*Image1.Height
then exit;
ny:=nx;
Application.ProcessMessages;
goto up; //Переход в новому такту цикла
end;
end;
Задание 2.
Закомментируйте строку Application.ProcessMessages. Просмотрите, что происходит на экране. Процедура ProcessMessages необходима для того, чтобы прервать выполнение приложения (Application) и начать обработку сообщений (Messages), накопившихся в очереди.
Задание 3.
Замените текст функции good на следующий:
function good(Numb:integer):boolean;
var
i:integer;
begin
good:=(Numb mod 33=0);
for i:=2 to Trunc(Sqrt(Numb)) do
if Frac(Sqrt(Numb))=0 then
begin
good:=false;
exit;
end;
end;
Просмотрите получившийся узор.
Задание 4.
Снова замените текст функции good на следующий:
function
good(Numb:integer):
var
i:integer;
begin
good:=true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod 33=0) then
begin
good:=false;
exit;
end;
end;
Задание 5.
Исследуйте другие свойства чисел. Узоры, которые будут получаться доставят вам удовольствие.