Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3385

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
4.73 Mб
Скачать

int StartCount;

void __fastcall DrawScale(Graphics::TBitmap* Im);

void __fastcall DrawSignal(Graphics::TBitmap* ABitmap,int vpos,int hpos,int Start,int fpos);

void __fastcall DrawPointer(TObject *Sender,int& pos);

void __fastcall SetNewPos(TObject * Sender,TMouseButton Button, int&

pos );

void __fastcall ReadDdeItem(); public: // User declarations

__fastcall TFC167(TComponent* Owner);

}; //---------------------------------------------------------------------------

extern PACKAGE TFC167 *FC167; //---------------------------------------------------------------------------

#endif

Программа – генератор

//---------------------------------------------------------------------------

#include <vcl.h> #pragma hdrstop #include <math.h> #include <dos.h>

#include "Main.h" //---------------------------------------------------------------------------

#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;

int HInstImg2=21,HInstImg4=42,HInstImg6=51; int ButNum=1;

bool MbFlag,MbFlag2; bool fOnOff=false; bool Change=false; bool fNoAct=true; float Amplitude=-1;

float Frec=1.570796327; float Kmul=1;

float spos=2.75; float Delta=0.005;

const float sklim=0.37; //---------------------------------------------------------------------------

void __fastcall TForm1::DDEServOut()

{

GenDdeSItem->Lines->Clear(); // GenDdeSItem->Lines->Add("");

GenDdeSItem->Text="data"; float h,f;

f=(fabs(Frec-1.570796327)*210/5.8800023359*exp((HInstImg2- 21)*log(10)));

h=1/(f*300);

for(int i=0;i<=300;i++)

{

GenDdeSItem->Lines->Add(FloatToStr(i*h)); GenDdeSItem->Lines-

>Add(FloatToStr((Amplitude+1)*2*sin(2*M_PI*f*i*h)));

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Ashkala(float Ampl1)

{

Image2->Canvas->Brush->Color=clBtnFace; TRect rect(0,0,250,250);

Graphics::TBitmap *BitMap; BitMap=new Graphics::TBitmap;

BitMap->LoadFromResourceID((int)HInstance,12); Image2->Canvas->BrushCopy(rect,BitMap,rect,(TColor)0x00FFC0C0); delete BitMap;

Image2->Canvas->Pen->Mode=pmCopy;

Image2->Canvas->Pen->Color=clBlack; Image2->Canvas->Arc(7,37,193,223,180,0,17,0); for(float i=0.35;i<1.3;i+=0.05) {

Image2->Canvas->MoveTo((int)100-97*cos(i*1.85),(int)130- 97*sin(i*1.85));

Image2->Canvas->LineTo((int)100-93*cos(i*1.85),(int)130- 93*sin(i*1.85));

}

for(float i=0.35;i<1.366;i+=0.0635) { Image2->Canvas->MoveTo((int)100-92*cos(i*1.85),(int)130-

92*sin(i*1.85)); Image2->Canvas->LineTo((int)100-88*cos(i*1.85),(int)130-

88*sin(i*1.85));

}

Image2->Canvas->Pen->Width=2;

Image2->Canvas->Brush->Color=clWhite; for(int i=0;i<11;i+=1) {

Image2->Canvas->MoveTo((int)100-100*cos((i*0.1+0.35)*1.85),(int)130- 100*sin((i*0.1+0.35)*1.85));

Image2->Canvas->LineTo((int)100-93*cos((i*0.1+0.35)*1.85),(int)130- 93*sin((i*0.1+0.35)*1.85));

if(i!=0 && i!=10 && i%2==0) Image2->Canvas->TextOutA((int)96-115*cos((i*0.1+0.35)*1.85),(int)130-

115*sin((i*0.1+0.35)*1.85),IntToStr(i));

}

for(int i=0;i<4;i+=1) { Image2->Canvas->MoveTo((int)100-

92*cos((i*0.3175+0.35)*1.85),(int)130-92*sin((i*0.3175+0.35)*1.85)); Image2->Canvas->LineTo((int)100-85*cos((i*0.3175+0.35)*1.85),(int)130-

85*sin((i*0.3175+0.35)*1.85)); Image2->Canvas->TextOutA((int)96-

83*cos((i*0.3175+0.35)*1.85),(int)130-83*sin((i*0.3175+0.35)*1.85),IntToStr(i));

}

Image2->Canvas->Pen->Width=1; Image2->Canvas->Pen->Mode=pmNotXor;

float Ampl; if((Ampl1-Delta+spos)*Kmul>=6.75)

Ampl=(6.75-Delta)/Kmul-spos; else

Ampl=Ampl1; Image2->Canvas->MoveTo((int)100-

30*cos((Ampl+spos)*sklim*Kmul),108); Image2->Canvas->LineTo((int)100-

88*cos((Ampl+spos)*sklim*Kmul),(int)130-88*sin((Ampl+spos)*sklim*Kmul));

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Sshkala()

{

for(int i=0;i<=210;i+=5)

{

Image1->Canvas->MoveTo((int)125-97*cos(i*0.028+Frec), (int)125-97*sin(i*0.028+Frec));

Image1->Canvas->LineTo((int)125-(90+3*(i%2))*cos(i*0.028+Frec), (int)125-(90+3*(i%2))*sin(i*0.028+Frec));

}

Image1->Canvas->TextOutA((int)118-78*cos(((float)(10- 0)/50+0)*1.4+Frec),

(int)117-78*sin(((float)(10-0)/50+0)*1.4+Frec),IntToStr(10)+" ");

for(int i=25;i<=200;i+=25)

{

Image1->Canvas->TextOutA((int)118-78*cos(((float)(i-0)/50+0)*1.4+Frec), (int)117-78*sin(((float)(i-0)/50+0)*1.4+Frec),IntToStr(i)+" ");

}

Image1->Canvas->Pen->Mode=pmCopy; Image1->Canvas->Pen->Width=2; Image1->Canvas->Pen->Color=(TColor)0x00FFC0C0; Image1->Canvas->MoveTo(90,30); Image1->Canvas->LineTo(106,73); Image1->Canvas->MoveTo(125,40); Image1->Canvas->LineTo(125,70); Image1->Canvas->MoveTo(160,30); Image1->Canvas->LineTo(144,73); Image1->Canvas->Pen->Width=1; Image1->Canvas->Pen->Color=clBlack; Image1->Canvas->Pen->Mode=pmNotXor;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Smove(float Delta1,float spos1,float Kmul1)

{

if(Amplitude!=-1)

{

Change=true;

fNoAct=false; Form1->Ashkala(Amplitude);

float AmpBegin,AmpEnd,AmpDelta; if(Kmul1>Kmul)

{

float AmpOld=(Amplitude+spos)*Kmul/Kmul1-spos1; float Ampl;

if((Amplitude+spos1)*Kmul1>=6.75) Ampl=(6.75+Delta1)/Kmul1-spos1; else Ampl=Amplitude;

for(float Amp=(Amplitude+spos)*Kmul/Kmul1spos1;Amp<=Ampl;Amp+=Delta1)

{

Image2->Canvas->MoveTo((int)100- 30*cos((AmpOld+spos1)*sklim*Kmul1),108);

Image2->Canvas->LineTo((int)100- 88*cos((AmpOld+spos1)*sklim*Kmul1),(int)13088*sin((AmpOld+spos1)*sklim*Kmul1));

Image2->Canvas->MoveTo((int)100- 30*cos((Amp+spos1)*sklim*Kmul1),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amp+spos1)*sklim*Kmul1),(int)130-88*sin((Amp+spos1)*sklim*Kmul1));

AmpOld=Amp; Application->HandleMessage();

}

}

else

{

float Ampl,AmpOld; if((Amplitude+spos1)*Kmul1>=6.75)

{

Ampl=(6.75+Delta1)/Kmul1-spos1; AmpOld=Ampl;

}

else

{

if((Amplitude+spos)*Kmul>=6.75)

{

Ampl=6.75/Kmul1-spos1; AmpOld=Ampl;

}

else

{

Ampl=(Amplitude+spos)*Kmul/Kmul1-spos1; AmpOld=Ampl;

}

}

for(float Amp=Ampl;Amp>=Amplitude;Amp-=Delta1)

{

Image2->Canvas->MoveTo((int)100- 30*cos((AmpOld+spos1)*sklim*Kmul1),108);

Image2->Canvas->LineTo((int)100- 88*cos((AmpOld+spos1)*sklim*Kmul1),(int)13088*sin((AmpOld+spos1)*sklim*Kmul1));

Image2->Canvas->MoveTo((int)100- 30*cos((Amp+spos1)*sklim*Kmul1),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amp+spos1)*sklim*Kmul1),(int)130-88*sin((Amp+spos1)*sklim*Kmul1));

AmpOld=Amp; Application->HandleMessage();

}

}

fNoAct=true;

}

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Image5Click(TObject *Sender)

{

if(!fNoAct) return; fOnOff=!fOnOff; if(fOnOff)

{

DDEServOut();

}

else

{

//GenDdeSItem->Lines->Clear(); GenDdeSItem->Text="poweroff";

}

if (HInstImg4==41) {HInstImg4=42; HInstImg6=51;} else {HInstImg4=41; HInstImg6=52;};

TRect rect(0,0,21,59); Graphics::TBitmap *BitMap; BitMap=new Graphics::TBitmap;

BitMap->LoadFromResourceID((int)HInstance,HInstImg4); Image5->Canvas->BrushCopy(rect,BitMap,rect,(TColor)0x00FFC0C0); delete BitMap;

Image6->Picture->Bitmap- >LoadFromResourceID((int)HInstance,HInstImg6);

Application->ProcessMessages(); if(Amplitude!=-1)

{

Change=true;

fNoAct=false;

float AmpBegin,AmpEnd,AmpDelta; if(fOnOff)

{

Form1->Ashkala(-1); float AmpOld=-1; float Ampl;

if((Amplitude+spos)*Kmul>=6.75) Ampl=(6.75+Delta)/Kmul-spos;

else Ampl=Amplitude;

for(float Amp=-1;Amp<=Ampl;Amp+=Delta)

{

Image2->Canvas->MoveTo((int)100- 30*cos((AmpOld+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((AmpOld+spos)*sklim*Kmul),(int)13088*sin((AmpOld+spos)*sklim*Kmul));

Image2->Canvas->MoveTo((int)100- 30*cos((Amp+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amp+spos)*sklim*Kmul),(int)130-88*sin((Amp+spos)*sklim*Kmul));

AmpOld=Amp; Application->HandleMessage();

}

}

else

{

Form1->Ashkala(Amplitude); float Ampl,AmpOld; if((Amplitude+spos)*Kmul>=6.75)

{

Ampl=(6.75-Delta)/Kmul-spos; AmpOld=Ampl;

}

else

{

Ampl=Amplitude;

AmpOld=Amplitude;

}

for(float Amp=Ampl;Amp>=-1;Amp-=Delta)

{

Image2->Canvas->MoveTo((int)100- 30*cos((AmpOld+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((AmpOld+spos)*sklim*Kmul),(int)13088*sin((AmpOld+spos)*sklim*Kmul));

Image2->Canvas->MoveTo((int)100- 30*cos((Amp+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amp+spos)*sklim*Kmul),(int)130-88*sin((Amp+spos)*sklim*Kmul));

AmpOld=Amp; Application->HandleMessage();

}

}

fNoAct=true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Image3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

{

switch (Button) {

case mbLeft: if (HInstImg2!=21){HInstImg2-=1; TRect rect(0,0,80,80);

Graphics::TBitmap *BitMap; BitMap=new Graphics::TBitmap;

BitMap->LoadFromResourceID((int)HInstance,HInstImg2); Image3->Canvas->FillRect(rect); Image3->Canvas->BrushCopy(rect,BitMap,rect,(TColor)0x00FFC0C0); delete BitMap;}

break;

case mbRight: if (HInstImg2!=24){HInstImg2+=1; TRect rect(0,0,80,80);

Graphics::TBitmap *BitMap; BitMap=new Graphics::TBitmap;

BitMap->LoadFromResourceID((int)HInstance,HInstImg2); Image3->Canvas->FillRect(rect); Image3->Canvas->BrushCopy(rect,BitMap,rect,(TColor)0x00FFC0C0); delete BitMap;}

break;

}

if(fOnOff) DDEServOut();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Image4MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

{

if(!fNoAct) return; MbFlag=true; while(MbFlag) {

switch (Button)

{

case mbLeft: if(Amplitude>=-1)

{

if(fOnOff&&((Amplitude+spos)*Kmul>=1.75)&&(((AmplitudeDelta)+spos)*Kmul<=6.75))

{

if(Change)

{

Form1->Ashkala(Amplitude); Change=False;

}

Image2->Canvas->MoveTo((int)100- 30*cos((Amplitude+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amplitude+spos)*sklim*Kmul),(int)13088*sin((Amplitude+spos)*sklim*Kmul));

}

Amplitude-=Delta;

if(fOnOff&&(((Amplitude+Delta)+spos)*Kmul>=1.75)&&((Amplitude+spos)*Kmul

<=6.75))

{

Image2->Canvas->MoveTo((int)100- 30*cos((Amplitude+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amplitude+spos)*sklim*Kmul),(int)13088*sin((Amplitude+spos)*sklim*Kmul));

}

}

break;

case mbRight: if(Amplitude<=4)

{

if(fOnOff&&((Amplitude+spos)*Kmul<=6.75)&&(((Amplitude+Delta)+spos)*Kmul

>=1.75))

{

if(Change)

{

Form1->Ashkala(Amplitude); Change=False;

}

Image2->Canvas->MoveTo((int)100- 30*cos((Amplitude+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amplitude+spos)*sklim*Kmul),(int)13088*sin((Amplitude+spos)*sklim*Kmul));

}

Amplitude+=Delta; if(fOnOff&&(((Amplitude-

Delta)+spos)*Kmul<=6.75)&&((Amplitude+spos)*Kmul>=1.75))

{

Image2->Canvas->MoveTo((int)100- 30*cos((Amplitude+spos)*sklim*Kmul),108);

Image2->Canvas->LineTo((int)100- 88*cos((Amplitude+spos)*sklim*Kmul),(int)13088*sin((Amplitude+spos)*sklim*Kmul));

}

}

break;

}

// GenDdeSItem->Text=FloatToStr((Amplitude+Delta+1)*2/Kmul); Image4->Canvas->Ellipse((int)24-16*cos(Amplitude),(int)31-

16*sin(Amplitude), (int)28-16*cos(Amplitude),(int)35-16*sin(Amplitude));

Application->ProcessMessages();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Image4MouseUp(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

MbFlag=false;

if(fOnOff) DDEServOut();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

{

MbFlag2=true;

while(MbFlag2)

{

switch (Button)

{

case mbLeft: if(Frec<=1.570796327)

{

Sshkala(); Frec+=0.01; Sshkala();

}

break;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]