📄 unitcommset.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UnitCommSet.h"
#include "yb_base.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormCommSettings *FormCommSettings;
//---------------------------------------------------------------------------
__fastcall TFormCommSettings::TFormCommSettings(TComponent* Owner, TYbCustomCommDevice *lpCommDevice, bool FActive)
: TForm(Owner)
{
Font->Name = AppLang.FontName;
Font->Charset = AppLang.Charset;
Font->Size = AppLang.FontSize;
_YbCommDevice = lpCommDevice;
_ForceActive = FActive;
TMsgStrings Msg;
Caption = Msg.MsgPortSet ; //"端口设置"
GboxBase->Caption = Msg.StrGbxBase ; //"端口选项"
GBoxModem->Caption = Msg.StrGbxModem ; //"调制解调器选项"
GBoxBuffer->Caption = Msg.StrGbxBuffer; //"缓存容量"
BnDefault->Caption = Msg.MsgDefault ; //"默认"
BnOK->Caption = Msg.MsgOK ; //"确定"
BnCancel->Caption = Msg.MsgCancel ; //"取消"
lbPort ->Caption = Msg.MsgPort ; //"端口"
lbBaud ->Caption = Msg.MsgBaud ; //"波特率"
lbCheck->Caption = Msg.MsgCheck ; //"校验"
lbBits ->Caption = Msg.MsgBits ; //"数据位"
lbStops->Caption = Msg.MsgStops ; //"停止位"
lbFlow ->Caption = Msg.MsgFlow ; //"数据流控"
lbAAns ->Caption = Msg.MsgAAns ; //"自动应答"
lbInbs ->Caption = Msg.MsgInBuf ; //"输入缓存"
lbOutbs->Caption = Msg.MsgOutBuf; //"输出缓存"
TCommSerialPortInfo spi;
CbPort->Clear();
for(int i=0; i<spi.PortList->Count; i++)
CbPort->Items->Add(spi.PortList->Strings[i]);
CbParity->Clear();
CbParity->Items->Add(Msg.MsgNoParity); //"No parity (无)"
CbParity->Items->Add(Msg.MsgOdd ); //"Odd (奇)"
CbParity->Items->Add(Msg.MsgEven ); //"Even (偶)"
CbParity->Items->Add(Msg.MsgMark ); //"Mark (标记)"
CbParity->Items->Add(Msg.MsgSpacePty); //"Space (空格)"
CbFlow->Clear();
CbFlow->Items->Add(Msg.MsgNone ); //"None (无)"
CbFlow->Items->Add(Msg.MsgRtsCts ); //"RTS/CTS (硬件)"
CbFlow->Items->Add(Msg.MsgXonXoff); //"Xon/Xoff (软件)"
CbFlow->Items->Add(Msg.MsgRtsXon ); //"RTS/CTS & Xon/Xoff (硬件和软件)"
_OldActive = _YbCommDevice->Active;
_OldPortNo = _YbCommDevice->PortNo;
_OldBaud = _YbCommDevice->Baud;
_OldByteSize = _YbCommDevice->ByteSize;
_OldParity = _YbCommDevice->Parity;
_OldStopBits = _YbCommDevice->StopBits;
_OldFlowControl = _YbCommDevice->FlowControl;
_OldAutoAAns = _YbCommDevice->AutoAnswer;
_OldInBufSize = _YbCommDevice->InBufSize;
_OldOutBufSize = _YbCommDevice->OutBufSize;
CbPort->ItemIndex = CbPort->Items->IndexOf(TCommSerialPortInfo::PortName(_OldPortNo));
switch(_OldBaud)
{
case TYbCommDevice::br110 : CbSelBaud->ItemIndex = 0; break;
case TYbCommDevice::br300 : CbSelBaud->ItemIndex = 1; break;
case TYbCommDevice::br600 : CbSelBaud->ItemIndex = 2; break;
case TYbCommDevice::br1200 : CbSelBaud->ItemIndex = 3; break;
case TYbCommDevice::br2400 : CbSelBaud->ItemIndex = 4; break;
case TYbCommDevice::br4800 : CbSelBaud->ItemIndex = 5; break;
case TYbCommDevice::br9600 : CbSelBaud->ItemIndex = 6; break;
case TYbCommDevice::br14400 : CbSelBaud->ItemIndex = 7; break;
case TYbCommDevice::br19200 : CbSelBaud->ItemIndex = 8; break;
case TYbCommDevice::br38400 : CbSelBaud->ItemIndex = 9; break;
case TYbCommDevice::br56000 : CbSelBaud->ItemIndex = 10; break;
case TYbCommDevice::br57600 : CbSelBaud->ItemIndex = 11; break;
case TYbCommDevice::br115200: CbSelBaud->ItemIndex = 12; break;
case TYbCommDevice::br128000: CbSelBaud->ItemIndex = 13; break;
case TYbCommDevice::br256000: CbSelBaud->ItemIndex = 14; break;
}
CbByteSize->ItemIndex = _OldByteSize-5;
switch(_OldParity)
{
case TYbCommDevice::ptNoParity : CbParity->ItemIndex = 0; break;
case TYbCommDevice::ptOddParity : CbParity->ItemIndex = 1; break;
case TYbCommDevice::ptEvenParity : CbParity->ItemIndex = 2; break;
case TYbCommDevice::ptMarkParity : CbParity->ItemIndex = 3; break;
case TYbCommDevice::ptSpaceParity: CbParity->ItemIndex = 4; break;
default : CbParity->ItemIndex =-1; break;
}
switch(_OldStopBits)
{
case TYbCommDevice::sbOneStopBit : CbStopBits->ItemIndex = 0; break;
case TYbCommDevice::sbOne_5_StopBits: CbStopBits->ItemIndex = 1; break;
case TYbCommDevice::sbTwoStopBit : CbStopBits->ItemIndex = 2; break;
default : CbStopBits->ItemIndex =-1; break;
}
switch(_OldFlowControl)
{
case TYbCommDevice::fcRtsCts: CbFlow->ItemIndex = 1; break; //Rts/Cts
case TYbCommDevice::fcXonXoff: CbFlow->ItemIndex = 2; break; //Xon/Xoff
case TYbCommDevice::fcTranXonXoff: CbFlow->ItemIndex = 2; break; //Xon/Xoff
case TYbCommDevice::fcRtsCtsXonXoff: CbFlow->ItemIndex = 3; break; //Both
default: CbFlow->ItemIndex = 0; break; //None
}
EditAutoAns->Text = (int)_OldAutoAAns;
EditInBufSize->Text = _OldInBufSize;
EditOutBufSize->Text = _OldOutBufSize;
}
//---------------------------------------------------------------------------
void __fastcall TFormCommSettings::BnDefaultClick(TObject *Sender)
{
CbSelBaud->ItemIndex = 12; //TYbCommDevice::br115200;
CbParity->ItemIndex = 0; //TYbCommDevice::ptNoParity;
CbByteSize->ItemIndex = 8 - 5;
CbStopBits->ItemIndex = 0; //TYbCommDevice::sbOneStopBit;
CbFlow->ItemIndex = 0; //TYbCommDevice::fcNone;
EditAutoAns->Text = 0; //No Auto Answer
EditInBufSize->Text = 8192; //8kbytes
EditOutBufSize->Text = 8192; //8kbytes
}
//---------------------------------------------------------------------------
void __fastcall TFormCommSettings::BnOKClick(TObject *Sender)
{
if(MoveCtrlFocus())
return; //move focus
int NewPortNo, NewByteSize, NewAutoAAns;
long NewInBufSize, NewOutBufSize;
TYbCommDevice::TBaudRate NewBaud;
TYbCommDevice::TParity NewParity;
TYbCommDevice::TStopBits NewStopBits;
TYbCommDevice::TFlowControl NewFlowControl;
AnsiString s;
TMsgStrings Msg;
//选择端口
if(CbPort->ItemIndex<0)
{
CbPort->SetFocus(); //"必须选择端口"
Application->MessageBox(Msg.ErrSelPort.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
NewPortNo = TCommSerialPortInfo::PortNo(CbPort->Items->Strings[CbPort->ItemIndex]);
//设置波特率
switch(CbSelBaud->ItemIndex)
{
case 0: NewBaud = TYbCommDevice::br110 ; break;
case 1: NewBaud = TYbCommDevice::br300 ; break;
case 2: NewBaud = TYbCommDevice::br600 ; break;
case 3: NewBaud = TYbCommDevice::br1200 ; break;
case 4: NewBaud = TYbCommDevice::br2400 ; break;
case 5: NewBaud = TYbCommDevice::br4800 ; break;
case 6: NewBaud = TYbCommDevice::br9600 ; break;
case 7: NewBaud = TYbCommDevice::br14400 ; break;
case 8: NewBaud = TYbCommDevice::br19200 ; break;
case 9: NewBaud = TYbCommDevice::br38400 ; break;
case 10: NewBaud = TYbCommDevice::br56000 ; break;
case 11: NewBaud = TYbCommDevice::br57600 ; break;
case 12: NewBaud = TYbCommDevice::br115200; break;
case 13: NewBaud = TYbCommDevice::br128000; break;
case 14: NewBaud = TYbCommDevice::br256000; break;
default: CbSelBaud->SetFocus(); //"必须输入/选择波特率"
Application->MessageBox(Msg.ErrSelBaud.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
//数据位数
if(CbByteSize->ItemIndex<0)
{
CbByteSize->SetFocus(); //"必须选择数据位"
Application->MessageBox(Msg.ErrSelBits.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
NewByteSize = CbByteSize->ItemIndex+5;
//校验位
switch(CbParity->ItemIndex)
{
case 0: NewParity = TYbCommDevice::ptNoParity ; break;
case 1: NewParity = TYbCommDevice::ptOddParity ; break;
case 2: NewParity = TYbCommDevice::ptEvenParity ; break;
case 3: NewParity = TYbCommDevice::ptMarkParity ; break;
case 4: NewParity = TYbCommDevice::ptSpaceParity; break;
default: CbParity->SetFocus(); //"必须选择奇偶校验"
Application->MessageBox(Msg.ErrSelCheck.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
//停止位
switch(CbStopBits->ItemIndex)
{
case 0: NewStopBits = TYbCommDevice::sbOneStopBit ; break;
case 1: NewStopBits = TYbCommDevice::sbOne_5_StopBits; break;
case 2: NewStopBits = TYbCommDevice::sbTwoStopBit ; break;
default: CbStopBits->SetFocus(); //"必须选择停止位"
Application->MessageBox(Msg.ErrSelStops.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
//数据流控
switch(CbFlow->ItemIndex)
{
case 0: NewFlowControl = TYbCommDevice::fcNone ; break;
case 1: NewFlowControl = TYbCommDevice::fcRtsCts ; break;
case 2: NewFlowControl = TYbCommDevice::fcXonXoff ; break;
case 3: NewFlowControl = TYbCommDevice::fcRtsCtsXonXoff; break;
default: CbFlow->SetFocus(); //"必须选择数据流控制"
Application->MessageBox(Msg.ErrSelFlow.c_str(), Caption.c_str(), MB_OK|MB_ICONSTOP);
return;
}
//自动应答
try
{
s = EditAutoAns->Text.Trim();
if(s.IsEmpty())
throw Exception(Msg.ErrInvAAns);
int ians = StrToInt(s);
if((ians<0)||(ians>255))
throw Exception(Msg.ErrInvAAns);
NewAutoAAns = ians;
}
catch(Exception &e)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -