![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день, колупаю классы, код компилится, но при нажатии на кнопку выбивает ошибку доступа к памяти(?), собственно интересует где облажался с этим.
Unit1: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math, Unit2; type TForm1 = class(TForm) Button1: TButton; Image1: TImage; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} var a, b, c, d, al, bl, cl, dl : Integer; alpha : Extended; Krug : TKrug; procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text := '20'; Edit2.Text := '40'; Edit3.Text := '60'; Edit4.Text := '80'; a := StrToInt(Edit1.Text); b := StrToInt(Edit2.Text); c := StrToInt(Edit3.Text); d := StrToInt(Edit4.Text); al := a; bl := b; cl := c; dl := d; alpha := 0; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin //ShowMessage(IntToStr(key)); //Key-codes if (Key = 37) then begin Button2.Click; // Left end else if (Key = 38) then begin // Up end else if (Key = 39) then begin Button3.Click; // Right end else if (Key = 40) then begin // Down end; end; procedure TForm1.Button1Click(Sender: TObject); begin Krug.Create(a, b, c, d, al, bl, cl, dl, alpha); end; procedure TForm1.Button2Click(Sender: TObject); begin Krug.MoveLeft(a, b, c, d, al, bl, cl, dl, alpha, Image1, Canvas); end; procedure TForm1.Button3Click(Sender: TObject); begin Krug.MoveRight(a, b, c, d, al, bl, cl, dl, alpha, Image1, Canvas); end; end. Unit2: Код:
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math; type TViz = class(Tobject) Canvas : TCanvas; Button1: TButton; Image1: TImage; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Button2: TButton; Button3: TButton; a, b, c, d, al, bl, cl, dl: Integer; alpha: Extended; Procedure Ris; virtual; abstract; //Procedure Show; //Procedure Hide; Procedure MoveLeft(a, b, c, d, al, bl, cl, dl : Integer; alpha : Extended; Image1 : TImage; Canvas : Tcanvas); Procedure MoveRight(a, b, c, d, al, bl, cl, dl : Integer; alpha : Extended; Image1 : TImage; Canvas : Tcanvas); end; TKrug = class(Tviz) a, b, c, d, al, bl, cl, dl : Integer; alpha : Extended; Constructor Create(a, b, c, d, al, bl, cl, dl : Integer; alpha : Extended); end; var Form1 : TViz; Image1 : TImage; Krug : TKrug; implementation Constructor TKrug.Create; begin Form1.Image1.Canvas.FillRect(Image1.ClientRect); Form1.Image1.Canvas.Ellipse(a, b, c, d); Form1.Image1.Canvas.MoveTo(a, c); Form1.Image1.Canvas.LineTo(c, c); Form1.Image1.Canvas.MoveTo(b, b); Form1.Image1.Canvas.LineTo(b, d); end; Procedure TViz.MoveLeft; begin if (alpha > 3.1415926535897932385/2) then begin alpha := 0; end; Form1.Image1.Canvas.FillRect(Image1.ClientRect); Form1.Image1.Canvas.Ellipse(a, bl, c, d); Form1.Image1.Canvas.MoveTo(a+al, cl); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b-bl*0.45*abs(sin(alpha))), Round(cl-al*abs(cos(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b+bl*0.45*abs(sin(alpha))), Round(cl+al*abs(cos(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b+bl*0.45*abs(cos(alpha))), Round(cl-al*abs(sin(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b-bl*0.45*abs(cos(alpha))), Round(cl+al*abs(sin(alpha))))]); Dec(a); Dec(c); Dec(b); alpha := alpha + (3.1415926535897932385/24); end; Procedure TViz.MoveRight; begin if (alpha > 3.1415926535897932385/2) then begin alpha := 0; end; Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect); Form1.Image1.Canvas.Ellipse(a, bl, c, d); Form1.Image1.Canvas.MoveTo(a+al, cl); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b+bl*0.45*abs(sin(alpha))), Round(cl-al*abs(cos(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b-bl*0.45*abs(sin(alpha))), Round(cl+al*abs(cos(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b-bl*0.45*abs(cos(alpha))), Round(cl-al*abs(sin(alpha))))]); Form1.Image1.Canvas.Polygon([Point(b, cl), Point(Round(b+bl*0.45*abs(cos(alpha))), Round(cl+al*abs(sin(alpha))))]); Inc(a); Inc(c); Inc(b); alpha := alpha + (3.1415926535897932385/24); end; end. Ошибку выкидывает на втором юните, на строке Код:
Form1.Image1.Canvas.FillRect(Form1.Image1.ClientRect); Последний раз редактировалось Syfer, 20.11.2011 в 18:32. |