亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? spcomm.pas

?? 系統(tǒng)環(huán)境要求 Windows 98或WinNT4/5或以上版本 MS Access 2000或以上版本 Delphi 5.0或以上版本
?? PAS
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
unit SPComm;
//
// 這是一個(gè)串行端口通訊組件, 供 Delphi 2.0 應(yīng)用程序使用. 適合用來(lái)做工業(yè)控制及
// 簡(jiǎn)單傳輸. 此組件調(diào)用 Win32 API 來(lái)達(dá)成所需功能, 請(qǐng)見Communications部份。
//
// 此組件參考 David Wann. 所制作的 COMM32.PAS Version 1.0。原始說(shuō)明如下:
// This Communications Component is implemented using separate Read and Write
// threads. Messages from the threads are posted to the Comm control which is
// an invisible window. To handle data from the comm port, simply
// attach a handler to 'OnReceiveData'. There is no need to free the memory
// buffer passed to this handler. If TAPI is used to open the comm port, some
// changes to this component are needed ('StartComm' currently opens the comm
// port). The 'OnRequestHangup' event is included to assist this.
//
// David Wann
// Stamina Software
// 28/02/96
// davidwann@hunterlink.net.au
//
//
// 這個(gè)組件完全免費(fèi), 歡迎拷貝' 修改或做任何其它用途. 除了單獨(dú)銷售此組件.
// This component is totally free(copyleft), you can do anything in any
// purpose EXCEPT SELL IT ALONE.
//
//
// Author?: 小豬工作室 Small-Pig Team         in Taiwan R.O.C.
// Email   : spigteam@vlsi.ice.cycu.edu.tw
// Date ? : 1997/5/9
//
// Version 1.01     1996/9/4
//                  - Add setting Parity, Databits, StopBits
//                  - Add setting Flowcontrol:Dtr-Dsr, Cts-Rts, Xon-Xoff
//                  - Add setting Timeout information for read/write
//
// Version 1.02     1996/12/24
//                  - Add Sender parameter to TReceiveDataEvent
//
// Version 2.0      1997/4/15
//                  - Support separatly DTR/DSR and RTS/CTS hardware flow control setting
//                  - Support separatly OutX and InX software flow control setting
//                  - Log file(for debug) may used by many comms at the same time
//                  - Add DSR sensitivity property
//                  - You can set error char. replacement when parity error
//                  - Let XonLim/XoffLim and XonChar/XoffChar setting by yourself
//                  - You may change flow-control when comm is still opened
//                  - Change TComm32 to TComm
//                  - Add OnReceiveError event handler
//                  - Add OnReceiveError event handler when overrun, framing error,
//                    parity error
//                  - Fix some bug
//
// Version 2.01     1997/4/19
//                  - Support some property for modem
//                  - Add OnModemStateChange event hander when RLSD(CD) change state
//
// Version 2.02     1997/4/28
//                  - Bug fix: When receive XOFF character, the system FAULT!!!!
//
// Version 2.5      1997/5/9
//                  - Add OnSendDataEmpty event handler when all data in buffer
//                    are sent(send-buffer become empty) this handler is called.
//                    You may call send data here.
//                  - Change the ModemState parameters in OnModemStateChange
//                    to ModemEvent to indicate what modem event make this call
//                  - Add RING signal detect. When RLSD changed state or
//                    RING signal was detected, OnModemStateChange handler is called
//                  - Change XonLim and XoffLim from 100 to 500
//                  - Remove TWriteThread.WriteData member
//                  - PostHangupCall is re-design for debuging function 
//                  - Add a boolean property SendDataEmpty, True when send buffer
//                    is empty
//

interface

uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

const
     // messages from read/write threads
     PWM_GOTCOMMDATA = WM_USER + 1;
     PWM_RECEIVEERROR = WM_USER + 2;
     PWM_REQUESTHANGUP = WM_USER + 3;
     PWM_MODEMSTATECHANGE = WM_USER + 4;
     PWM_SENDDATAEMPTY = WM_USER + 5;

type
    TParity = ( None, Odd, Even, Mark, Space );
    TStopBits = ( _1, _1_5, _2 );
    TByteSize = ( _5, _6, _7, _8 );
    TDtrControl = ( DtrEnable, DtrDisable, DtrHandshake );
    TRtsControl = ( RtsEnable, RtsDisable, RtsHandshake, RtsTransmissionAvailable );

    ECommsError = class( Exception );
    TReceiveDataEvent = procedure(Sender: TObject; Buffer: Pointer;
                                  BufferLength: Word) of object;
    TReceiveErrorEvent = procedure(Sender: TObject; EventMask : DWORD) of object;
    TModemStateChangeEvent = procedure(Sender: TObject; ModemEvent : DWORD) of object;
    TSendDataEmptyEvent = procedure(Sender: TObject) of object;

const
     //
     // Modem Event Constant
     //
     ME_CTS = 1;
     ME_DSR = 2;
     ME_RING = 4;
     ME_RLSD = 8;

type
    TReadThread = class( TThread )
    protected
      procedure Execute; override;
    public
      hCommFile:          THandle;
      hCloseEvent:        THandle;
      hComm32Window:      THandle;

      function SetupCommEvent( lpOverlappedCommEvent: POverlapped;
                               var lpfdwEvtMask: DWORD ): Boolean;
      function SetupReadEvent( lpOverlappedRead: POverlapped;
                               lpszInputBuffer: LPSTR; dwSizeofBuffer: DWORD;
                               var lpnNumberOfBytesRead: DWORD ): Boolean;
      function HandleCommEvent( lpOverlappedCommEvent: POverlapped;
                                var lpfdwEvtMask: DWORD; fRetrieveEvent: Boolean ): Boolean;
      function HandleReadEvent( lpOverlappedRead: POverlapped;
                                lpszInputBuffer: LPSTR; dwSizeofBuffer: DWORD;
                                var lpnNumberOfBytesRead: DWORD ): Boolean;
      function HandleReadData( lpszInputBuffer: LPCSTR; dwSizeofBuffer: DWORD ): Boolean;
      function ReceiveData( lpNewString: LPSTR; dwSizeofNewString: DWORD ): BOOL;
      function ReceiveError( EvtMask : DWORD ): BOOL;
      function ModemStateChange( ModemEvent : DWORD ) : BOOL;
      procedure PostHangupCall;
    end;

    TWriteThread = class( TThread )
    protected
      procedure Execute; override;
      function HandleWriteData( lpOverlappedWrite: POverlapped;
                                pDataToWrite: PChar; dwNumberOfBytesToWrite: DWORD): Boolean;
    public
      hCommFile:          THandle;
      hCloseEvent:        THandle;
      hComm32Window:      THandle;
      pFSendDataEmpty:    ^Boolean;
      procedure PostHangupCall;
    end;

    TComm = class( TComponent )
    private
      { Private declarations }
      ReadThread:         TReadThread;
      WriteThread:        TWriteThread;
      hCommFile:          THandle;
      hCloseEvent:        THandle;
      FHWnd:              THandle;
      FSendDataEmpty:     Boolean;            // True if send buffer become empty

      FCommName:          String;
      FBaudRate:          DWORD;
      FParityCheck:       Boolean;
      FOutx_CtsFlow:      Boolean;
      FOutx_DsrFlow:      Boolean;
      FDtrControl:        TDtrControl;
      FDsrSensitivity:    Boolean;
      FTxContinueOnXoff:  Boolean;
      FOutx_XonXoffFlow:  Boolean;
      FInx_XonXoffFlow:   Boolean;
      FReplaceWhenParityError:    Boolean;
      FIgnoreNullChar:    Boolean;
      FRtsControl:        TRtsControl;
      FXonLimit:          WORD;
      FXoffLimit:         WORD;
      FByteSize:          TByteSize;
      FParity:            TParity;
      FStopBits:          TStopBits;
      FXonChar:           AnsiChar;
      FXoffChar:          AnsiChar;
      FReplacedChar:      AnsiChar;

      FReadIntervalTimeout: DWORD;
      FReadTotalTimeoutMultiplier: DWORD;
      FReadTotalTimeoutConstant: DWORD;
      FWriteTotalTimeoutMultiplier: DWORD;
      FWriteTotalTimeoutConstant: DWORD;
      FOnReceiveData:     TReceiveDataEvent;
      FOnRequestHangup:   TNotifyEvent;
      FOnReceiveError:    TReceiveErrorEvent;
      FOnModemStateChange:TModemStateChangeEvent;
      FOnSendDataEmpty: TSendDataEmptyEvent;

      procedure SetBaudRate( Rate : DWORD );
      procedure SetParityCheck( b : Boolean );
      procedure SetOutx_CtsFlow( b : Boolean );
      procedure SetOutx_DsrFlow( b : Boolean );
      procedure SetDtrControl( c : TDtrControl );
      procedure SetDsrSensitivity( b : Boolean );
      procedure SetTxContinueOnXoff( b : Boolean );
      procedure SetOutx_XonXoffFlow( b : Boolean );
      procedure SetInx_XonXoffFlow( b : Boolean );
      procedure SetReplaceWhenParityError( b : Boolean );
      procedure SetIgnoreNullChar( b : Boolean );
      procedure SetRtsControl( c : TRtsControl );
      procedure SetXonLimit( Limit : WORD );
      procedure SetXoffLimit( Limit : WORD );
      procedure SetByteSize( Size : TByteSize );
      procedure SetParity( p : TParity );
      procedure SetStopBits( Bits : TStopBits );
      procedure SetXonChar( c : AnsiChar );
      procedure SetXoffChar( c : AnsiChar );
      procedure SetReplacedChar( c : AnsiChar );

      procedure SetReadIntervalTimeout( v : DWORD );
      procedure SetReadTotalTimeoutMultiplier( v : DWORD );
      procedure SetReadTotalTimeoutConstant( v : DWORD );
      procedure SetWriteTotalTimeoutMultiplier( v : DWORD );
      procedure SetWriteTotalTimeoutConstant( v : DWORD );

      procedure CommWndProc( var msg: TMessage );
      procedure _SetCommState;
      procedure _SetCommTimeout;
    protected
      { Protected declarations }
      procedure CloseReadThread;
      procedure CloseWriteThread;
      procedure ReceiveData(Buffer: PChar; BufferLength: Word);
      procedure ReceiveError( EvtMask : DWORD );
      procedure ModemStateChange( ModemEvent : DWORD );
      procedure RequestHangup;
      procedure _SendDataEmpty;
    public
      { Public declarations }
      property Handle: THandle read hCommFile;
      property SendDataEmpty : Boolean read FSendDataEmpty;
      constructor Create( AOwner: TComponent ); override;
      destructor Destroy; override;
      procedure StartComm;
      procedure StopComm;
      function WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;
      function GetModemState : DWORD;
    published
      { Published declarations }
      property CommName: String read FCommName write FCommName;
      property BaudRate: DWORD read FBaudRate write SetBaudRate;
      property ParityCheck: Boolean read FParityCheck write SetParityCheck;
      property Outx_CtsFlow: Boolean read FOutx_CtsFlow write SetOutx_CtsFlow;
      property Outx_DsrFlow: Boolean read FOutx_DsrFlow write SetOutx_DsrFlow;
      property DtrControl: TDtrControl read FDtrControl write SetDtrControl;
      property DsrSensitivity: Boolean read FDsrSensitivity write SetDsrSensitivity;
      property TxContinueOnXoff: Boolean read FTxContinueOnXoff write SetTxContinueOnXoff;
      property Outx_XonXoffFlow: Boolean read FOutx_XonXoffFlow write SetOutx_XonXoffFlow;
      property Inx_XonXoffFlow: Boolean read FInx_XonXoffFlow write SetInx_XonXoffFlow;
      property ReplaceWhenParityError: Boolean read FReplaceWhenParityError write SetReplaceWhenParityError;
      property IgnoreNullChar: Boolean read FIgnoreNullChar write SetIgnoreNullChar;
      property RtsControl: TRtsControl read FRtsControl write SetRtsControl;
      property XonLimit: WORD read FXonLimit write SetXonLimit;
      property XoffLimit: WORD read FXoffLimit write SetXoffLimit;
      property ByteSize: TByteSize read FByteSize write SetByteSize;
      property Parity: TParity read FParity write FParity;
      property StopBits: TStopBits read FStopBits write SetStopBits;
      property XonChar: AnsiChar read FXonChar write SetXonChar;
      property XoffChar: AnsiChar read FXoffChar write SetXoffChar;
      property ReplacedChar: AnsiChar read FReplacedChar write SetReplacedChar;

      property ReadIntervalTimeout: DWORD         read FReadIntervalTimeout         write SetReadIntervalTimeout;
      property ReadTotalTimeoutMultiplier: DWORD  read FReadTotalTimeoutMultiplier  write SetReadTotalTimeoutMultiplier;
      property ReadTotalTimeoutConstant: DWORD    read FReadTotalTimeoutConstant    write SetReadTotalTimeoutConstant;
      property WriteTotalTimeoutMultiplier: DWORD read FWriteTotalTimeoutMultiplier write SetWriteTotalTimeoutMultiplier;
      property WriteTotalTimeoutConstant: DWORD   read FWriteTotalTimeoutConstant   write SetWriteTotalTimeoutConstant;

      property OnReceiveData: TReceiveDataEvent
               read FOnReceiveData write FOnReceiveData;
      property OnReceiveError: TReceiveErrorEvent
               read FOnReceiveError write FOnReceiveError;
      property OnModemStateChange: TModemStateChangeEvent
               read FOnModemStateChange write FOnModemStateChange;
      property OnRequestHangup: TNotifyEvent
               read FOnRequestHangup write FOnRequestHangup;
      property OnSendDataEmpty: TSendDataEmptyEvent
               read FOnSendDataEmpty write FOnSendDataEmpty;
    end;

const
// This is the message posted to the WriteThread
// When we have something to write.
     PWM_COMMWRITE = WM_USER+1;

// Default size of the Input Buffer used by this code.
     INPUTBUFFERSIZE = 2048;

procedure Register;

implementation

(******************************************************************************)
//   TComm PUBLIC METHODS
(******************************************************************************)

constructor TComm.Create( AOwner: TComponent );
begin
     inherited Create( AOwner );

     ReadThread := nil;
     WriteThread := nil;
     hCommFile := 0;
     hCloseEvent := 0;
     FSendDataEmpty := True;

     FCommName := 'COM2';
     FBaudRate := 9600;
     FParityCheck := False;
     FOutx_CtsFlow := False;
     FOutx_DsrFlow := False;
     FDtrControl := DtrEnable;
     FDsrSensitivity := False;
     FTxContinueOnXoff := True;
     FOutx_XonXoffFlow := True;
     FInx_XonXoffFlow := True;
     FReplaceWhenParityError := False;
     FIgnoreNullChar := False;
     FRtsControl := RtsEnable;
     FXonLimit := 500;
     FXoffLimit := 500;
     FByteSize := _8;
     FParity := None;
     FStopBits := _1;
     FXonChar := chr($11);      // Ctrl-Q
     FXoffChar := chr($13);     // Ctrl-S
     FReplacedChar := chr(0);
     FReadIntervalTimeout         := 100;
     FReadTotalTimeoutMultiplier  := 0;
     FReadTotalTimeoutConstant    := 0;
     FWriteTotalTimeoutMultiplier := 0;
     FWriteTotalTimeoutConstant   := 0;

     if not (csDesigning in ComponentState) then
        FHWnd := AllocateHWnd(CommWndProc)
end;

destructor TComm.Destroy;
begin
     if not (csDesigning in ComponentState) then
        DeallocateHWnd(FHwnd);
        
     inherited Destroy;
end;

//
//  FUNCTION: StartComm
//
//  PURPOSE: Starts communications over the comm port.
//
//  PARAMETERS:
//    hNewCommFile - This is the COMM File handle to communicate with.
//                   This handle is obtained from TAPI.
//
//  Output:
//    Successful: Startup the communications.
//    Failure: Raise a exception
//
//  COMMENTS:
//
//    StartComm makes sure there isn't communication in progress already,
//    creates a Comm file, and creates the read and write threads.  It
//    also configures the hNewCommFile for the appropriate COMM settings.
//
//    If StartComm fails for any reason, it's up to the calling application
//    to close the Comm file handle.
//
//
procedure TComm.StartComm;
var
   hNewCommFile:   THandle;
begin
     // Are we already doing comm?
     if (hCommFile <> 0) then
        raise ECommsError.Create( 'This serial port already opened' );

     hNewCommFile := CreateFile( PChar(FCommName),
                                 GENERIC_READ or GENERIC_WRITE,
                                 0, {not shared}
                                 nil, {no security ??}
                                 OPEN_EXISTING,
                                 FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
                                 0 {template} );

     if hNewCommFile = INVALID_HANDLE_VALUE then
        raise ECommsError.Create( 'Error opening serial port' );

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩va亚洲va欧美va久久| 91香蕉视频mp4| 国产午夜亚洲精品午夜鲁丝片| 国产精品一区二区免费不卡| 欧美国产欧美综合| 91免费国产在线| 婷婷综合久久一区二区三区| 日韩欧美不卡在线观看视频| 国产成人综合在线| 亚洲色图欧洲色图婷婷| 欧美猛男gaygay网站| 另类人妖一区二区av| 国产欧美久久久精品影院| 波多野结衣在线aⅴ中文字幕不卡| 亚洲精品中文字幕乱码三区| 9191久久久久久久久久久| 极品美女销魂一区二区三区| 日韩毛片精品高清免费| 欧美日韩精品一二三区| 精品亚洲欧美一区| 亚洲欧美怡红院| 欧美日韩精品专区| 国产精品一区在线观看乱码| 亚洲男人的天堂在线aⅴ视频| 欧美日韩成人在线一区| 国产自产2019最新不卡| 亚洲婷婷在线视频| 日韩欧美在线观看一区二区三区| 大尺度一区二区| 亚洲国产三级在线| 久久久久久久久久久黄色| 色综合天天综合网天天狠天天| 全部av―极品视觉盛宴亚洲| 中文字幕一区二区三区视频| 欧美精品日韩精品| 成人美女在线观看| 亚洲成av人片观看| 中文天堂在线一区| 欧美一级片免费看| 99久久国产综合精品女不卡| 日韩成人av影视| 国产精品国产三级国产普通话三级 | 麻豆精品视频在线观看| 成人欧美一区二区三区| 日韩欧美成人激情| 色老汉一区二区三区| 国产精品一区一区| 日韩av电影天堂| 亚洲欧美日韩小说| 久久久五月婷婷| 91精品在线观看入口| 91最新地址在线播放| 国内精品久久久久影院一蜜桃| 亚洲午夜久久久久久久久久久| 国产丝袜美腿一区二区三区| 制服视频三区第一页精品| 成人免费高清在线| 久久99热狠狠色一区二区| 一区二区三国产精华液| 久久午夜羞羞影院免费观看| 欧美日韩视频第一区| av在线播放成人| 国产精品一区二区免费不卡| 免费高清在线一区| 午夜视频一区二区| 亚洲欧美日韩在线不卡| 国产亚洲一本大道中文在线| 日韩一级免费一区| 精品视频免费在线| 在线观看日韩国产| 99re热视频精品| 国产成人高清视频| 精品无人区卡一卡二卡三乱码免费卡| 午夜精品久久久久久不卡8050| 亚洲三级视频在线观看| 欧美国产丝袜视频| 久久久亚洲精华液精华液精华液| 日韩一区二区三区电影在线观看| 在线观看日韩一区| 色先锋aa成人| 99精品久久久久久| av在线不卡观看免费观看| 高清不卡一区二区| 国产综合色产在线精品| 精品一区二区三区视频| 美女在线视频一区| 爽好久久久欧美精品| 亚洲成人一区二区在线观看| 一区二区久久久久| 亚洲欧美激情在线| 亚洲视频免费看| 亚洲人妖av一区二区| 中文字幕制服丝袜一区二区三区 | 欧美激情一区二区三区全黄| 久久亚洲欧美国产精品乐播| 欧美成人精品高清在线播放| 欧美一区二区视频网站| 在线不卡一区二区| 91精品国产综合久久久蜜臀粉嫩 | 精品国产三级a在线观看| 欧美一区二区三区在线| 欧美一级国产精品| 日韩视频免费直播| 精品久久久久久久人人人人传媒| 日韩片之四级片| 精品av久久707| 久久人人97超碰com| 久久久高清一区二区三区| 国产网站一区二区| 国产精品久久久久久久久动漫| 国产精品视频一二三区| 国产精品久久久久久久岛一牛影视 | 欧美精品久久一区二区三区| 欧美日韩一区 二区 三区 久久精品 | 欧美剧情电影在线观看完整版免费励志电影 | 欧美视频一区二区三区| 欧美少妇bbb| 91精品国产91综合久久蜜臀| 日韩欧美一区中文| 久久久久久久久久久99999| 国产欧美日本一区二区三区| 国产精品国产三级国产普通话蜜臀| 中文字幕中文字幕一区| 一区二区三区在线视频观看58| 一区二区三区在线免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲伊人色欲综合网| 日本伊人午夜精品| 国内成人自拍视频| 成人avav影音| 欧美影院午夜播放| 欧美一级片在线观看| 国产日韩亚洲欧美综合| 亚洲欧美偷拍另类a∨色屁股| 亚洲一区二区欧美激情| 久久成人免费网站| 懂色av一区二区三区免费观看| 色哟哟亚洲精品| 欧美一区二区三级| 国产婷婷色一区二区三区四区| 国产精品不卡一区| 日日夜夜免费精品| 国产一区二区三区在线观看精品| 不卡av电影在线播放| 欧美日韩成人一区| 久久久久久97三级| 亚洲欧美日韩一区二区 | 91精品国产91热久久久做人人| 精品成人一区二区三区| 中文字幕日韩精品一区| 三级久久三级久久久| 国产99久久久国产精品潘金| 欧洲激情一区二区| 精品久久久久一区二区国产| 中文字幕一区av| 日韩精品五月天| 成人h版在线观看| 欧美精品久久99久久在免费线| 久久精品一区二区三区不卡| 亚洲精品国产成人久久av盗摄| 亚洲v中文字幕| 国产99精品视频| 在线观看亚洲精品视频| 精品黑人一区二区三区久久| 亚洲丝袜精品丝袜在线| 日本不卡123| 91亚洲精品久久久蜜桃| 日韩一区二区电影| 亚洲人成网站影音先锋播放| 久久福利视频一区二区| 欧美制服丝袜第一页| 国产亚洲综合色| 丝袜亚洲另类欧美| 成人av电影在线网| 欧美mv和日韩mv国产网站| 亚洲乱码国产乱码精品精可以看| 久久精品999| 欧美丝袜丝nylons| 国产精品三级av| 久久精品国产99久久6| 欧美在线免费视屏| 亚洲国产精品精华液2区45| 蜜臀精品一区二区三区在线观看 | 中文一区一区三区高中清不卡| 视频在线观看国产精品| 97久久精品人人做人人爽| 久久综合九色欧美综合狠狠| 天天爽夜夜爽夜夜爽精品视频| 99国产精品一区| 国产午夜三级一区二区三| 青青草视频一区| 在线观看不卡一区| 国产精品九色蝌蚪自拍| 国产一区二区三区精品视频| 91精品一区二区三区在线观看| 亚洲欧美激情小说另类| 成人性生交大片| 久久精品综合网| 精品在线一区二区| 欧美疯狂性受xxxxx喷水图片|