Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 21:44   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию похоже с описанием класса накосячил

Код:
Tpers = class(TObject)
  pcanvas:tcanvas;
  Constructor Create;
  Destructor Destroy; override;
  procedure coolspot(cx,cy:integer; csColor:tcolor);
  end;

Код:
constructor Tpers.Create;
begin
inherited;
	pcanvas:=Tcanvas.create;
end;

destructor Tpers.Destroy;
begin
pcanvas.Free;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pers.pcanvas:=imgpole.Canvas;             {imgpole:timage}
pers.coolspot(100,100,clred);
end;

procedure tpers.coolspot(cx,cy:integer; csColor:tcolor);
begin
pers:=tpers.Create;
pcanvas.Brush.Color:=cscolor;
pcanvas.Ellipse(cx-10,cy+10,cx+10,cy-10);
pers.Free;
end;
сначала этот код написал без конструктора\деструктора, но эа этой строке вылетала ошибка: "access violation at address in module"
Код:
pers.pcanvas:=imgpole.Canvas;
добавил конструктор, снова вылетает нечто похожее

что делать?
MetR вне форума Ответить с цитированием
Старый 02.12.2011, 22:25   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Нельзя создавать сам объект в его же описании.
Не нужно создавать объект TCanvas, если затем переменной присваивается ссылка на существующий объект:
Код:
pers.pcanvas := imgpole.Canvas;
Поэтому в описанной ситуации не нужны ни конструктор, ни деструктор. А достаточно ниже показанных процедур.
Код:
procedure Tpers.coolspot(cx, cy: integer; csColor: tcolor);
begin
  pcanvas.Brush.Color:=cscolor;
  pcanvas.Ellipse(cx-10,cy+10,cx+10,cy-10);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  pers:=tpers.Create;
  pers.pcanvas:=Image1.Canvas;             {imgpole:timage}
  pers.coolspot(100,100,clred);
  pers.Free;
end;
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Накосячил :-( rezak91 Паскаль, Turbo Pascal, PascalABC.NET 1 24.05.2010 20:58
Си++. Помогите составить прогу а то я чё то накосячил Sid-666 Помощь студентам 1 06.05.2009 01:55
Похоже, некоторые проблемы... mihali4 Свободное общение 3 08.03.2008 23:41
Накосячил..что делать???(( vip131 Свободное общение 2 07.02.2008 07:42
Где я накосячил? Acid Помощь студентам 4 30.05.2007 12:56