StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Timer1: TTimer;
Timer2: TTimer;
procedure FormClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type
sneg=record
x,y,vx,vy:array [1..3000] of integer;
end;
var
Form1: TForm1;
i,N,t,q1,q2:integer;
sneginka:sneg;
a:string;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormClick(Sender: TObject);
begin
Timer1.Enabled:=false;
q1:=Mouse.CursorPos.x;
q2:=Mouse.CursorPos.y;
with sneginka do
for i:=1 to N do
begin
vx[i]:=(q1-x[i]) div 50;
vy[i]:=(q2-y[i]) div 50;
end;
Timer2.Enabled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject); //начальное положение
begin
a:=inputbox('Снежинки','Введите количество снежинок','150');
N:=strtoint(a);
with sneginka do
for i:=1 to N do
begin
x[i]:=random(width);
y[i]:=random(height);
vx[i]:=random(5);
vy[i]:=random(50);
Form1.Canvas.Pen.Color:=clWhite;
Form1.Canvas.Pen.Width:=5;
Form1.Canvas.MoveTo(x[i],y[i]); // перемещаем позицию пера
Form1.Canvas.LineTo (x[i],y[i]); //рисование линии
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject); //таймер
begin
with sneginka do
for i:=1 to N do
begin
Form1.Canvas.Pen.Color:=clBlack;
Form1.Canvas.MoveTo(x[i],y[i]); // перемещаем позицию пера
Form1.Canvas.LineTo (x[i],y[i]); //рисование линии
Form1.Canvas.Pen.Color:=clWhite;
x[i]:=x[i]+vx[i];
y[i]:=y[i]+vy[i];
Form1.Canvas.MoveTo(x[i],y[i]); // перемещаем позицию пера
Form1.Canvas.LineTo (x[i],y[i]); //рисование линии
if x[i]>=width+20 then x[i]:=random(width);
if y[i]>=height+20 then y[i]:=random(height);
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
with sneginka do
for i:=1 to N do
begin
Form1.Canvas.Pen.Color:=clBlack;
Form1.Canvas.MoveTo(x[i],y[i]); // перемещаем позицию пера
Form1.Canvas.LineTo (x[i],y[i]); //рисование линии
Form1.Canvas.Pen.Color:=clWhite;
x[i]:=x[i]+vx[i];
y[i]:=y[i]+vy[i];
Form1.Canvas.MoveTo(x[i],y[i]); // перемещаем позицию пера
Form1.Canvas.LineTo (x[i],y[i]); //рисование линии
if (x[i]>=width+20) or (x[i]<-20) then begin x[i]:=random(height); vx[i]:=random(5); end;
if (y[i]>=height+20) or (y[i]<-20) then begin y[i]:=random(height); vy[i]:=random(50); end;
end;
end;
end.
4.3 Результат работы программы
На рисунке 15 изображено окно задания количества снежинок.
Рисунок 15 - Окно задания количества снежинок
На рисунке 16 представлено главное окно программы.
Рисунок 16 - Главное окно программы
На рисунке 17 представлено окно программы в момент нажатия левой кнопки мыши.
Рисунок 17 - Окно программы в момент нажатия левой кнопки мыши
Заключение
В результате учебной практики было создано 4 программы, использующие графические возможности Lazarus.
Первая программа рисует график заданной функции в декартовой системе координат в интервале, который указывает пользователь.
Вторая - рисует график заданной функции в полярной системе координат в интервале, который задает пользователь программы.
Третья программа - это текстовый редактор с базовыми функциями: открыть файл, сохранить файл, закрыть файл, а также с функцией изменения шрифта и цвета фона.
Четвертая - программа изображает движение снежинок и позволяет при нажатии левой кнопки мыши на экран направить их в эту точку.
Библиографический список
1 Мансуров, К.Т. Основы программирования в среде Lazarus / К.Т. Мансуров. М., 2010. 772 с.
2 Free Pascal и Lazarus: Учебник по программированию/ Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер. М.: Изд. ALT Linux; ДМК Пресс, 2010. 438 c.