Painting simple ellips in C++ Builder. Exception raising.
hi. I am writing application on C++ Builder which draws ellipse on Canvas. i get run-time error: When canvas color is being changed compiler generates exception.
So, i have created new unit (unit2) with Tellipse class declaration:
Unit2.h:
Code:
#ifndef Unit2H
#define Unit2H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
class Tellipse
{
int x1,y1,x2,y2;
TCanvas *canvic;
TColor *col;
public:
Tellipse(TCanvas *canv, int px1, int py1, int px2, int py2,TColor pcol );
~Tellipse();
void draw(bool visible);
void move(int dx, int dy);
} ;
extern PACKAGE Tellipse *el;
#endif
Here is implementation (unit2.cpp):
Code:
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
Tellipse::Tellipse(TCanvas *canv, int px1, int py1, int px2, int py2,TColor pcol) // initializing values in constructor
{
canvic=canv;
x1=px1; x2=px2; y1=py1; y2=py2;
canvic->Pen->Color=pcol;
}
Tellipse::~Tellipse()
{}
void Tellipse::draw(bool visible) // for drawing ellipse on canvas
{
if (visible) canvic->Pen->Color=*pcol ; //here is all ok
else canvic->Pen->Color=clWhite; // this line compiler allocates with blue color
canvic->Brush->Color=clWhite; // if i delete line above compiler allocates this line and raises exception
canvic->Ellipse(x1,y1,x2,y2); // if i delete two lines above compiler allocates this line and raises exception
}
void Tellipse::move(int dx, int dy) // doesn't matter. Changing coordinates move ellipse somewhere
{
draw(false); // stumbling block.
x1=x1+dx; x2=x2+dx;
y1=y1+dy; y2=y2+dy;
draw(true); // stumbling block.
}
Telllipse::draw() is stumbling block.
In main unit (unit1.cpp) On form paint i call void __fastcall TForm1::formpaint(TObject *Sender)
Code:
....
Tellipse *el;
....
....
void __fastcall TForm1::formpaint(TObject *Sender)
{
Tellipse *el=new Tellipse(PaintBox1->Canvas,0,10,3,20, clBlack);
PaintBox1->Canvas->Pen->Color=clWhite;
PaintBox1->Canvas->Pen->Style=psDot;
PaintBox1->Canvas->Brush->Color=clWhite;
PaintBox1->Canvas->Rectangle(PaintBox1->ClientRect);
el->draw(true); // stumbling block.
}
What causes may underlie this error? Thanks for attention
|