Показать полную графическую версию : [решено] Графика
-Marshall-
11-12-2010, 12:20
Здравствуйте, работаю в среде C++ Builder'e и вчера впервые встретился с понятием графика. Задача заключается в том, что создается событие onMouseMove и при наведении его на форму, активируется компонент TImage, который через Canvas отрисовывает изображение.
http://s1.ipicture.ru/uploads/20101211/qPAWJxkW.png (http://s1.ipicture.ru/Gallery/Viewfull/2550781.html)
Вот, что у меня только получилось:
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
В общем, что вышло, с графикой я разобрался, только вот одна накладка, не получается сделать часть трапеции серой..
Вот код:
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
Помогите, пожалуйста.. »
Помогаю.
Данная функция будет исполняться при КАЖДОМ перемещении мыши в окне.
Оно вам надо?
Лучше так
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, указатель на который передаётся параметром функции
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.