📄 main.cpp
字号:
//---------------------------------------------------------------------------
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 + -