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

📄 main.cpp

📁 GPRS上位机C++BUILDER源码 厂家内部资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------


void __fastcall TForm1::F1Click(TObject *Sender)
{
 AboutForm=new TAboutForm(this);
 AboutForm->ShowModal();

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

void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
   Memo2->WordWrap=CheckBox1->Checked;
}
//---------------------------------------------------------------------------
int  __fastcall TForm1::BuiltUpBuf(bool bTxt,bool bHex,AnsiString asTxt,AnsiString asHex)
{ int iLength,iTmp;
  char cTmpBuf[nMaxOutByte],cIBuf[3];
  char  *cTmp,*cHex;
  cOutDatBuf[0]=0;
  cTmp=cOutDatBuf;
  if(bTxt) { strcpy(cTmpBuf,asTxt.c_str());
             cHex= cTmpBuf;
             while(*cHex!=0)
               {  if(*cHex!='\\') *cTmp++=*cHex++;
                    else {  cHex++;
                            switch(*cHex)
                              {  case 'X' :
                                 case 'x' : cHex++;
                                            cIBuf[0]=UpCase(*cHex);
                                            if(((cIBuf[0]>='0')&&(*cHex<='9'))||((cIBuf[0]>='A')&&(*cHex<='F')))
                                                        cHex++;
                                                 else break;
                                            cIBuf[1]=UpCase(*cHex);
                                            if(((cIBuf[1]>='0')&&(cIBuf[1]<='9'))||((cIBuf[1]>='A')&&(cIBuf[1]<='F')))
                                                        cHex++;
                                                 else  { cIBuf[1]=cIBuf[0];
                                                         cIBuf[0]='0';
                                                        }
                                            String2Bytes(cIBuf, cTmp, 2);
                                            cTmp++;
                                            break;
                                 case '0' :
                                 case '1' :
                                 case '2' :
                                 case '3' :
                                 case '4' :
                                 case '5' :
                                 case '6' :
                                 case '7' :
                                 case '8' :
                                 case '9' : for(iTmp=0;iTmp<3;iTmp++)
                                               { if((*cHex>='0')&&(*cHex<='9')) cIBuf[iTmp]=*cHex++;
                                                   else break;
                                                 }
                                            iTmp=atoi(cIBuf);
                                            if(iTmp>254) { iTmp=iTmp/10;cHex--;}
                                            *cTmp++=iTmp;
                                            break;
                                 case '\\' :
                                 case '\'' :
                                 case '"' :
                                 case '?' : *cTmp++=*cHex++;
                                            break;
                                 case 'a' : *cTmp++=0x07;
                                            cHex++;
                                            break;
                                 case 'b' : *cTmp++=0x08;
                                            cHex++;
                                            break;
                                 case 'f' : *cTmp++=0x0C;
                                            cHex++;
                                            break;
                                 case 'n' : *cTmp++=0x0A;
                                            cHex++;
                                            break;
                                 case 'r' : *cTmp++=0x0D;
                                            cHex++;
                                            break;
                                 case 't' : *cTmp++=0x09;
                                            cHex++;
                                            break;
                                 case 'v' : *cTmp++=0x0B;
                                            cHex++;
                                            break;
                               }

                           }
                }
             *cTmp=0;
            }
  iLength=cTmp-cOutDatBuf;
  if(bHex)
     {   cTmp=cOutDatBuf+iLength;
         int iHexLen=asHex.Length();
         cHex=new char[iHexLen+1] ;
         strcpy(cHex,asHex.c_str());
         if((iHexLen%2)>0)
             { cHex[iHexLen]=cHex[iHexLen-1];
               cHex[iHexLen-1]='0';
               iHexLen++;
              }
         iLength=iLength+String2Bytes(cHex,cTmp,iHexLen);
         delete cHex;
      }
  return iLength ;
}

int __fastcall TForm1::String2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)
{  char cTmp;
    for(int i=0; i<nSrcLength; i+=2)
    {
        // 输出高4位
        if(*pSrc>='0' && *pSrc<='9')
           {
               *pDst = (*pSrc - '0') << 4;
            }
         else
           {   cTmp=UpCase(*pSrc);
               *pDst = (cTmp - 'A' + 10) << 4;
            }
    
        pSrc++;
    
        // 输出低4位
        if(*pSrc>='0' && *pSrc<='9')
           {
               *pDst |= *pSrc - '0';
           }
         else
           {   cTmp=UpCase(*pSrc);
               *pDst |= cTmp- 'A' + 10;
            }
        pSrc++;
        pDst++;
    }

    // 返回目标数据长度
    return nSrcLength / 2;
}




void __fastcall TForm1::SendData(int nSendByte )
{
    int hdSk;
    AnsiString asTmp;
    try
      {for(int i=0;i<AddrList->Count;i++)
        { if(AddrList->Checked[i])
            { hdSk=AddrList->Items->Strings[i].Pos("::")+2;
              asTmp=AddrList->Items->Strings[i].SubString(hdSk,AddrList->Items->Strings[i].Length()-hdSk+1);
              try{hdSk=asTmp.ToInt();}   catch(...){hdSk=0;}
              for(int j=0;j<GSER->Socket->ActiveConnections;j++)
                 { if(hdSk==GSER->Socket->Connections[j]->SocketHandle)
                     {   GSER->Socket->Connections[i]->SendBuf(cOutDatBuf,nSendByte);
                         asTmp="   发送数据到: "+GSER->Socket->Connections[i]->RemoteAddress;
                         DispCommData(cOutDatBuf, nSendByte,asTmp);
                         SaveCommData();
                       }
                  }
             }
         }
       }
     catch(...)
      {   }
}


//---------------------延时程序-------------------------------
//      编写日期:2002。5。22
//      参数说明:iDelay  -----延时时间,单位毫秒
//      更改日期:
//      更改缘由:
//----------------------------------------------------------------
void __fastcall TForm1::Delay(DWORD iDelay)
{ DWORD dTimeMark;

  dTimeMark=GetTickCount();
  while (true)
       {
         if( ( GetTickCount()- dTimeMark)>=iDelay) break;
            else  Application->ProcessMessages();
        }
}


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  while(DataLock) Delay(5);
  DataLock=true;
  try{
     int nSendByte=BuiltUpBuf(CheckBox11->Checked,CheckBox12->Checked,Edit3->Text,Edit4->Text);
     SendData(nSendByte );
     }
  catch(...)  {      }
  DataLock=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton7Click(TObject *Sender)
{
    Memo2->Lines->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton8Click(TObject *Sender)
{
   AnsiString asTmp=FormatDateTime(".\\mm-dd_hh-nn", Now() )+".log";
   Memo2->Lines->SaveToFile(asTmp);
   StatusBar1->Panels->Items[1]->Text = "数据已保存为: " + asTmp;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N6Click(TObject *Sender)
{
  SpeedButton1->Down=!SpeedButton1->Down;
if(SpeedButton1->Down)
   {
     try
        {Timer1->Interval=Edit2->Text.ToInt();}
     catch(...)
        {Timer1->Interval=1000;}
     Timer1->Enabled=CheckBox14->Checked;
     while(DataLock) Delay(5);
     DataLock=true;
     try{
         int nSendByte=BuiltUpBuf(CheckBox11->Checked,CheckBox12->Checked,Edit3->Text,Edit4->Text);
         SendData(nSendByte );
         }
       catch(...){    }  
     DataLock=false;
     if(!Timer1->Enabled) SpeedButton1->Down=false;
   }
 else Timer1->Enabled=SpeedButton1->Down;

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

void __fastcall TForm1::GSERClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
    ErrorCode=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DispCommData(char *cRecByte,DWORD nRecByte,AnsiString asMSG)
{  AnsiString asTmp;

   if(CheckBox8->Checked)
       {  if( CheckBox7->Checked) asTmp=FormatDateTime("yyyy-mm-dd  hh:nn:ss zzz  ", Now() );
              else asTmp="";
          asTmp=asTmp+asMSG;
          Memo2->Lines->Add(asTmp);
          if(CheckBox5->Checked)
              {asTmp=RecByteToTxt(cRecByte, nRecByte);
               Memo2->Lines->Add("文本显示:   "+asTmp);
               }
          if(CheckBox4->Checked)
              { asTmp=RecByteToHex(cRecByte, nRecByte);
                Memo2->Lines->Add("HEX 显示:   "+asTmp);
              }
          Memo2->Lines->Add(" ");
        }


}
void __fastcall TForm1::SaveCommData()
{ AnsiString asTmp;
  try
    {
       if((CheckBox3->Checked)&& (Memo2->Lines->Count>1000))
           {   if( CheckBox10->Checked)
                      { asTmp=FormatDateTime(".\\mdhn.log", Now() );
                        Memo2->Lines->SaveToFile(asTmp);
                        StatusBar1->Panels->Items[1]->Text = "数据已保存为: " + asTmp;
                       }
               Memo2->Lines->Clear();
            }
      }
    catch(...)
     {        }
}

void __fastcall TForm1::HeartRPT(char *pcDat,int iPGL,TCustomWinSocket *Socket)
{
  int iRPTL=BuiltUpBuf(true,false,Edit7->Text,"");
  char *pcRPT=cOutDatBuf;
  char *pcPGL=pcDat;
  bool bFit=false;
  for(int i=0;i<iPGL;i++)
     {  if(*pcPGL++==*pcRPT)
           { bFit=true;
             for(int j=0;j<(iRPTL-1);j++)
               {  if(*(pcPGL+j)!=*(pcRPT+j+1))
                     {bFit=false;
                      break;
                      }
                }
             if(bFit)break;
            }
      }
  if(bFit)
    { int nSendByte=iRPTL=BuiltUpBuf(true,false,Edit8->Text,"");
      Socket->SendBuf(cOutDatBuf,nSendByte);
    }
}

⌨️ 快捷键说明

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