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 + -
显示快捷键?