3385
.pdfint 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;