Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.02.2012, 01:34
7nik 7nik вне форума
Прохожий
 
Регистрация: 28.02.2012
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию Ошибка EAcessViolation при перемещении переменных из вара в класс

Необходимо написать программу с применением класса. Написал сначала без класса - все ок. Перенес процедуры в класс - все ок. Перенес переменные из вара в класс - начало выбивать ошибку EAcessViolation при обращении к любой из этих переменных, а их значение = inaccessible value. Пробовал обращаться и напрямую и через Property - без разницы.

Unit1:
Код HTML:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg, StdCtrls, unit2; type TForm1 = class(TForm) PaintBox1: TPaintBox; Start: TButton; exit: TButton; Timer1: TTimer; EditSpeed: TLabeledEdit; EditAlpha: TLabeledEdit; procedure StartClick(Sender: TObject); procedure exitClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; B:TPaint; implementation {$R *.dfm} procedure TForm1.StartClick(Sender: TObject); //установка новых значений var n:integer; Buff:real; begin PaintBox1.Canvas.FillRect(PaintBox1.ClientRect); val(EditSpeed.Text,Buff,n); B.Speed:=Buff; val(EditAlpha.Text,Buff,n); B.Alpha:=Buff; B.Drift:=0; if (B.Speed=0) then Timer1.Enabled:=false else Timer1.Enabled:=true; Timer1Timer(self); end; procedure TForm1.exitClick(Sender: TObject); //выход begin Application.Terminate; end; procedure TForm1.Timer1Timer(Sender: TObject); //"обновление рисунка" begin B.Paint; end; procedure TForm1.FormResize(Sender: TObject); //смена масштаба при смене размера формы begin if (PaintBox1.Width/400>PaintBox1.Height/300) then B.Scale:=PaintBox1.Height/300 else B.Scale:=PaintBox1.Width/400-0.03; if (B.Speed=0) then B.Paint; end; procedure TForm1.EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); //обработка нажатия enter begin if (Key=13) then StartClick(self) ; end; end.

Unit2:
Код HTML:
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg, StdCtrls; type TBabina=class(TObject) Private AlphaP,SpeedP,DriftP,scaleP:real; public Procedure Babina(a:real; wid,x,y,r:integer); procedure Line(x1,y1,x2,y2,wid:integer); Property Alpha:real read AlphaP write AlphaP; property Speed:real read SpeedP write SpeedP; property Drift:real read DriftP write DriftP; property Scale:real read scaleP write ScaleP; end; TPaint=class(TBabina) procedure Paint; end; implementation Uses unit1; procedure TPaint.Paint; //расчет новых значений var l1,l2:real; begin l1:=7-round(Drift/1.5) mod 25; Line(75+round(l1),206,300+round(l1),206,7); l1:=frac(Drift/200/Pi)*Pi; Babina(alpha/180*Pi+l1,10,300,100,100); l2:=frac(Drift/150/Pi)*Pi; Babina(alpha/180*Pi+l2,10,75,125,75); if (round(l1*1000)=0)and(round(l2*1000)=0) then Drift:=0; Drift:=Drift+Speed; end; procedure TBabina.Line(x1,y1,x2,y2,wid:integer); //рисование толстой пунктирной линии var i:integer; begin with Form1.PaintBox1.Canvas do begin Pen.Width:=1; Pen.Style:=psDash; Pen.Color:=clBlack; for i:=0 to wid-1 do begin MoveTo(round(x1*scale),round(y1*scale)-i); LineTo(round(x2*scale),round(y2*scale)-i); end; end; end; Procedure TBabina.Babina(a:real; wid,x,y,r:integer); //рисование бабины(колесо с 4 спицами) begin with Form1.PaintBox1.Canvas do begin Pen.Color:=clMaroon; Pen.Width:=wid; wid:=wid div 2; Brush.Color:=clBtnFace; Ellipse(round((x+wid-r)*scale),round((y+wid-r)*scale),round((x+wid+r)*scale),round((y+wid+r)*scale)); dec(r); MoveTo(round((x+wid+round(r*sin(a)))*scale),round((y+wid-round(r*cos(a)))*scale)); LineTo(round((x+wid-round(r*sin(a)))*scale),round((y+wid+round(r*cos(a)))*scale)); MoveTo(round((x+wid-round(r*cos(a)))*scale),round((y+wid-round(r*sin(a)))*scale)); LineTo(round((x+wid+round(r*cos(a)))*scale),round((y+wid+round(r*sin(a)))*scale)); end; end; end.

сам проект project1.zip
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter