main.cpp

来自「脑电信号分析软件」· C++ 代码 · 共 967 行 · 第 1/3 页

CPP
967
字号
                }
            if (Fast==true) //使显示速度加快
                {
                  Timer1->Interval =1;
                }
            if (Normal==true)  //正常显示
                {
                 Timer1->Interval =5;
                }

          Time_Show=int((Page+5)/10); //将整屏的数据分成十份,用于显示时间
             if (i==8)
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label1->Caption = TimeToStr(Now()); //Date
              goto AddToNext;
              }
             else if (i==(1*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label2->Caption = TimeToStr(Now());// Date
              goto AddToNext;
              }
             else if (i==(2*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label3->Caption = TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(3*Time_Show+5))
              {
               PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label4->Caption =TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(4*Time_Show+5))
              {
               PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label5->Caption = TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(5*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label6->Caption = TimeToStr(Now());
              goto AddToNext;
              }
              else if (i==(6*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label7->Caption = TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(7*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label8->Caption = TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(8*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label9->Caption = TimeToStr(Now());
              goto AddToNext;
              }
             else if (i==(9*Time_Show+5))
              {
              PaintBox1->Canvas->TextOutA(i,PaintBox1->Height-10,AnsiString(TimeToStr(Now())));
              //Label10->Caption = TimeToStr(Now());
              goto AddToNext;
              }
           AddToNext:  i=i+1;

              GlobalRecordPic=i; //用于记录当前显示图像的右侧位置,用于在其他窗体关闭时重新绘图

             if(i%(Page+5)==0) //换页
              { m=m+1;
                i=0 ;
                PaintBox1->Canvas->Refresh() ;
              }
       }
}
//---------------------------------------------------------------------------
// 扫屏显示
void __fastcall TMainForm::ToolButton20Click(TObject *Sender)
{ int p,q;

  Play_id=1; //运行控件
  Timer1->Enabled =true;
  Button3->Enabled =false;
  Panel2->Enabled =true;
  for(p=0;p<1000;p++)
        {
         for(q=0;q<16;q++)
                {
                bufarray[p*16+q]=file[p].Lead[q];
                }
        }
  buf=&bufarray[0];
}
//---------------------------------------------------------------------------
 //停止显示图像
void __fastcall TMainForm::ToolButton14Click(TObject *Sender)
{
   i=0;
   Play_id=false;
   Timer1->Enabled =false;
   l=0;
   Roll_state=false;
   Button3->Enabled=true;
   ToolButton20->Enabled =true;
   ToolButton28->Enabled=true;
   ToolButton26->Enabled=true;
}
//---------------------------------------------------------------------------
//暂时停止显示图像
void __fastcall TMainForm::ToolButton18Click(TObject *Sender)
{
 Play_id=false;
 Roll_state=false;
}
//---------------------------------------------------------------------------
 //显示下一页图像
void __fastcall TMainForm::ToolButton16Click(TObject *Sender)
{
 i=0;
 m=m+1;
}
//---------------------------------------------------------------------------
  //显示上一页图像
void __fastcall TMainForm::ToolButton23Click(TObject *Sender)
{
   i=0;
   m=m-1;
}
//---------------------------------------------------------------------------
 // 放大图像
void __fastcall TMainForm::ToolButton28Click(TObject *Sender)
{
//Amplify=Amplify/2;
 PaintBox1->Refresh();
 amp=amp*1.2;
 i=0;
}
//---------------------------------------------------------------------------
 //缩小图像
void __fastcall TMainForm::ToolButton26Click(TObject *Sender)
{
   PaintBox1->Refresh();
   amp=amp/1.2;
   i=0;
}
//---------------------------------------------------------------------------
  //显示速度加快
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
  Fast=true;
  Normal=false;
}
//---------------------------------------------------------------------------
  //显示速度恢复正常
void __fastcall TMainForm::Button2Click(TObject *Sender)
{
 Normal=true;
 Fast=false;
}
//---------------------------------------------------------------------------
//滚屏前进
void __fastcall TMainForm::Timer2Timer(TObject *Sender)
{
    int k,n;
    Page=960;
    if(Roll_state==true)
    {
       //基本思路:先在内存中,把图像画好,然后将整块内存画到指定的控件上
      Graphics::TBitmap *MemBitmap=new  Graphics::TBitmap;    // 创建一个TBitmap对象,用作缓冲
      try
       {
            MemBitmap->Width = PaintBox1->Width;      //  设置缓冲图像的宽度、高度
            MemBitmap->Height = PaintBox1->Height;//PaintBox1->Height;     //  和目标控件的宽度、高度相等
         //----------------------------------------------------------------
         // 这里面就直接在缓冲对象中,画波形
            l=l+3;
            k=0;
            for(i=l;i<=Page+l;i++)   //length
             {
                for(n=0;n<16;n++)
                   {
                       if(n==0||n==8)
                          {
                             MemBitmap->Canvas->Pen->Color=clBlack;
                          }
                       if(n==4||n==12)
                          {
                              MemBitmap->Canvas->Pen->Color=clBlue;
                          }
                       //MemBitmap->Canvas->MoveTo(i,buf[i*16+m*step+n]*V_zoom + (2*n+1)*PaintBox1->Height/32);
                       //MemBitmap->Canvas->LineTo(i+1,buf[(i+1)*16+m*step+n]*V_zoom + (2*n+1)*PaintBox1->Height/32 );
                       MemBitmap->Canvas->MoveTo(k,file[i].Lead[n]*0.05*amp + (2*n+1)*(PaintBox1->Height-20)/Amplify);
                       MemBitmap->Canvas->LineTo(k+1,file[i+1].Lead[n]*0.05*amp + (2*n+1)*(PaintBox1->Height-20)/Amplify );
                    }
                k=k+1;
               }

        //----------------------------------------------------------------
           //PaintBox1->Canvas->Draw(0,0,MemBitmap);  //画完以后,PaintBox 直接将整个缓冲对象画出来
           BitBlt(PaintBox1->Canvas->Handle,0,0,PaintBox1->Width,PaintBox1_Height,MemBitmap->Canvas->Handle,0,0,SRCCOPY);
         }
       catch(...)
          {
              Application->MessageBox("显示时发生错误!", "错误", IDOK);
           }

        delete   MemBitmap;       // 释放缓冲
      }
 }
/********************************************************************************/
///***************************************************************************************/
//---------------------------------------------------------------------------
void __fastcall TMainForm::Button3Click(TObject *Sender)
{
    int n;
    Panel2->Visible =false;
    Panel2->Enabled =false;
    Timer1->Enabled =false;
    ToolButton20->Enabled =false;
    ToolButton28->Enabled=false;
    ToolButton26->Enabled=false;
    PaintBox1->Repaint() ;
    Roll_state=true;
 }
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
////////06.06.26
void __fastcall TMainForm::N81Click(TObject *Sender)
{  int p,q;
    for(p=0;p<1000;p++)
    {
         for(q=0;q<16;q++)
         {
                bufarray[p*16+q]=file[p].Lead[q];
         }
    }

        pIIRFilter = new IIRFilter(100,16);     // LeadScheme.wLeadNum
        pIIRFilter->RemoveAll();

        pIIRFilter->AddHeightPass(Filter::CHEBY_TWO, 0.08, 0.5);
        pIIRFilter->AddLowPass(Filter::CHEBY_TWO, 8, 12);
        pIIRFilter->AddNotch(50, "50Hz");
        pIIRFilter->SetStatus(true);
        buf=&bufarray[0];

        pIIRFilter->Filtering(buf,16000);   //DataBuffer    iDataLen
        delete    pIIRFilter;


        buf=&bufarray[0];
     for(p=0;p<1000;p++)
     {
        for(q=0;q<16;q++)
        {
                file[p].Lead[q]=buf[p*16+q];
        }
     }

} 
//---------------------------------------------------------------------------
//测试滤波后的波形显示

void __fastcall TMainForm::TestClick(TObject *Sender)
{
  Analisys=Analisys+1;  //用于鼠标分析时的状态改变切换
  if  (Analisys%2==0)
      {
        Test->Caption ="撤销分析";
       }
   if (Analisys%2==1)
      {
       Test->Caption ="分析";
       }
}
 
//----------------------------------------------------------------------------
void __fastcall TMainForm::N151Click(TObject *Sender)
{
  int p,q;
  for(p=0;p<1000;p++)
  {
     for(q=0;q<16;q++)
        {
          bufarray[p*16+q]=file[p].Lead[q];
        }
  }

  buf=&bufarray[0];
  for(p=0;p<1000;p++)
     {
      for(q=0;q<16;q++)
       {
       //buffile[p].Lead[q]=bufarray[p*16+q];//buf[p*16+q];
       file[p].Lead[q]=buf[p*16+q];
      // file[p].Lead[q] = *buf p*16+q ;
       }
     }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N221Click(TObject *Sender)
{
 int p,q;
 for(p=0;p<1000;p++)
  {
     for(q=0;q<16;q++)
        {
          bufarray[p*16+q]=file[p].Lead[q];
        }
  }
ppEEGFilter = new EEGFilter(100,16);     // LeadScheme.wLeadNum
ppEEGFilter->RemoveAll();

ppEEGFilter->AddHeightPass(Filter::CHEBY_TWO, 0.08, 0.5);
ppEEGFilter->AddLowPass(Filter::CHEBY_TWO, 20, 24);
ppEEGFilter->AddNotch(50, "50Hz");
ppEEGFilter->SetStatus(true);
buf=&bufarray[0];

ppEEGFilter->Filtering(buf,16000);   //DataBuffer    iDataLen
delete    ppEEGFilter;
buf=&bufarray[0];
for(p=0;p<1000;p++)
  {
      for(q=0;q<16;q++)
       {
       file[p].Lead[q]=buf[p*16+q];
       }
  }

}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N301Click(TObject *Sender)
{
int p,q;
 for(p=0;p<1000;p++)
   {
     for(q=0;q<16;q++)
        {
          bufarray[p*16+q]=file[p].Lead[q];
        }
   }
        ppEEGFilter = new EEGFilter(100,16);     // LeadScheme.wLeadNum
        ppEEGFilter->RemoveAll();
        //ppEEGFilter->AddHeightPass(Filter::CHEBY_TWO,Filter_form->Edit2->Text.ToDouble() ,Filter_form->Edit3->Text.ToDouble() );  // fsa0.08  fpa0.5
        //ppEEGFilter->AddLowPass(Filter::CHEBY_TWO,Filter_form->Edit4->Text.ToDouble() ,Filter_form->Edit5->Text.ToDouble() );       //   fpb30  35 fsb
        ppEEGFilter->AddHeightPass(Filter::CHEBY_TWO, 0.08, 0.5);
        ppEEGFilter->AddLowPass(Filter::CHEBY_TWO, 30, 34);
        ppEEGFilter->AddNotch(50, "50Hz");
        ppEEGFilter->SetStatus(true);
        buf=&bufarray[0];

        ppEEGFilter->Filtering(buf,16000);   //DataBuffer    iDataLen
       // ppEEGFilter->MagResponse(100);
        buf=&bufarray[0];
        delete    ppEEGFilter;
    for(p=0;p<1000;p++)
    {
      for(q=0;q<16;q++)
       {
       file[p].Lead[q]=buf[p*16+q];
       }
    }

}
void __fastcall TMainForm::N3Click(TObject *Sender)
{
   Filter_form->Show() ;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{  int n;
    int aa,bb;
   if ((Button==mbLeft)&&(Analisys%2==0))
    {
     Start_x=X+m*Page;
      for (n=0;n<16;n=n+1)         // file[i+m*Page].Lead[0]*0.05*amp + (PaintBox1->Height-30)/Amplify)
       {  aa=(2*n+1)*(PaintBox1->Height-20)/Amplify;
          bb=(2*(n+1)+1)*(PaintBox1->Height-20)/Amplify;
        if ((Y>=aa)&&(Y<=bb))
         Write_line(PaintBox1->Canvas,X,aa+2,X,bb-1,clBlue);       //Start_x     Start_x
       }
    }

    if((Button==mbLeft)&&(Shift.Contains(ssCtrl))&&(Analisys%2==0))
    {
      Topo_Start_x=X+m*Page;
      Write_line(PaintBox1->Canvas,X,0,X,PaintBox1->Height-20,clBlue);  // Topo_Start_x      Topo_Start_x
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TMainForm::PaintBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
   int n;
   int aa,bb;
   if ((Button==mbLeft)&&(Analisys%2==0))
    {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?