
Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UnitMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Image->Canvas->Draw(0,0,NULL);
for(int i=0;i<maxc;i++)
p[i]=NULL;
p[0] = new CComplex(Image, 0, 0,1,0);
p[1] = new CComplex(Image, 20, 20,1,3.14/2);
p[2] = new CComplex(Image, 40, 40,2,3.14/2);
*p[2] = *p[0] = *p[1] / *p[2];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
for(int i=0;i<maxc;i++)
if(p[i])
{
delete p[i];
p[i]=NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReDrawAll()
{
for(int i=0; i<maxc; i++)
if(p[i])
p[i]->Draw();
}
void __fastcall TForm1::ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//add object
if (SpeedBtn1->Down)
{
for(int i=0;i<maxc;i++)
if(p[i]==NULL)
{
for(int j=0;j<maxc;j++)
if(p[j]!=NULL && i!=j)
if(p[j]->IsSelected(X,Y))
return;
if(RadioButton1->Checked)
p[i]=new CComplex(X, Y,Image,StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
if(RadioButton2->Checked)
p[i]=new CComplex(Image, X, Y,StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
break;
}
ReDrawAll();
return;
}
//delete object
if(SpeedBtn2->Down)
{
for(int i=0; i<maxc; i++)
if(p[i])
if(p[i]->IsSelected(X,Y))
{
delete p[i];
p[i]=NULL;
break;
}
ReDrawAll();
return;
}
//Rotate
if(SpeedButton1->Down)
{
for(int i=0; i<maxc; i++)
if(p[i])
if(p[i]->IsSelected(X,Y))
p[i]->Rotate(StrToFloat(Edit3->Text));
ReDrawAll();
return;
}
//perform operations
if(GroupBox4->Visible)
{
for(int j=0; j<maxc; j++)
if(p[j])
if(p[j]->IsSelected(X,Y))
{
int i;
CComplex *p1=NULL,*p2=NULL,*p3=NULL;
for(i=0; i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p1 = p[i];break;}
for(i++;i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p2 = p[i];break;}
for(i++;i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p3 = p[i];break;}
if(p1 && p2 && (!p3))
{
if(SpeedButton3->Down)
*p[j] = *p1 + *p2;
if(SpeedButton4->Down)
*p[j] = *p1 - *p2;
if(SpeedButton5->Down)
*p[j] = *p1 * *p2;
if(SpeedButton6->Down)
*p[j] = *p1 / *p2;
}
break;
}
}
//Save
if(SpeedButton7->Down || SpeedButton8->Down)
{
for(int j=0; j<maxc; j++)
if(p[j])
if(p[j]->IsSelected(X,Y))
{
if(SpeedButton7->Down)
{
ofstream oFile;
oFile.open("z");
if(!oFile) ShowMessage("Сохранение: ошибка");
else
oFile<<*p[j];
oFile.close();
}
if(SpeedButton8->Down)
{
ifstream iFile;
iFile.open("z");
if(!iFile) ShowMessage("Загрузка: ошибка");
else
iFile>>*p[j];
iFile.close();
}
break;
}
}
//select
if(!Shift.Contains(ssShift))
{
for(int i=0; i<maxc; i++)
if(p[i])
p[i]->Mark(false);
}
for(int i=0; i<maxc; i++)
if(p[i])
if(p[i]->IsSelected(X,Y))
p[i]->Mark(true);
//Angle
{
int i;
CComplex *p1=NULL,*p2=NULL,*p3=NULL;
for(i=0; i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p1 = p[i];break;}
for(i++;i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p2 = p[i];break;}
for(i++;i<maxc; i++)
if(p[i])
if(p[i]->Marked())
{p3 = p[i];break;}
if(p1 && p2 && (!p3))
Edit4->Text = FloatToStr(p1->Angle(*p2));
else
Edit4->Text = "Выделите два вектора";
}
}
void __fastcall TForm1::SpeedBtn1Click(TObject *Sender)
{
GroupBox1->Visible = SpeedBtn1->Down;
GroupBox2->Visible = SpeedButton1->Down;
GroupBox3->Visible = SpeedButton2->Down;
GroupBox4->Visible = SpeedButton3->Down ||
SpeedButton4->Down ||
SpeedButton5->Down ||
SpeedButton6->Down;
}
//---------------------------------------------------------------------------