Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Графика (http://forum.oszone.net/showthread.php?t=193636)

-Marshall- 11-12-2010 12:20 1563195

Графика
 
Здравствуйте, работаю в среде C++ Builder'e и вчера впервые встретился с понятием графика. Задача заключается в том, что создается событие onMouseMove и при наведении его на форму, активируется компонент TImage, который через Canvas отрисовывает изображение.



Вот, что у меня только получилось:
Код:

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
                  int Y)
{
Image1->Canvas->Brush->Color=clWhite;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->Brush->Color=clGreen;
Image1->Canvas->Ellipse(X-20,Y-20,X+20,Y+20);
}

Помогите, пожалуйста..

-Marshall- 11-12-2010 18:14 1563378

В общем, что вышло, с графикой я разобрался, только вот одна накладка, не получается сделать часть трапеции серой..
Вот код:

Код:

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
                  int Y)
{
int r=23;  //radius of circles
int X1=X+80, Y1=Y; //координаты второго круга

Image1->Canvas->Brush->Color=clWhite;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->Brush->Color=clGreen;  //color of circles
Image1->Canvas->Ellipse(X-r,Y-r,X+r,Y+r);  //left circle
Image1->Canvas->Ellipse(X1-r,Y1-r,X1+r,Y1+r); //right cicrlce
//Каркас (трапеция)
Image1->Canvas->Pen->Color=clGray;
Image1->Canvas->Brush->Color=clGray;
Image1->Canvas->MoveTo(X,Y);  //начальная точка первого круга
Image1->Canvas->LineTo(X1,Y1); //линия до второго круга
Image1->Canvas->MoveTo(X1,Y1);  //переход к центру второго круга
Image1->Canvas->LineTo(X1,Y1-60); //линия от 2 круга к верху
Image1->Canvas->MoveTo(X1,Y1-60); //переход к предыдущей линии
Image1->Canvas->LineTo(X+20,Y-60); //верхняя линия
Image1->Canvas->MoveTo(X+20,Y-60); //переход к линии сверху к точке слева
Image1->Canvas->LineTo(X,Y); //замыкающая линия от верха до центра 1 круга
//
Image1->Canvas->MoveTo(X+10,Y-30);//переход к точке по центру левой замыкающей линии
Image1->Canvas->LineTo(X1,Y1-30); //центральная линия в центре трапеции
Image1->Canvas->MoveTo(X+20,Y-60) ;//переход к точке к левому верхнему углу трапеции
Image1->Canvas->LineTo(X+20,Y-30); //чертеж линии от верхней левой точки к центральной линии
}


El Scorpio 15-12-2010 06:36 1566194

Цитата:

Цитата -Marshall-
Помогите, пожалуйста.. »

Помогаю.
Данная функция будет исполняться при КАЖДОМ перемещении мыши в окне.
Оно вам надо?
Лучше так

Код:

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,int Y)
{
  if (fDrawed == false)
  {
      this->DrawFigure (Image1->Canvas);
      fDrawed = true;
  }
}

Переменная fDrawed - поле класса TForm1 - означает факт прорисовки картинки.
Функция DrawFigure - метод класса TForm1 - выполняет прорисовку картинки на объект типа TCanvas, указатель на который передаётся параметром функции


Время: 12:02.

Время: 12:02.
© OSzone.net 2001-