commx.pas
来自「日语版232串口的通信用控件源代码」· PAS 代码 · 共 635 行 · 第 1/3 页
PAS
635 行
// 憲怣僗儗僢僪偺惗惉
try
TransThread := TCommTransThread.Create(Self, FHandle, FHWnd);
except
raise ECommError.Create('憲怣梡僗儗僢僪傪惗惉偱偒傑偣傫偱偟偨');
end;
TransThread.Resume;
// 庴怣梡僗儗僢僪偺惗惉
try
ReceiveThread := TCommReceiveThread.Create(FHandle, FHWnd);
except
raise ECommError.Create('庴怣梡僗儗僢僪傪惗惉偱偒傑偣傫偱偟偨');
end;
ReceiveThread.Resume;
Sleep(100);
end;
//**********************************************************************//
// //
// 乣 捠怣億乕僩偺僋儘乕僘 乣 //
// //
// - input - 側偟 //
// - output - 側偟 //
// //
//**********************************************************************//
procedure TCustomCommX.PortClose;
begin
if FHandle <> INVALID_HANDLE_VALUE then begin
SetDtrSignal(False); // 俢俿俼傪僆僼偵偡傞
SetRtsSignal(False); // 俼俿俽傪僆僼偵偡傞
ClearTransBuf; // 憲怣僶僢僼傽傪攋婞
ClearReceiveBuf; // 庴怣僶僢僼傽傪攋婞
Sleep(100); // 儌僨儉傪妋幚偵僆僼偡傞偨傔
if TransThread <> Nil then begin
TransThread.Terminate; // 憲怣僗儗僢僪廔椆
SetEvent(TransThread.StartHandle); // 僗儗僢僪巒摦
end;
if ReceiveThread <> Nil then begin
ReceiveThread.Terminate; // 庴怣僗儗僢僪廔椆
SetEvent(ReceiveThread.ExitHandle); // 僀儀儞僩懸偪廔椆
end;
CloseHandle(ReadHandle); // 撉傒崬傒廔椆僔僌僫儖偺僋儘乕僘
ReadHandle := 0;
CloseHandle(FHandle); // 捠怣億乕僩傪僋儘乕僘
FHandle := INVALID_HANDLE_VALUE;
Sleep(100); // 捈屻偵僆乕僾儞偱偒傞傛偆偵
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 億乕僩斣崋偺愝掕 乣 //
// //
// - input - PortNo Integer 億乕僩斣崋 //
// //
// - output - 側偟 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetPortNo(const PortNo: Integer);
begin
FPortNo := PortNo;
if FHandle <> INVALID_HANDLE_VALUE then begin
PortClose;
PortOpen;
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 捠怣懍搙偺愝掕 乣 //
// //
// - input - BitRate Integer 捠怣懍搙乮倐倫倱乯 //
// //
// 300/600/1200/2400/4800/9600 //
// 14400/19200/38400/56000/57600 //
// 115200/128000/256000 側偳 //
// //
// - output - 側偟 //
// //
// 仸 幚嵺偵愝掕偱偒傞偐偳偆偐偼丄僴乕僪僂僃傾傗僪儔僀僶偵傛傞丅 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetBitRate(const BitRate: Integer);
begin
FBitRate := BitRate;
if FHandle <> INVALID_HANDLE_VALUE then begin
FDCB.BaudRate := BitRate;
if not SetCommState(FHandle, FDCB) then begin
raise ECommError.Create('捠怣懍搙偺愝掕偱僄儔乕偑敪惗偟傑偟偨');
end;
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 憲庴怣偡傞侾僉儍儔僋僞偺價僢僩悢偺愝掕 乣 //
// //
// - input - CharSize Integer 價僢僩悢 5..8 //
// //
// - output - 側偟 //
// //
// 仸 幚嵺偵愝掕偱偒傞偐偳偆偐偼丄僴乕僪僂僃傾傗僪儔僀僶偵傛傞丅 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetCharSize(const CharSize: Integer);
begin
FCharSize := CharSize;
if FHandle <> INVALID_HANDLE_VALUE then begin
FDCB.ByteSize := CharSize;
if not SetCommState(FHandle, FDCB) then begin
raise ECommError.Create('捠怣價僢僩悢偺愝掕偱僄儔乕偑敪惗偟傑偟偨');
end;
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 僷儕僥傿僠僃僢僋曽幃偺愝掕 乣 //
// //
// - input - ParityBit TCommParityBits 僷儕僥傿僞僀僾 //
// //
// cpbNone: 側偟 //
// cpbOdd: 婏悢 //
// cpbEven: 嬼悢 //
// //
// - output - 側偟 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetParityBit(const ParityBit: TCommParityBits);
begin
FParityBit := ParityBit;
if FHandle <> INVALID_HANDLE_VALUE then begin
case ParityBit of
cpbNone : FDCB.Parity := NOPARITY;
cpbOdd : FDCB.Parity := ODDPARITY;
cpbEven : FDCB.Parity := EVENPARITY;
else
exit;
end;
if not SetCommState(FHandle, FDCB) then begin
raise ECommError.Create('捠怣僷儕僥傿僠僃僢僋偺愝掕偱僄儔乕偑敪惗偟傑偟偨');
end;
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 僗僩僢僾價僢僩悢偺愝掕 乣 //
// //
// - input - StopBit TCommStopBits 僗僩僢僾價僢僩 //
// //
// csb1: 侾價僢僩 //
// csb1p5: 侾丏俆價僢僩 //
// csb2: 俀價僢僩 //
// //
// - output - 側偟 //
// //
// 仸 幚嵺偵愝掕偱偒傞偐偳偆偐偼丄僴乕僪僂僃傾傗僪儔僀僶偵傛傞丅 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetStopBit(const StopBit: TCommStopBits);
begin
FStopBit := StopBit;
if FHandle <> INVALID_HANDLE_VALUE then begin
case StopBit of
csb1 : FDCB.StopBits := ONESTOPBIT;
csb1p5 : FDCB.StopBits := ONE5STOPBITS;
csb2 : FDCB.StopBits := TWOSTOPBITS;
else
exit;
end;
if not SetCommState(FHandle, FDCB) then begin
raise ECommError.Create('捠怣僗僩僢僾價僢僩悢偺愝掕偱僄儔乕偑敪惗偟傑偟偨');
end;
end;
end;
//----------------------------------------------------------------------//
// //
// 乣 僼儘乕惂屼曽幃偺愝掕 乣 //
// //
// - input - FlowCtrl TCommFlowCtrls 惂屼曽幃 //
// //
// cfcRtsCts: RTS/CTS惂屼傪峴偆 //
// cfcDtrDsr: DTR/DSR惂屼傪峴偆 //
// cfcXonXoff: XON/XOFF惂屼傪峴偆 //
// cfcHalfHigh: 敿擇廳惂屼傪憲怣帪ON偱峴偆 //
// cfcHalfLow: 敿擇廳惂屼傪憲怣帪OFF偱峴偆 //
// cfcNone: 壗傕惂屼傪峴傢側偄 //
// //
// - output - 側偟 //
// //
//----------------------------------------------------------------------//
procedure TCustomCommX.SetFlowCtrl(const FlowCtrl: TCommFlowCtrls);
var
Flag : DWORD;
begin
FFlowCtrl := FlowCtrl;
if FHandle <> INVALID_HANDLE_VALUE then begin
Flag := 0;
if FlowCtrl = cfcRtsCts then begin // RTS/CTS疼皭
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?