📄 terminal.cpp
字号:
//---------------------------------------------------------------------------
void __fastcall TTermForm::HexModeButClick(TObject *Sender)
{
commandmode = false;
if (hexmode)
{
hexmode = false;
StatusBar1->Panels->Items[4]->Text = "HexMode : Off";
Comm->NullStriping = true;
if (!modechanged)
{
position.row++;
position.col = 0;
modechanged = true;
}
}
else
{
hexmode = true;
StatusBar1->Panels->Items[4]->Text = "HexMode : On";
Comm->NullStriping = false;
if (!modechanged)
{
position.row++;
position.col = 0;
modechanged = true;
}
AddHex (" ", true);
}
RichEdit1->SetFocus();
SetRowCol (position.row, 0);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::FormCreate(TObject *Sender)
{
Comm->MakePortList (PortBox->Items);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ComboKeyBlock(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ComboKeyBlock2(TObject *Sender, char &Key)
{
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnRxData (DWORD Count)
{
char buf[1024];
esccommand = ecNone;
Comm->Read (buf, Count);
if (forbidupdate) return;
if (hexmode) AddHex (buf, false);
else AddText (buf, false);
if (textrecording) recordstream->Write (buf, strlen (buf));
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SetButtonClick(TObject *Sender)
{
AnsiString temp;
PortSet->Baudrate = Comm->BaudRate;
PortSet->Databits = Comm->DataBits;
PortSet->Parity = Comm->Parity;
PortSet->Stopbits = Comm->StopBits;
PortSet->Flow = Comm->FlowControl;
PortSet->ShowWindow ();
if (PortSet->ModalResult == mrOk)
{
Comm->BaudRate = PortSet->Baudrate;
Comm->DataBits = PortSet->Databits;
Comm->Parity = PortSet->Parity;
Comm->StopBits = PortSet->Stopbits;
Comm->FlowControl = PortSet->Flow;
temp.printf ("%i %i%c", Comm->BaudRate, Comm->DataBits, Comm->Parity);
switch (Comm->StopBits)
{
case 10: temp += "1";
break;
case 15: temp += "1.5";
break;
case 20: temp += "2";
}
StatusBar1->Panels->Items[0]->Text = temp;
switch (Comm->FlowControl)
{
case fcNone: StatusBar1->Panels->Items[1]->Text = "No Flow Control";
RTSLED->Enabled = true;
DTRLED->Enabled = true;
break;
case fcXFlow: StatusBar1->Panels->Items[1]->Text = "XOn/XOff";
RTSLED->Enabled = true;
DTRLED->Enabled = true;
break;
case fcRTSCTS: StatusBar1->Panels->Items[1]->Text = "RTS/CTS";
RTSLED->Enabled = false;
RTSLED->LEDOn = false;
DTRLED->Enabled = true;
break;
case fcDTRDSR: StatusBar1->Panels->Items[1]->Text = "DTR/DSR";
RTSLED->Enabled = true;
DTRLED->Enabled = false;
DTRLED->LEDOn = false;
break;
}
RTSLED->LEDOn = false;
DTRLED->LEDOn = false;
TXBRKLED->LEDOn = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
Timer1->Enabled = false;
Timer2->Enabled = false;
if (Comm->PortIsOpen) Comm->Close ();
ConButton->Enabled = true;
DisconButton->Enabled = false;
PortBox->Enabled = true;
StatusBar1->Panels->Items[5]->Text = "Disconnected";
if (textrecording) RecordText1Click (this);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnSignalChange (TObject *Sender)
{
MODEMSTAT stat;
stat = Comm->GetModemStatus ();
if (stat.Contains (msCTS)) CTSLED->LEDOn = true;
else CTSLED->LEDOn = false;
if (stat.Contains (msDSR)) DSRLED->LEDOn = true;
else DSRLED->LEDOn = false;
if (stat.Contains (msRing)) RILED->LEDOn = true;
else RILED->LEDOn = false;
if (stat.Contains (msDCD)) DCDLED->LEDOn = true;
else DCDLED->LEDOn = false;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::EchoButtonClick(TObject *Sender)
{
if (localecho)
{
localecho = false;
StatusBar1->Panels->Items[2]->Text = "Local Echo : Off";
}
else
{
localecho = true;
StatusBar1->Panels->Items[2]->Text = "Local Echo : On";
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::CRLFButtonClick(TObject *Sender)
{
if (crlf)
{
crlf = false;
StatusBar1->Panels->Items[3]->Text = "CR/LF : Off";
}
else
{
crlf = true;
StatusBar1->Panels->Items[3]->Text = "CR/LF : On";
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::Timer1Timer(TObject *Sender)
{
OnSignalChange (this);
if (esccommand == ecInitUpload && !escprocessed)
{
escprocessed = true;
TransmitFile1Click (this);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::TXBRKLEDClick(TObject *Sender)
{
if (Comm->PortIsOpen)
{
Comm->SetBreakState (TXBRKLED->LEDOn);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::DTRLEDClick(TObject *Sender)
{
if (Comm->PortIsOpen && Comm->FlowControl != fcDTRDSR)
{
Comm->SetDTRState (DTRLED->LEDOn);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::RTSLEDClick(TObject *Sender)
{
if (Comm->PortIsOpen && Comm->FlowControl != fcRTSCTS)
{
Comm->SetRTSState (RTSLED->LEDOn);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnBreak (TObject *Sender)
{
Timer2->Enabled = true;
BRKLED->LEDOn = true;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::Timer2Timer(TObject *Sender)
{
Timer2->Enabled = false;
BRKLED->LEDOn = false;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SaveAsClick(TObject *Sender)
{
int r;
SaveDialog1->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
SaveDialog1->FilterIndex = 1;
SaveDialog1->DefaultExt = "txt";
if (SaveDialog1->Execute ())
{
if (FileExists (SaveDialog1->FileName))
{
if (Application->MessageBox ("File already exists\nOverwrite ?", "Info",
MB_OKCANCEL | MB_ICONINFORMATION) != IDOK) return;
}
RichEdit1->Lines->SaveToFile (SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ClearButtonClick(TObject *Sender)
{
ClearEditClick (this);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ResetButtonClick(TObject *Sender)
{
PgmDlg->ResetMCU ();
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::TransmitFile1Click(TObject *Sender)
{
char ch = 0x04;
OpenDialog1->Filter = "All Files (*.*)|*.*";
OpenDialog1->FilterIndex = 1;
if (OpenDialog1->Execute ())
{
forbidupdate = true;
TransDlg->TransmitFile (Comm, OpenDialog1->FileName);
if (esccommand == ecInitUpload) Comm->Write (&ch, 1);
forbidupdate = false;
}
else if (esccommand == ecInitUpload)
{
ch = 0x15;
Comm->Write (&ch, 1);
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::RecordText1Click(TObject *Sender)
{
if (textrecording)
{
textrecording = false;
RecordText1->Caption = "Record Text";
if (recordstream != NULL)
{
delete recordstream;
recordstream = 0;
}
}
else
{
SaveDialog1->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
SaveDialog1->FilterIndex = 1;
SaveDialog1->DefaultExt = "txt";
if (SaveDialog1->Execute ())
{
recordstream = new TFileStream (SaveDialog1->FileName, fmCreate);
if (recordstream != NULL)
{
textrecording = true;
RecordText1->Caption = "Stop Recording";
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnError (DWORD Error)
{
//if (Error & CE_BREAK) StatusBar1->Panels->Items[6]->Text = "Break detected";
if (Error & CE_FRAME) StatusBar1->Panels->Items[6]->Text = "Framing Error";
if (Error & CE_IOE) StatusBar1->Panels->Items[6]->Text = "I/O Error";
if (Error & CE_MODE) StatusBar1->Panels->Items[6]->Text = "Unsupported Mode";
if (Error & CE_OVERRUN) StatusBar1->Panels->Items[6]->Text = "Buffer Overrun";
if (Error & CE_RXPARITY) StatusBar1->Panels->Items[6]->Text = "Parity Error";
if (Error & CE_FRAME) StatusBar1->Panels->Items[6]->Text = "Tx Buffer Overflow";
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::RichKey(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ToolButton10Click(TObject *Sender)
{
mfrm->BringToFront ();
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SaveSettings(TIniFile *prj)
{
int t;
AnsiString temp;
temp = PortBox->Items->Strings[PortBox->ItemIndex];
prj->WriteString ("Terminal", "Port", temp);
prj->WriteInteger ("Terminal", "Baudrate", Comm->BaudRate);
prj->WriteInteger ("Terminal", "Databits", Comm->DataBits);
t = (int)Comm->Parity;
prj->WriteInteger ("Terminal", "Parity", t);
prj->WriteInteger ("Terminal", "Stopbits", Comm->StopBits);
prj->WriteInteger ("Terminal", "FlowControl", Comm->FlowControl);
prj->WriteBool ("Terminal", "CRLF", crlf);
prj->WriteBool ("Terminal", "Hexmode", hexmode);
prj->WriteBool ("Terminal", "LocalEcho", localecho);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::LoadSettings(TIniFile *prj)
{
int t;
AnsiString temp;
Comm->BaudRate = prj->ReadInteger ("Terminal", "Baudrate", 9600);
Comm->DataBits = prj->ReadInteger ("Terminal", "Databits", 8);
t = prj->ReadInteger ("Terminal", "Parity", (int)'N');
Comm->Parity = (char)t;
Comm->StopBits = prj->ReadInteger ("Terminal", "Stopbits", 10);
Comm->FlowControl = (TFlowControl)prj->ReadInteger ("Terminal", "FlowControl", fcNone);
temp = prj->ReadString ("Terminal", "Port", "COM1");
for (t = 0;t < PortBox->Items->Count;t++)
{
if (PortBox->Items->Strings[t] == temp)
{
PortBox->ItemIndex = t;
break;
}
}
if (t == PortBox->Items->Count) PortBox->ItemIndex = 0;
crlf = prj->ReadBool ("Terminal", "CRLF", true);
if (crlf) StatusBar1->Panels->Items[3]->Text = "CR/LF : On";
else StatusBar1->Panels->Items[3]->Text = "CR/LF : Off";
hexmode = prj->ReadBool ("Terminal", "Hexmode", false);
if (hexmode) StatusBar1->Panels->Items[4]->Text = "HexMode : On";
else StatusBar1->Panels->Items[4]->Text = "HexMode : Off";
localecho = prj->ReadBool ("Terminal", "LocalEcho", false);
if (localecho) StatusBar1->Panels->Items[2]->Text = "Local Echo : On";
else StatusBar1->Panels->Items[2]->Text = "Local Echo : Off";
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -