16,747
社区成员




{ Baud rates at which the communication device operates }
CBR_110 = 110;
{$EXTERNALSYM CBR_110}
CBR_300 = 300;
{$EXTERNALSYM CBR_300}
CBR_600 = 600;
{$EXTERNALSYM CBR_600}
CBR_1200 = 1200;
{$EXTERNALSYM CBR_1200}
CBR_2400 = 2400;
{$EXTERNALSYM CBR_2400}
CBR_4800 = 4800;
{$EXTERNALSYM CBR_4800}
CBR_9600 = 9600;
{$EXTERNALSYM CBR_9600}
CBR_14400 = 14400;
{$EXTERNALSYM CBR_14400}
CBR_19200 = 19200;
{$EXTERNALSYM CBR_19200}
CBR_38400 = 38400;
{$EXTERNALSYM CBR_38400}
CBR_56000 = 56000;
{$EXTERNALSYM CBR_56000}
CBR_57600 = 57600;
{$EXTERNALSYM CBR_57600}
CBR_115200 = $1C200;
{$EXTERNALSYM CBR_115200}
CBR_128000 = $1F400;
{$EXTERNALSYM CBR_128000}
CBR_256000 = $3E800;
{$EXTERNALSYM CBR_256000}
type
BaudRateStr = record
RateInt : Cardinal;
rateStr : String;
end;
const
DCB_BaudRates : array[0..15] of BaudRateStr =
( (RateInt : 0; RateStr : '0'),
(RateInt : CBR_110; RateStr : 'CBR_300'),
(RateInt : CBR_600; RateStr : 'CBR_1200')........
);
scOptions = Record
sPort : String;
BaudRate : String;
ByteSize : String;
Parity : String;
StopBits : String;
end;
function OpenScPort(const scOpt : scOptions) : THandle;
var
cc : TCOMMCONFIG;
sTemp : String;
begin
Result := CreateFile(PChar(scOpt.sPort),
GENERIC_READ or GENERIC_WRITE,
0, {not shared}
nil,
OPEN_EXISTING,
0, {FILE_ATTRIBUTE_NORMAL}
0 );
if Result = INVALID_HANDLE_VALUE then
begin
sTemp := #10#13 + '无法打开'+ scOpt.sPort + '端口,请确认'+ scOpt.sPort
+ '端口存在,并且没有被其他程序占用!';
MessageBox(Application.Handle, PChar(sTemp), '提示', MB_OK+MB_ICONWARNING+MB_APPLMODAL);
Exit;
end;
GetCommState(Result, cc.dcb);
cc.dcb.BaudRate := Cardinal(scOpt.BaudRate); //-----//
cc.dcb.ByteSize := StrToInt(scOpt.ByteSize);
cc.dcb.Parity := Cardinal(scOpt.Parity);
cc.dcb.StopBits := Cardinal(scOpt.StopBits);
showmessage(inttostr(cc.dcb.StopBits)); //-----//
if not SetCommState(Result, cc.dcb) then
begin
sTemp := #10#13 + '设置'+ scOpt.sPort + '端口参数过程中发生错误,程序将无法使用'
+ scOpt.sPort + '端口!';
MessageBox(Application.Handle, PChar(sTemp), '提示', MB_OK+MB_ICONWARNING+MB_APPLMODAL);
Exit;
end;
PurgeComm(Result,PURGE_RXCLEAR);
end;