Учебные материалы по математике | Работа с графикой в delphi | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Работа с графикой в delphi


РАБОТА С ГРАФИКОЙ В DELPHI

Отчёт по лабораторной работе

Цель и задача работы

Научиться использовать графику в языке программирования Delphi.

Задание на работу

1) Предусмотреть возможность изменения цвета графика, созданного из вводимых точек.

2) Написать программу, в которой происходит симуляция броуновского движения молекул.

3) Создать файл MS Word и записать в него рисунок с комментарием

1.  Схема алгоритма

Подпись:На рисунке 1.1 приведена схема алгоритма выбора цвета.

Подпись: Graph_Points.Clear;
Graph.BottomAxis.Automatic:=True;
Graph.LeftAxis.Automatic:=True;
 flag:=false;
,Подпись: GetMem(arr,size)<>true
,Подпись: ((flag=false)and(colors.Execute))

 

Рисунок 1.1 – Схема алгоритма создания и выбора цвета графика

 

 

Текст программы

Ниже приведён текст программы, написанный на языке программирования Delphi 7, выполняющий создание графика по точкам и изменение его цвета.

unit Lab;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart;

type

arra=array of array of integer;

TMainProgram = class(TForm)

MainProgramInf: TLabel;// Информация о назначении ПО

InputArray: TStringGrid;// Таблица для ввода массива точек

startinf: TLabel;// Объект для вывода информации на дисплей

endinformation: TLabel;// Объект для вывода информации на дисплей

start: TButton;// Объект для запуска программы

InfWind: TLabel;// Информация о вводе размера

InputLength: TEdit;// Объект для ввода размера массива точек

StartLength: TButton;// Объект для изменения размера массива точек

Graph: TChart;// Объект, на котором выводится график

Graph_Points: TLineSeries;// Объект — график

X_inf: TLabel;// обозначение ввода координаты Х

Y_inf: TLabel;// обозначение ввода координаты Y

Colors: TColorDialog;// Объект для выбора цвета графика

procedure startClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure StartLengthClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainProgram: TMainProgram;

{Подпрограмма для проверки ввода данных}

procedure checkandinputarr(var flag:boolean;InputArray:TStringGrid;var arr:arra);

var

size:integer;

flag:boolean;

implementation

{$R *.dfm}

{Подпрограмма для проверки ввода данных}

procedure checkandinputarr(var flag:boolean;InputArray:TStringGrid;var arr:arra);

var i, j:integer;

begin

i:=-1;

while ((i<size-1)and(flag=false)) do

begin

inc(i);

try

arr[i][0]:=strtoint(InputArray. Cells[i,0]);

arr[i][1]:=strtoint(InputArray. Cells[i,1]);

except

on EConvertError do

begin

ShowMessage(‘Ошибка преобразования ввода элемента матрицы. Введите целое число!’);

flag:=true;

end;

end;

end;

end;

{Подпрограмма для создания динамического массива}

function GetMem(var arr:arra;size:integer):boolean;

var i:integer;

flag:boolean;

begin

flag:=false;

SetLength(arr, size);

if arr<>nil then

begin

i:=0;

while ((i<=size-1)and(flag<>true)) do

begin

SetLength(arr[i],2);

if arr[i]=nil then

begin

flag:=true;

Result:=true;

end;

inc(i);

end;

end;

end;

{Подпрограмма для освобождения памяти из-под динамического массива}

procedure FreeMem(var arr:arra;size:integer);

var i:integer;

begin

for i:=0 to size-1 do

arr[i]:=nil;

arr:=nil;

end;

{Подпрограмма для создания графика с выбираемым цветом по вводимым точкам}

procedure TMainProgram. startClick(Sender: TObject);

var arr:arra;

i:integer;

begin

Graph_Points. Clear;

Graph. BottomAxis. Automatic:=True;

Graph. LeftAxis. Automatic:=True;

flag:=false;

SetLength(arr, size);

if GetMem(arr, size)<>true then

begin

checkandinputarr(flag, InputArray, arr);

if ((flag=false)and(colors. Execute)) then

begin

for i:=1 to size do

Graph_Points. AddXY(arr[0][i],arr[1][i],»,Colors. Color);

end;

FreeMem(arr, size);

{output_from_file(Graph_Points, SaveFile);}

end

else

ShowMessage(‘Память не выделилась!!’);

end;

procedure TMainProgram. FormCreate(Sender: TObject);

begin

size:=9;

Graph_Points. Clear;

end;

{Подпрограмма для изменения размеров таблицы с точками}

procedure TMainProgram. StartLengthClick(Sender: TObject);

begin

try

size:=strtoint(InputLength. Text);

except

on EConvertError do

begin

ShowMessage(‘Ошибка преобразования ввода элемента матрицы. Введите целое число!’);

flag:=true;

end;

end;

if ((size<3)or(size>32768)) then

begin

flag:=true;

ShowMessage(‘Ошибка ввода смещения. Введите значение в допустимом диапозоне’);

end;

InputArray. ColCount:=size;

end;

end.

Инструкция пользователю

Данная программа создана для создания графика по вводимым точкам с изменением его цвета. Заполните массив точек и введите цвет точки.

Инструкция программисту

Для создания динамического массива точек был использована структура arra=array of array of integer. Список переменных, используемых в программе, для решения поставленной задачи, представлен в таблице 1.1.

Таблица 1.1 — Перечень переменных для решения поставленной задачи

Имя

Тип

Описание

i

integer

счетчик цикла

arr

boolean

динамический массив точек

Список используемых компонентов представлен в таблице 1.2.

Таблица 1.2 — Перечень используемых компонентов и их описание

MainProgramInf

TLabel

Информация о назначении ПО

startinf

TLabel

Объект для вывода информации на дисплей

InputArray

TStringGrid

Таблица для ввода массива точек

endinformation

TLabel

Объект для вывода информации на дисплей

start:

TButton

Объект для запуска программы

InputChange

TLabel

Ввод нового размера таблицы

inputcolor

TEdit

Ввод цвета

Graph

TChart

Объект, на котором выводится график

Graph_Points

TLineSeries

Объект — график

X_inf

TLabel

обозначение ввода координаты Х

Y_inf

TLabel

обозначение ввода координаты Y

Colors

TColorDialog

Объект для выбора цвета графика

InfWind

TLabel

Информация о вводе размера

InputLength

TEdit

Объект для ввода размера массива точек

StartLength

TButton

Объект для изменения размера массива точек

Тестовый пример

Для проверки работоспособности программы были введены начальные данные. Программа выдаст результат (рисунок 1.2).

Рисунок 1.2 – Пример работы программы

2.  Схема алгоритма

На рисунках 2.1 и 2.2 приведена схема алгоритма создания броуновского движения молекул.

Подпись: Подпрограмма для вывода записи в Word файл рисунка и подрисуночной подписи
procedure TMainProgram.StartClick(Sender: TObject);
Локальные переменные:
delay: integer - Пауза при выполнении программы
long: integer - Размер массива точек
I: integer - счетчик цикла
V: integer - Скорость передвижения молекул
j: integer - счетчик цикла
t: integer - вспомогательная переменная для паузы программы
p: points - Массив с характеристиками точек
Подпись: check(delay,long,V,InputDelay,InputLong,InputV)

 

1

 

2

 

 

Рисунок 2.1–Схема алгоритма создания массива случайных точек

Подпись: GetTickCount- t>=1000
,Подпись: (((p[i].X+round(V*sin(p[i].Dir)))<380) and ((p[i].X+round(V*sin(p[i].Dir)))>5))
,Подпись: (((p[i].Y+round(V*cos(p[i].Dir)))<340)and((p[i].Y+round(V*cos(p[i].Dir)))>5))

Рисунок 2.2–Схема алгоритма имитации броуновского движения молекул

Текст программы

Ниже приведён текст программы, написанный на языке программирования Delphi 7, для создания на канве броуновского движения молекул.

unit lab;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

TMainForm = class(TForm)

Start: TButton;// Объект для запуска программы

InfInput: TLabel;// Объект с информацией о программе

Pict: TImage;// Объект, на который выводится броуновское движение

InputDelay: TEdit;// Окно для ввода длительности паузы

InfLong: TLabel;// Информация о вводе размера массива

InputLong: TEdit;// Окно для ввода массива

InfDelay: TLabel;// Информация о вводе длительности паузы

InfV: TLabel;// Информация о вводе скорости молекулы

InputV: TEdit;// Окно для ввода скорости молекулы

procedure StartClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

point = record

Vx, Vy:integer;

X, Y:integer;

Dir:real;

end;

points=array of point;

var

Form1: TForm1;

implementation

{$R *.dfm}

{Подпрограмма для проверки ввода}

function check(var delay:integer;var long:integer;var V:integer;InputDelay:TEdit;InputLong:TEdit;InputV:TEdit):boolean;

begin

result:=true;

try

if ((strtoint(InputDelay. Text)<=MaxInt)and(strtoint(InputDelay. Text)>-MaxInt)and(strtoint(InputLong. Text)<=MaxInt)and(strtoint(InputLong. Text)>-MaxInt)and(strtoint(InputV. Text)<=MaxInt)and(strtoint(InputV. Text)>-MaxInt)) then

begin

delay:=strtoint(InputDelay. Text);

long:=strtoint(InputLong. Text);

V:=strtoint(InputV. Text);

end

else

result:=false;

except

on EconvertError do

begin

ShowMessage(‘Ошибка считывания численного значения!!!’);

result:=false;

end;

end;

end;

{Подпрограмма для создания динамического массива}

function getmem(var p:points;long:integer):boolean;

begin

SetLength(p, long);

if (p=nil) then

ShowMessage(‘Ошибка выделения памяти!’);

end;

procedure freemem(var p:points;long:integer);

begin

p:=nil

end;

{Подпрограмма для очистки канвы}

procedure clear(var Pict:TImage);

var i, j:integer;

begin

for i:=1 to 385 do

for j:=1 to 345 do

Pict. Canvas. Pixels[i, j]:=clWhite;

end;

{Подпрограмма для создания имитации броуновского движения точек}

procedure TForm1.StartClick(Sender: TObject);

var delay, long, i,V, j,t:integer;

p:points;

begin

if check(delay, long, V,InputDelay, InputLong, InputV) then

begin

SetLength(p, long);

for i:=0 to long-1 do

begin

p[i].Dir:=Random(360)*pi/180;

p[i].X:=random(384);

p[i].Y:=random(344);

end;

j:=0;

repeat

inc(j);

for i:=0 to long-1 do

begin

if (((p[i].X+round(V*sin(p[i].Dir)))<380) and ((p[i].X+round(V*sin(p[i].Dir)))>5)) then

p[i].Vx:=round(V*sin(p[i].Dir))

else

begin

p[i].Vx:=-round(V*sin(-p[i].Dir));

p[i].Dir:=-p[i].Dir;

end;

if (((p[i].Y+round(V*cos(p[i].Dir)))<340)and((p[i].Y+round(V*cos(p[i].Dir)))>5)) then

p[i].Vy:=round(V*cos(p[i].Dir))

else

begin

p[i].Vy:=-round(V*cos(p[i].Dir));

p[i].Dir:=-p[i].Dir;

end;

p[i].X:=p[i].X+p[i].Vx;

p[i].Y:=p[i].Y+p[i].Vy;

Pict. Canvas. Pixels[(p[i].X),(p[i].Y)]:=clBlack;

end;

t:=GetTickCount+delay;

clear(Pict);

repeat

Application. ProcessMessages;

until GetTickCount-t>=1000;

until (not(j<>long*2));

freemem(p, long);

end;

end;

end.

Инструкция пользователю

Данная программа создана для вывода на канву броуновского движения точки. Пользователь должен ввести паузу между начертаниями точки и количество рисуемых точек.

Инструкция программисту

Для решения задачи был использован тип-запись point. Структуры этого типа приведены в таблице 2.1. Список переменных, используемых в программе, для решения поставленной задачи, представлен в таблице 2.2.

Таблица 2.1 – Структуры типа point

Имя

Тип

Описание

Vx

integer

Скорость молекулы относительно X

Vy

integer

Скорость молекулы относительно Y

X

integer

Координаты по оси Х

Y

integer

Координаты по оси Y

Dir

real

Угол движения молекулы

Таблица 2.2 — Перечень переменных для решения поставленной задачи

Имя

Тип

Описание

delay

integer

Пауза при выполнении программы

long

integer

Размер массива точек

i

integer

счетчик цикла

V

integer

Скорость передвижения молекул

j

integer

счетчик цикла

t

integer

вспомогательная переменная для паузы программы

p

points

Массив с характеристиками точек

Список используемых компонентов представлен в таблице 2.3

Таблица 2.3 — Перечень используемых компонентов и их описание

Имя

Тип

Описание

Start

TButton

Объект для запуска программы

InfInput

TLabel

Объект с информацией о программе

Pict

TImage

Объект, на который выводится броуновское движение

InputDelay

TEdit

Окно для ввода длительности паузы

InfLong

TLabel

Информация о вводе размера массива

InputLong

TEdit

Окно для ввода массива

InfDelay

TLabel

Информация о вводе длительности паузы

InfV

TLabel

Информация о вводе скорости молекулы

InputV

TEdit

Окно для ввода скорости молекулы

Тестовый пример

Для проверки работоспособности программы были введены следующие данные. Программа выдаст результат (рисунок 2.3).

Рисунок 2.3 – Пример работы программы

3.  Схема алгоритма

На рисунке 3.1 приведена схема алгоритма вывода в Word файл рисунка и подрисуночной подписи.

Подпись: ((Find_Picture.Execute))
,Подпись: Word:=CreateOleObject('Word.Application');
 Word.Visible:=True;
 Word.Documents.Add; Word.ActiveDocument.Shapes.AddOLEObject(ClassType:='Paint.Picture',FileName:=Find_Picture.FileName,left:=Picture.Left,top:=Picture.Top,width:=Picture.Width,Height:=Picture.Height);
,Подпись: InputfromFile(picture,Find_Picture)
,Подпись: (check(InputParag, parag))

Подпись:

1

 

Блок-схема:

Рисунок 3.1 – Схема алгоритма вывода в Word картинки и подрисуночной подписи

Текст программы

Ниже приведён текст программы, написанный на языке программирования Delphi 7, для вывода в файл MS Word картинки и подрисуночной подписи.

unit ProgLab;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, ExtDlgs, ComObj;

type

TMainProgram = class(TForm)

Picture: TImage;// Объект, на который выводится картинка

InputString: TEdit;// Строка, записываемая в файл

Start: TButton;// Объект для запуска программы

Find_Picture: TOpenPictureDialog;// Объект для выбора адреса картинки

InfInpString: TLabel;// Информация о вводе строки

InputParag: TEdit;// Объект для ввода числа пропускаемых строк

InfInpParag: TLabel;// Информация о вводе числа пропускаемых строк

InfMainProg: TLabel;// Информация о основной программе

procedure StartClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainProgram: TMainProgram;

implementation

{$R *.dfm}

{Подпрограмма для проверки ввода данных}

function check(InputParag:TEdit;var parag:integer):boolean;

begin

try

parag:=strtoint(InputParag. Text);

except

on EConvertError do

begin

ShowMessage(‘Ошибка ввода! Введите целое число!’);

result:=false;

end;

end;

if ((parag<1)or(parag>32768)) then

begin

result:=false;

ShowMessage(‘Ошибка ввода смещения. Введите значение в допустимом диапозоне [0,32768]’);

end;

end;

{Подпрограмма для ввода картинки}

function InputfromFile(var picture:TImage;var Find_Picture: TOpenPictureDialog):boolean;

begin

if FileExists(Find_Picture. FileName) then

Picture. Picture. LoadFromFile(Find_Picture. FileName);

end;

{Подпрограмма для пересылки картинки и подрисуночной подписи в файл Word}

procedure TMainProgram. StartClick(Sender: TObject);

var word:variant;

i, parag:integer;

begin

if ((Find_Picture. Execute)) then

if (check(InputParag, parag)) then

if InputfromFile(picture, Find_Picture) then

begin

Word:=CreateOleObject(‘Word. Application’);

Word. Visible:=True;

Word. Documents. Add; Word. ActiveDocument. Shapes. AddOLEObject(ClassType:=’Paint. Picture’,FileName:=Find_Picture. FileName, left:=Picture. Left, top:=Picture. Top, width:=Picture. Width, Height:=Picture. Height);

for i:=1 to Parag do

Word. ActiveDocument. Paragraphs. Add;

Word. ActiveDocument. Range. InsertAfter(InputString. Text);

Word. Quit;

end;

end;

end.

Инструкция пользователю

Данная программа создана для вывода подрисуночной надписи и рисунка в файл MS Word. Для запуска программы необходимо активировать вкладку «Пуск».

Инструкция программисту

Список переменных, используемых в программе, для решения поставленной задачи, представлен в таблице 3.1.

Таблица 3.1 — Перечень переменных для решения поставленной задачи

Имя

Тип

Описание

word

variant

Файловая переменная Word

i

integer

счётчик цикла

parag

integer

Число пропускаемых строк

Список используемых компонентов представлен в таблице 3.2.

Таблица 3.2 — Перечень используемых компонентов и их описание

Имя

Тип

Описание

Picture

TImage

Объект, на который выводится картинка

InputString

TEdit

Строка, записываемая в файл

Start

TButton

Объект для запуска программы

Find_Picture

TOpenPictureDialog

Объект для выбора адреса картинки

InfInpString

TLabel

Информация о вводе строки

InputParag

TEdit

Объект для ввода числа пропускаемых строк

InfInpParag

TLabel

Информация о вводе числа пропускаемых строк

InfMainProg

TLabel

Информация о основной программе

Тестовый пример

Для проверки работоспособности программы были введены следующие данные. Программа выдаст результат (рисунок 3.2-3.3).

Рисунок 3.2 – Пример окна программы по выводу рисунка и подрисуночной подписи в файл MS Word

Рисунок 3.3 – Пример работы программы по выводу рисунка и подрисуночной подписи в файл MS Word

Вывод

В ходе выполнения данной лабораторной работы я научился использовать графику и обращение с MS Word в Delphi, изучил способы работы и правила с графиками, изображениями, создания изображений на канве, создание связей с файлами MS Word. С помощью этих полученных знаний было выполнено задание данной лабораторной работы.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020

А ты боишься COVID-19?

 Пройди опрос и получи промокод