📄 main.cpp
字号:
// '0'~'9'
!((p[i]>47) &&(p[i]<58) || (p[i]>64) &&(p[i]<91) || (p[i]>96) &&(p[i]<123)) )
i++;
if (((i+1)>sin.Length()) ||
!((p[i+1]>47) &&(p[i+1]<58) || (p[i+1]>64) &&(p[i+1]<91) || (p[i+1]>96) &&(p[i+1]<123)) )
st =p[i];
else
st =AnsiString(p[i]) +AnsiString(p[i+1]);
try
{
if (HexToBin(st.c_str(), (char*)&d, 4)>0)
{
ShowMessage(char(d));
sr = sr+char(d);
}
}
catch(...)
{
}
i +=2;
}
*/
int d;
AnsiString sr ="";
stringstream ss;
ss << sin.c_str();
while (ss >> hex >>d)
sr = sr +Format("%d", ARRAYOFCONST((d)));
return sr;
}
//---------------------------------------------------------------------------
void Tfrmmain::sendString(const AnsiString &sData)
{
if (Comm1->WriteCommData(sData.c_str(), sData.Length()))
{
FTXNum = FTXNum+sData.Length();
strRxTx = Format(" Rx:%d; Tx:%d", ARRAYOFCONST((FRXNum, FTXNum)));
SendMessage(mainStBar->Handle, SB_SETTEXT, 2, (int)strRxTx.c_str());
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::Comm1ReceiveData(TObject *Sender, Pointer Buffer,
WORD BufferLength)
{
AnsiString st;
//数据字符显示方式
//自动清空
if (Memo1->Lines->Count > 100)
Memo1->Lines->Clear();
st.SetLength(BufferLength);
Move(Buffer, st.c_str(), BufferLength);
handleData(st.c_str(), BufferLength);
if (cbDisHex->Checked)
Memo1->Lines->Add(StrToHexStr(st));
else
Memo1->Lines->Add(st);
FRXNum +=BufferLength;
ncr +=BufferLength;
if (ncr==80)
{
Memo1->Lines->Add("\n");
ncr=0;
}
strRxTx = Format(" Rx:%d; Tx:%d", ARRAYOFCONST((FRXNum, FTXNum)));
SendMessage(mainStBar->Handle, SB_SETTEXT, 2, (int)strRxTx.c_str());
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::sbtnPortClick(TObject *Sender)
{
int BaudRate;
Screen->Cursor = crHourGlass;
sbtnPort->Enabled = false;
try
{
if (!IsPortOpen) // 打开串口
{
if (!TryStrToInt(CmbBRate->Text, BaudRate))
{
Application->MessageBox("波特率设定有误\n请重新输入", SHintTitle, MB_ICONWARNING +MB_OK);
CmbBRate->SetFocus();
return;
}
Comm1->StartComm();
IsPortOpen = true;
FRXNum =0;
FTXNum =0;
}
else //关闭串口
{
Comm1->StopComm();
IsPortOpen = false;
};
setControlState();
sbtnPort->Enabled = true;
Screen->Cursor = crDefault;
}
catch(...)
{
sbtnPort->Enabled = true;
Screen->Cursor = crDefault;
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::setControlState()
{
CmbPort->Enabled = !IsPortOpen;
CmbBRate->Enabled = !IsPortOpen;
CmbPBit->Enabled = !IsPortOpen;
CmbDBit->Enabled = !IsPortOpen;
CmbSBit->Enabled = !IsPortOpen;
if (IsPortOpen) // 串口已打开
{
loadBmp(sbtnPort->Glyph, SResLedOff);
mc_OpenComm->Caption ="关闭串口(&S)";
sbtnPort->Hint ="关闭串口|";
strPortStatus =Format(" STATUS: %s Opened %s %s %s %s",ARRAYOFCONST((CmbPort->Text,
IntToStr(Comm1->BaudRate),CmbPBit->Text, CmbSBit->Text,CmbDBit->Text)));
}
else // 串口已关闭
{
loadBmp(sbtnPort->Glyph, SResLedOn);
mc_OpenComm->Caption ="打开串口(&S)";
sbtnPort->Hint ="打开串口|";
strPortStatus =" STATUS: COM Port Closed";
};
SendMessage(mainStBar->Handle, SB_SETTEXT, 1, (int)strPortStatus.c_str());
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::mc_TestClick(TObject *Sender)
{
if(IsPortOpen)
{
if (cbsendHex->Checked)
sendString(HexStrToStr(Memo2->Text));
else
sendString(Memo2->Text);
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::sbtnSetPClick(TObject *Sender)
{
LockWindowUpdate(frmmain->Handle);
Panel2->Visible =!Panel2->Visible;
if (Panel2->Visible)
{
loadBmp(sbtnSetP->Glyph, SResM2O);
mo_SetP->Caption = "隐藏设置(&P)";
sbtnSetP->Hint = "隐藏设置面板|";
}
else
{
loadBmp(sbtnSetP->Glyph, SResO2M);
mo_SetP->Caption = "显示设置(&P)";
sbtnSetP->Hint = "显示设置面板|";
}
LockWindowUpdate(NULL);
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::sbtnShowDClick(TObject *Sender)
{
LockWindowUpdate(frmmain->Handle);
Memo1->Visible =!Memo1->Visible;
Chart1->Visible = !Memo1->Visible;
if (Memo1->Visible)
{
loadBmp(sbtnShowD->Glyph, SResCurve);
mo_ShowD->Caption ="显示曲线(&D)";
sbtnShowD->Hint ="显示曲线|";
}
else
{
loadBmp(sbtnShowD->Glyph, SResText);
mo_ShowD->Caption ="显示文本(&D)";
sbtnShowD->Hint ="显示文本|";
}
LockWindowUpdate(NULL);
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::sbtnStickClick(TObject *Sender)
{
IsOnTop = !IsOnTop;
if (IsOnTop)
{
SetWindowPos(this->Handle, HWND_TOPMOST, this->Left, this->Top,
this->Width, this->Height, 0);
loadBmp(sbtnStick->Glyph, SResStick2);
}
else
{
SetWindowPos(this->Handle, HWND_NOTOPMOST, this->Left, this->Top,
this->Width, this->Height, 0);
loadBmp(sbtnStick->Glyph, SResStick1);
};
}
//---------------------------------------------------------------------------
void Tfrmmain::handleData(char* p, WORD BuffLen)
{
Scalar val;
for(int i=0; i<BuffLen; i++)
{
tmpVal[nbt] =p[i];
nbt++;
if ((nbt+1)==NBYTE)
{
nbt =0;
val = Scalar(*tmpVal);
nsp++;
if (nsp==ScrollPoints)
{
DoScrollPoints();
nsp =0;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::RealTimeAdd(TChartSeries *Series, Scalar val)
{
// Add new point
Series->AddXY(FRXNum, val, "", clTeeColor);
}
//---------------------------------------------------------------------------
void __fastcall Tfrmmain::DoScrollPoints(void)
{
/*
Scalar tmpMin,tmpMax;
// Delete multiple points with a single call.
// Much faster than deleting points using a loop.
//Series1->Delete(0,ScrollPoints);
// Scroll horizontal bottom axis
//Scalar tmp = Series1->XValues->Last();
Chart1->BottomAxis->SetMinMax(tmp-MaxPoints+ScrollPoints,tmp+ScrollPoints);
// Scroll vertical left axis
tmpMin = Series1->YValues->MinValue;
tmpMax = Series1->YValues->MaxValue;
Chart1->LeftAxis->SetMinMax(tmpMin-tmpMin/5,tmpMax+tmpMax/5);
// Do chart repaint after deleting and scrolling
Application->ProcessMessages();
*/
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -