Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №4 / Lab4 / Unit1
.pas unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
Label1: TLabel;
Label2: TLabel;
//procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UpdateP();
procedure redraw();
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
p: integer =5; // порядок кривой
u: integer =7; // длина штриха
implementation
{$R *.dfm}
{ Кривую Гильберта можно получить путем
соединения элементов а,b,с и d.
Каждый элемент строит
соответствующая процедура. }
procedure afun(i:integer; canvas: TCanvas); forward;
procedure bfun(i:integer; canvas: TCanvas); forward;
procedure cfun(i:integer; canvas: TCanvas); forward;
procedure dfun(i:integer; canvas: TCanvas); forward;
// Элементы кривой
procedure afun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
dfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
cfun (i-1, canvas);
end;
end;
procedure bfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
cfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u, canvas.PenPos.Y);
dfun (i-1, canvas);
end;
end;
procedure cfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
cfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
cfun(i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
afun (i-1, canvas);
end;
end;
procedure dfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
dfun(i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos. Y) ;
dfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
bfun (i-1, canvas);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
redraw();
{Form1.Canvas.MoveTo(u, u) ;
afun(p,image1.Canvas); }// вычертить кривую Гильберта
//Form1.Refresh;
{image1.Canvas.Brush.Color:=clBlue;
image1.Canvas.Pen.Color:=clBlue;
image1.Canvas.Rectangle (10,10,70,70);
image1.Canvas.Rectangle (100,100,7,7);
image1.Canvas.MoveTo(u, u) ;
image1.Canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+100); }
//ShowMessage('ky ky');
{ image1.canvas.pen.Color:=clBlue;
image1.Canvas.Brush.Color:=clBlue;
image1.Canvas.Rectangle(0,0,image1.width-5,image1.height-5);
image1.canvas.pen.Color:=clblack; }
end;
procedure TForm1.redraw();
begin
p:= TrackBar1.position;
u:= TrackBar2.position;
image1.canvas.pen.Color:=clwhite;
image1.Canvas.Brush.Color:=clwhite;
image1.Canvas.Rectangle(0,0,image1.width,image1.height);
image1.canvas.pen.Color:=clblack;
image1.Canvas.Brush.Color:=clblack;
image1.Canvas.MoveTo(u, u) ;
afun(p,image1.Canvas); // вычертить кривую Гильберта
end;
procedure TForm1.updatep();
begin
p:= TrackBar1.position;
redraw();
ShowMessage('qwe');
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
Label1: TLabel;
Label2: TLabel;
//procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UpdateP();
procedure redraw();
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
p: integer =5; // порядок кривой
u: integer =7; // длина штриха
implementation
{$R *.dfm}
{ Кривую Гильберта можно получить путем
соединения элементов а,b,с и d.
Каждый элемент строит
соответствующая процедура. }
procedure afun(i:integer; canvas: TCanvas); forward;
procedure bfun(i:integer; canvas: TCanvas); forward;
procedure cfun(i:integer; canvas: TCanvas); forward;
procedure dfun(i:integer; canvas: TCanvas); forward;
// Элементы кривой
procedure afun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
dfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
cfun (i-1, canvas);
end;
end;
procedure bfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
cfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u, canvas.PenPos.Y);
dfun (i-1, canvas);
end;
end;
procedure cfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
bfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
cfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
cfun(i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
afun (i-1, canvas);
end;
end;
procedure dfun(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
afun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
dfun(i-1, canvas);
canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos. Y) ;
dfun (i-1, canvas);
canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
bfun (i-1, canvas);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
redraw();
{Form1.Canvas.MoveTo(u, u) ;
afun(p,image1.Canvas); }// вычертить кривую Гильберта
//Form1.Refresh;
{image1.Canvas.Brush.Color:=clBlue;
image1.Canvas.Pen.Color:=clBlue;
image1.Canvas.Rectangle (10,10,70,70);
image1.Canvas.Rectangle (100,100,7,7);
image1.Canvas.MoveTo(u, u) ;
image1.Canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+100); }
//ShowMessage('ky ky');
{ image1.canvas.pen.Color:=clBlue;
image1.Canvas.Brush.Color:=clBlue;
image1.Canvas.Rectangle(0,0,image1.width-5,image1.height-5);
image1.canvas.pen.Color:=clblack; }
end;
procedure TForm1.redraw();
begin
p:= TrackBar1.position;
u:= TrackBar2.position;
image1.canvas.pen.Color:=clwhite;
image1.Canvas.Brush.Color:=clwhite;
image1.Canvas.Rectangle(0,0,image1.width,image1.height);
image1.canvas.pen.Color:=clblack;
image1.Canvas.Brush.Color:=clblack;
image1.Canvas.MoveTo(u, u) ;
afun(p,image1.Canvas); // вычертить кривую Гильберта
end;
procedure TForm1.updatep();
begin
p:= TrackBar1.position;
redraw();
ShowMessage('qwe');
end;
end.