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

📄 unit1.cpp

📁 家庭内温度记录仪器与计算机之间的通讯软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
           strT= AnsiString(TempData[i][3])+"  "+ strTime;
           Series1->AddXY(p,ByteToFloat(TempData[i][j]),strT,clRed);
           Series2->AddXY(p,objSysInfo.StanTemp,strT,clYellow);
           Series3->AddXY(p,0,"",clWhite);
           InvalData [i][j]=true;
           p++;
         }
         else
           InvalData [i][j]=false;
      }
   }  
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::RefreshScreen()
{//刷新屏幕
   AnsiString strTime,strDate;
   bool b[2]={false,false};

   GetTimeArea();
   //曲线
   for(int j=0;j<2;j++)//时间上下限
   {
     for(int i=0;i<DayNum;i++)//天数
     {  strTime= AnsiString(TempData[i][1])+"-" + AnsiString(TempData[i][2])+ "-" +
                 AnsiString(TempData[i][3]);
        if(InStr(strTimeUpDown[j],strTime) && StrLen(strTimeUpDown[j].c_str())==StrLen(strTime.c_str()))
           b[j]=true; 
        if(b[j]) break;
     }
   }
   if(b[0] && b[1]){ShowMsg("时间正常");RefreshGraph();}
   else ShowMsg("时间超出范围");
   //详细数据
   
   cmbDate->ItemIndex=0;
   RefreshList(0);

   eTemp->Text=IntToStr(objSysInfo.StanTemp);
   //曲线标题
   Chart1->Title->Text->Clear();
   Chart1->Title->Text->Add(eUserName->Text + "温度曲线" + "(" +
                        strTimeUpDown[0] + "至" + strTimeUpDown[1]+")");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdRefreshClick(TObject *Sender)
{//曲线刷新
   RefreshScreen();
}
//---------------------------------------------------------------------------
bool __fastcall TfrmMain::InStr(AnsiString str1,AnsiString str2)
{//判断是否包含指定字符串
   char *ptr;

   ptr=strstr(str1.c_str(),str2.c_str());
   if(ptr!=NULL)
      return true;
   else
      return false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::GetTimeArea()
{//获得显示时间区间
    strTimeUpDown[0]=tFromYear->Text + "-" + tFromMonth->Text + "-" + tFromDay->Text;
    strTimeUpDown[1]=tToYear->Text + "-" + tToMonth->Text + "-" + tToDay->Text;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmbDateClick(TObject *Sender)
{//观察一天的数据
   
    RefreshList(cmbDate->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::RefreshList(int i)
{//刷新详细数据
   int p;
   AnsiString strDate;

   p=0;
   strDate=AnsiString(TempData[i][1])+"-" + AnsiString(TempData[i][2])+ "-" +
               AnsiString(TempData[i][3]);
   for(int j=4;j<100;j++)
   {  grdData->Cells[0][j-3]="";
      grdData->Cells[1][j-3]="";

      if(InvalData [i][j])
      {  grdData->Cells[0][p+1]= strDate+ " " +AnsiString(j/4-1)+":"+ AnsiString((j%4)*15);
         grdData->Cells[1][p+1]=FloatToStr((ByteToFloat(TempData[i][j])));
         p++;
      }
   }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuSaveDataClick(TObject *Sender)
{//保存历史数据
   int resul;
   AnsiString strFile,strMsg;

   if(SaveFile->Execute())
   { strFile=SaveFile->FileName;
     if(!InStr(strFile,".tev"))strFile=strFile+".tev";//单击选中与输入有区别
     if(!FileExists(strFile))SaveData(strFile);
     else
     { strMsg="是否覆盖"+strFile+"文件";
       resul=Application->MessageBox(strMsg.c_str(),"警告",MB_YESNO);
       switch(resul)
       {  case IDYES:
            SaveData(strFile);
            break;
          case IDNO:
            break;
       }
     }
   }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuOpenDataClick(TObject *Sender)
{//调入历史数据
   AnsiString strFile;

   if(OpenFile->Execute())
   {  strFile=OpenFile->FileName;
      if(!InStr(strFile,".tev"))strFile=strFile+".tev";
        if(FileExists(strFile))OpenData(strFile);
   }
   RefreshScreen();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::SaveData(AnsiString strFile)
{//保存数据
    FILE *fp;
    int handle;

    if(!FileExists(strFile.c_str())){fp=fopen(strFile.c_str(),"wb"); fclose(fp);}
    if((handle=sopen(strFile.c_str(),O_BINARY | O_WRONLY | O_APPEND,SH_DENYNO))!=-1)
    {
      write(handle,&ReceiveData[3],sizeof(ReceiveData[3]));
      for(int i=0;i<ReceiveData[3]*100;i++)//写数据
        write(handle,&ReceiveData[i+4],sizeof(ReceiveData[i+4]));
    }
    close(handle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::IniOldData()
{  int t;
   //起始时间
   tFromYear->Text=ReceiveData[5];
   tFromMonth->Text=ReceiveData[6];
   tFromDay->Text=ReceiveData[7];
   tFromHour->Text="0";

   //结束时间
   t=ReceiveData[3]-1 ;
   tToYear->Text=ReceiveData[t*100+5];
   tToMonth->Text=ReceiveData[t*100+6];
   tToDay->Text=ReceiveData[t*100+7];
   tToHour->Text="0";

   for(int i=0;i<ReceiveData[3];i++)
   {
      for(int j=0;j<100;j++)
         TempData[i][j]= ReceiveData[i*100+j+4];
   }
   DayNum= ReceiveData[3];
   RefreshScreen();
   UDDay->Position=DayNum;
   ShowMsg("已读入历史数据报文");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OpenData(AnsiString strFile)
{//打开数据
    int handle;

    try
    {
    if((handle=sopen(strFile.c_str(),O_BINARY  | O_RDONLY ,SH_DENYNO))!=-1)
    {  read(handle,&ReceiveData[3],sizeof(ReceiveData[3]));
       for(int j=0;j<ReceiveData[3]*100;j++)
       {
         if(eof(handle)==1)break;
           read(handle,&ReceiveData[j+4],sizeof(ReceiveData[j+4]));
       }
    }
    IniOldData();
    close(handle);
    }
    catch(...)
    {
       Application->MessageBox("读文件错误","错误",MB_OK);
    }
    
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ClearAll()
{//清空
   Series1->Clear();
   Series2->Clear();
   cmbDate->Items->Clear();
   cmbDate->Text="";
   for(int j=4;j<100;j++)
   {  grdData->Cells[0][j-3]="";
      grdData->Cells[1][j-3]="";
   }
   tFromYear->Text="";
   tFromMonth->Text="";
   tFromDay->Text="";
   tFromHour->Text="";

   tToYear->Text="";
   tToMonth->Text="";
   tToDay->Text="";
   tToHour->Text="";
   for(int i=0;i<14;i++)
      for(int j=0;j<100;j++)
         TempData[i][j]=0;
}
//---------------------------------------------------------------------------
float __fastcall TfrmMain::ByteToFloat(Byte InVal)
{
    float  x=0x00;
    AnsiString strT;

    for(int i=0;i<8;i++)
    { if((InVal & Byte(pow(2,i)))>0)
           x+= pow(2,i-3);
    }
    strT=FloatToStr(x);
    
    return  StrToFloat(strT);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuClearSaveDataClick(TObject *Sender)
{//清空
   ShowMsg("主机清空记录仪中历史数据");
   SendReport(2);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuClearScrClick(TObject *Sender)
{//清屏
    ClearAll();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuDownLoadClick(TObject *Sender)
{//传数
   ShowMsg("主机召唤记录仪中历史数据");
   SendReport(1);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuTimeClick(TObject *Sender)
{//校时
    ShowMsg("主机对记录仪进行校时");
    SendReport(3);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuChartZoomOutClick(TObject *Sender)
{//扩大
   Chart1->ZoomPercent(120);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuChartZoomInClick(TObject *Sender)
{//缩小
   Chart1->ZoomPercent(80);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::mnuChartZoomResetClick(TObject *Sender)
{//恢复
    Chart1->UndoZoom();
}

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

void __fastcall TfrmMain::mnuPrintClick(TObject *Sender)
{//曲线打印
   try
   {
      Chart1->Print();
   }
   catch(...)
   {
        Application->MessageBox("打印出错,请检查是否安装打印机","端口错误,重新设置端口",MB_OK);
   }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::UDTempClick(TObject *Sender,
      TUDBtnType Button)
{//改变室温
   objSysInfo.StanTemp=StrToInt(eTemp->Text);
   TIniFile *FileIni = new TIniFile (IniFilePath);
      FileIni->WriteInteger("系统信息", "标准室温",objSysInfo.StanTemp);
   delete FileIni;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::UDDayClick(TObject *Sender, TUDBtnType Button)
{//改变天数
   objSysInfo.DayNum=StrToInt(eDay->Text);
   TIniFile *FileIni = new TIniFile (IniFilePath);
      FileIni->WriteInteger("系统信息", "天数",objSysInfo.DayNum);
   delete FileIni;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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