Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   Painting simple ellips in C++ Builder. Exception raising. (http://www.go4expert.com/forums/painting-simple-ellips-cpp-builder-t16525/)

hazamin 12Mar2009 21:27

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

xpi0t0s 13Mar2009 20:57

Re: Painting simple ellips in C++ Builder. Exception raising.
 
If the compiler itself generates an exception then I'd say that's a compiler bug. The compiler should throw an error if there's something wrong with the code, not crash.
Are you sure you mean the compiler and not the editor?


All times are GMT +5.5. The time now is 13:37.