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 + -
显示快捷键?