⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 光学仪器的控制系统 用于教学和科研的仪器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        }
        pkn1=0;pkn2=0;
//定点所加程序***************************************
        BoChangCheck();         //校正波长

//0717  在图谱上显示波长和峰值
        bPVonImage=false;
        bWLonImage=true;
//***************************************************

        TRect rs,rd;
        rs.Left=0; rs.Top=0;
        rs.Right=Image2->Width;
        rs.Bottom=Image2->Height;
        rd.Left=0; rd.Top=0;
        rd.Right=Image1->Width;
        rd.Bottom=Image1->Height;

        //Stop->Enabled=true;
        Scan->Enabled=true;
        Search->Enabled=true;
        DrawBK();
//DrawQX();
//Image1->Canvas->CopyRect(rd,Image2->Canvas,rs);
//Image1->Canvas->Rectangle(wx0,wy0,wx1,wy1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MuCL1Click(TObject *Sender)
{ // 测量方式->光谱扫描
  DisableMenuItems();
  //DrawBK();
  Image1->Repaint();
  if(Thread1!=NULL)
    DeleteThread1();
  CreatThread1();
  Thread1->SetFun((ExecFun) To_scan);
  bStop=false;
  Thread1->Resume();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MuCL2Click(TObject *Sender)
{ // 测量方式->基线扫描
  DisableMenuItems();

  if(Thread1!=NULL)
    DeleteThread1();
  CreatThread1();
  Thread1->SetFun((ExecFun) To_baseline_scan);
  bStop=false;
  Thread1->Resume();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MuCL3Click(TObject *Sender)
{ // 测量方式->时间扫描
  DisableMenuItems();

  DrawBK();
  if(Thread1!=NULL)
    DeleteThread1();
  CreatThread1();
  Thread1->SetFun((ExecFun) To_Scan_T);
  bStop=false;
  Thread1->Resume();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MuCL4Click(TObject *Sender)
{ //测量方式->定点测量
  DisableMenuItems();
  if(Timer1->Enabled==false)
    Timer1->Enabled=true;
  fmDpoint->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MuPrintClick(TObject *Sender)
{//打印
  if(ptc.m2==0)//没有数据就不能打印
        FormPrntSetting->BTPrint->Enabled=false;
  else
        FormPrntSetting->BTPrint->Enabled=true;
  FormPrntSetting->Show();//打印设置
  //PrintDialog1->Execute();
}
//---------------------------------------------------------------------------
void TForm1::PrintDoc()
{ //
  TPrinter *pPrinter=Printer();
  TRect DRect,SRect;// 区域类型名
  DRect.Top=0;   DRect.Left=0;
  DRect.Right=pPrinter->PageWidth;
  DRect.Bottom=pPrinter->PageHeight;
  SRect.Top=KUAN;   SRect.Left=KUAN;
  SRect.Right=Image1->Width-KUAN;
  SRect.Bottom=Image1->Height-KUAN;
  pPrinter->BeginDoc();// 准备开始打印
  pPrinter->Canvas->CopyRect(DRect,Image1->Canvas,SRect);
  pPrinter->EndDoc();// 开始打印
}
//---------------------------------------------------------------------------
void TForm1::DrawBK(void)
{ //画背景
  TRect rs, rd;
  //Image1->Canvas->Pen->Style=psDot;
  wx0=JUKUAN;    wy0=JUKUAN;
  wx1=Image1->Width-JUKUAN;
  wy1=Image1->Height-JUKUAN;

  Image1->Canvas->Pen->Color=clBK;
  rs.Left=0; rs.Top=0;
  rs.Right=Image2->Width;
  rs.Bottom=Image2->Height;
  rd.Left=0; rd.Top=0;
  rd.Right=Image1->Width;
  rd.Bottom=Image1->Height;
  Image1->Canvas->Pen->Style=psSolid;
  Image1->Canvas->CopyRect(rd,Image2->Canvas,rs);
  Image1->Canvas->Rectangle(KUAN,KUAN,Image1->Width-KUAN,Image1->Height-KUAN);

  //画矩形框
  Image1->Canvas->Rectangle(wx0,wy0-GELI,wx1,wy1+GELI+1);

  //画三条虚线
  Image1->Canvas->Pen->Style=psDot;
  Image1->Canvas->MoveTo(wx0,wy0);
  Image1->Canvas->LineTo(wx1,wy0);
  Image1->Canvas->MoveTo(wx0,wy1);
  Image1->Canvas->LineTo(wx1,wy1);
  if(!bGrid)
  {
    Image1->Canvas->MoveTo(wx0,(wy1+wy0)/2);
    Image1->Canvas->LineTo(wx1,(wy1+wy0)/2);
  }
  //Image1->Canvas->Pen->Style=psSolid;
  //Dot;
  //0414增加刻度虚线框
  ShowGrid(0,0,bGrid);     
  //0414增加刻度虚线框
  char cgs[20];
  memset(cgs,0,sizeof(cgs));
  int y1;

  //画坐标值
  char gs[80];
  if(csd[0]!=3)
  {
    sprintf(gs,"%4.0f",wns);
    Image1->Canvas->TextOut(wx0-15,wy1+15,gs);
    sprintf(gs,"%4.0f",wne);
    Image1->Canvas->TextOut(wx1-20,wy1+15,gs);
  }
  else
  {
    sprintf(gs,"%4.1f",wns);
    Image1->Canvas->TextOut(wx0-15,wy1+15,gs);
    sprintf(gs,"%4.1f",wne);
    Image1->Canvas->TextOut(wx1-20,wy1+15,gs);
  }
  //Image1->Canvas->TextFlags=ETO_RTLREADING;//右对齐
  switch(csd[1])
  {
    case 1:
          sprintf(gs,"%3.2f",tnh);
          Image1->Canvas->TextOut(wx0-38,wy0-5,gs);
          sprintf(gs,"%3.2f",tnl);
          Image1->Canvas->TextOut(wx0-38,wy1-5,gs);
          break;
    case 2:
          sprintf(gs,"%1.4f",tnh);
          Image1->Canvas->TextOut(wx0-38,wy0-5,gs);
          sprintf(gs,"%1.4f",tnl);
          Image1->Canvas->TextOut(wx0-38,wy1-5,gs);
          break;
    case 3:
          sprintf(gs,"%4.1f",tnh);
          Image1->Canvas->TextOut(wx0-38,wy0-5,gs);
          sprintf(gs,"%4.1f",tnl);
          Image1->Canvas->TextOut(wx0-38,wy1-5,gs);
  }
}
//===========================================================================
void TForm1::DrawQX1(TCanvas *Canvas,
                    int Wx00, int Wx11, int Wy00, int Wy11,
                    int Wx0,  int Wx1,  int Wy0,  int Wy1)
{ // 画光谱曲线
  int n1,n2,x,y,i;
  float t = 0.0;
  int wx0, wx1, wy0, wy1;

  wx0 = Wx0; wx1 = Wx1;
  wy0 = Wy0; wy1 = Wy1;

  if(ptc.m2==0) return;  // 如果没有光谱数据就返回

  if(csd[1]==3&&ptc.m1!=3) return;
  if(csd[1]!=3&&ptc.m1==3) return;
  if(ptc.m2==8&&csd[4]!=3) return;

  if(wns>ptc.wns)
    n1=(wns-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  else
    n1=0;
  if(wne<ptc.wne)
    n2=(wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  else
    n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  t=tc[n1];
  switch(csd[1])
  {
    case 1:break;
    case 2:t=toa(t);break;
    case 3:break;
  }
  x=wx0+(wx1-wx0)/(wne-wns)*(-wns+(ptc.wns+(float)(n1*itl[ptc.interval])/(float)wnd0));
  y=wy0+(float)(wy1-wy0)*(tnh-t)/(tnh-tnl);
  if(x<wx0)
    x=wx0;
  else if(x>wx1)
    x=wx1;
  if(y>(wy1+5))
    y=wy1+5;
  else if(y<(wy0-5))
    y=wy0-5;
  Canvas->MoveTo(x,y);
  Canvas->Pen->Style=psSolid;
  Canvas->Pen->Color=clQX;
  for(i=n1;i<=n2;i++)
  {
    t=tc[i];
    switch(csd[1])
    {
      case 1:break;
      case 2:t=toa(t);break;
      case 3:break;
    }
    x=wx0+(wx1-wx0)/(wne-wns)*(-wns+(ptc.wns+(float)(i*itl[ptc.interval])/(float)wnd0));
    y=wy0+(float)(wy1-wy0)*(tnh-t)/(tnh-tnl);
    if(x<wx0)
      x=wx0;
    else if(x>wx1)
      x=wx1;
    if(y>wy1)
      y=wy1;
    else if(y<wy0)
      y=wy0;
    Canvas->LineTo(x,y);
  }
/*
  if(bReadData==true)//正在读取数据
  {
    IMTemp->Canvas->CopyRect(RSRect,Canvas,RDRect);//Get
    DrawCross(Rx,Ry);
    GetData(Rwi);
  }
*/
}
//===========================================================================
void TForm1::DrawBK1(TCanvas *Canvas, int width, int height,
                        int &PWx00, int &PWx11, int &PWy00, int &PWy11,
                        int &PWx0,  int &PWx1,  int &PWy0,  int &PWy1)
{ //画背景
  TRect rs,rd;
  int wx0, wx1;
  int wy0, wy1;
  int wx00, wx11, wy00, wy11;
  char gs[80];
  TSize sz;
  int temp;

  //清除背景
  Canvas->Pen->Color=clBK;
  Canvas->Rectangle(1, 1, width - 1, height - 1);

  switch(csd[1])
  {
      case 1: sprintf(gs, "%1.3f", tnh); break;
      case 2: sprintf(gs, "%1.5f", tnh); break;
      case 3: sprintf(gs, "%1.2f", tnh); break;
  }
  sz = Canvas->TextExtent(gs);
  wx00 = sz.cx;
  sprintf(gs, "%1.3f", wne);
  sz = Canvas->TextExtent(gs);
  wx11 = width - sz.cx / 2;

  sprintf(gs, "%1.2f", wns);
  sz = Canvas->TextExtent(gs);
  wy00 = sz.cy;
  wy11 = height - sz.cy - sz.cy;
  wy0 = wy00 + sz.cy;
  wy1 = wy11 - sz.cy;

  wx0 = wx00;
  wx1 = wx11;

  PWx00 = wx00; PWx11 = wx11;
  PWy00 = wy00; PWy11 = wy11;
  PWx0 = wx0; PWx1 = wx1;
  PWy0 = wy0; PWy1 = wy1;
/*
  rs.Left=0; rs.Top=0;
  rs.Right=Image2->Width;
  rs.Bottom=Image2->Height;
  rd.Left=0; rd.Top=0;
  rd.Right=Image1->Width;
  rd.Bottom=Image1->Height;
  Image1->Canvas->CopyRect(rd,Image2->Canvas,rs);
*/
  //画矩形框
  Canvas->Rectangle(wx00, wy00, wx11, wy11);
  //画三条虚线
  Canvas->Pen->Style=psDot;
  Canvas->MoveTo(wx0,wy0);
  Canvas->LineTo(wx1,wy0);
  Canvas->MoveTo(wx0,wy1);
  Canvas->LineTo(wx1,wy1);
  Canvas->MoveTo(wx0,(wy1+wy0)/2);
  Canvas->LineTo(wx1,(wy1+wy0)/2);
  Canvas->Pen->Style=psSolid;

 //画坐标刻度
  int x,y;
  for(int i=1;i<10;i++)
  {
    x=wx0 + i * (wx1 - wx0) / 10;
    y=wy00;
    Canvas->MoveTo(x, y);
    Canvas->LineTo(x, y+3);
    y = wy11;
    Canvas->MoveTo(x,y);
    Canvas->LineTo(x,y-3);
  }
  //画间隔点
  for(int i=1;i<20;i++)
    for(int j=1;j<10;j++)
    {
      x=wx0+(wx1-wx0)*i/20;
      y=wy0+(wy1-wy0)*j/10;
      Canvas->Pixels[x][y]=clBlack;
    }
  //画坐标值
  sprintf(gs, "%4.1f", wns);
  sz = Canvas->TextExtent(gs);
  Canvas->TextOut(wx00 - sz.cx / 2, wy11 + 1, gs);
  sprintf(gs, "%4.1f", wne);
  sz = Canvas->TextExtent(gs);
  Canvas->TextOut(wx11 - sz.cx / 2, wy11 + 1, gs);

  //Image1->Canvas->TextFlags=ETO_RTLREADING;//右对齐
  switch(csd[1])
  {
    case 1:
        sprintf(gs, "%1.2f", tnh);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx00 - sz.cx - 1, wy0 - sz.cy / 2, gs);
        sprintf(gs, "%1.2f", tnl);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx0 - sz.cx - 1, wy1 - sz.cy / 2, gs);
        break;
    case 2:
        sprintf(gs,"%1.4f",tnh);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx00 - sz.cx - 1, wy0 - sz.cy / 2, gs);
        sprintf(gs,"%1.4f",tnl);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx0 - sz.cx - 1, wy1 - sz.cy / 2, gs);
        break;
    case 3:
        sprintf(gs,"%1.1f",tnh);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx00 - sz.cx - 1, wy0 - sz.cy / 2, gs);
        sprintf(gs,"%1.1f",tnl);
        sz = Canvas->TextExtent(gs);
        Canvas->TextOut(wx0 - sz.cx - 1, wy1 - sz.cy / 2, gs);
  }
}
//---------------------------------------------------------------------------
void TForm1::ExchangData()
{ // 从参数设置窗体获取数据
  if(ChanShu->bOK==false)
    return;
  wns=ChanShu->wnst; wne=ChanShu->wnet;
  tnl=ChanShu->tnl2[ChanShu->Select1];
  tnh=ChanShu->tnh2[ChanShu->Select1];
  switch(ChanShu->Select1)
  { // 测量模式
    case 1: csd[1]=1;break;
    case 2: csd[1]=2;break;
    case 3: csd[1]=3;break;
  }
  csd[0]=ChanShu->Select0;       // 扫描间隔
  csd[3]=ChanShu->Select2;       // 扫描速率
  csd[4]=ChanShu->Select3;       // 扫描方式
  csd[5]=ChanShu->csd5[csd[4]];  // 扫描次数
  if(ChanShu->Select3!=3)        // 不是时间扫描
  {
    PMuScanT->Enabled=false;     //
    MuCL3->Enabled=false;        // 时间扫描不显示
    MuCL3->AutoHotkeys=false;
    Form1->Scan_Time->ShortCut=NULL;
    PMuBaseScan->Enabled=true;
    MuCL2->Enabled=true;         // 基线扫描显示
    PMuScan->Enabled=true;
    PMuScan->AutoHotkeys=true;
    Form1->Scan->ShortCut=VK_F1;
    MuCL1->Enabled=true;         // 光谱扫描显示
  }
  else
  {
    PMuScanT->Enabled=true;
    MuCL3->Enabled=true;         // 时间扫描显示
    MuCL3->AutoHotkeys=true;
    Form1->Scan_Time->ShortCut=VK_F3;
    PMuBaseScan->Enabled=false;
    MuCL2->Enabled=false;        // 基线扫描不显示
    PMuScan->Enabled=false;
    PMuScan->AutoHotkeys=false;
    Form1->Scan->ShortCut=NULL;
    MuCL1->Enabled=false;        // 光谱扫描不显示
  }
  csd[2]=ChanShu->csd2;          // 工作光源
  csd[8]=ChanShu->csd8;          // 换灯波长
  csd[9]=ChanShu->Select4;       // 光谱带宽
  csd[10]=ChanShu->csd10;        // 负高压
  csd[11]=ChanShu->csd11;        // 增益
}

//---------------------------------------------------------------------------
void TForm1::SetData()
{ // 把数据传递给参数设置窗体
  // 测量模式
  switch(csd[1])
  {
    case 1: ChanShu->Select1=1;break;
    case 2: ChanShu->Select1=2;break;
    case 3: ChanShu->Select1=3;break;
  }

  ChanShu->tnl2[ChanShu->Select1]=tnl;
  ChanShu->tnh2[ChanShu->Select1]=tnh;

⌨️ 快捷键说明

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