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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pasmycomm.~pas

?? 汽車行駛記錄儀的數據初始化組件
?? ~PAS
字號:
unit pasMyComm;
interface
uses
    Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs;
type
    //分配單獨的線程
    TReadThread=class(TThread)
    protected
      //重載Excute函數
      procedure Execute;override;
    public
      hCommFile:THandle;  //作為一個文件打開的串口
      bReadThread:boolean;  //讀寫線程的標志
    end;
    //繼承TComponent的子類TComm
    TComm=class(TComponent)
    private
      hCommFile:THandle;  //作為一個文件打開的串口
      ReadThread:TReadThread;  //讀線程
      procedure CloseReadThread;
    public
      bOpened:boolean;  //串口是否打開
      CommName:string;  //串口名稱
      INQUESIZE,QUTQUESIZE:integer;  //讀寫緩沖隊列長度
      //重載構造函數
      constructor Create(AOwner:TComponent);override;
      //重載析構函數
      destructor Destroy;override;
      //初始化串口
      function InitComm(ThisCommName:string;BaudRate,DataByte,StopByte,ParityByte:integer):boolean;
      //釋放串口
      procedure FreeComm;
      //串口操作
      function WriteData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;   //寫數據
      function WriteDelayData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;   //延遲寫數據
      function ReadData(pBuffer:pChar;BufferSize:DWord):boolean;  //讀數據
      function BytesInInQue:DWord;  //輸入隊列中數據長度
      function BytesInOutQue:DWord;  //輸出隊列中數據長度
      function WaitForBytes(Bytes:DWord;TimeLen:DWord):boolean;  //等待讀入數據
      procedure ClearComm;           //清除串口數據
      procedure SendStr(str:String);  //發送字符串數據
      function OutputByte(const ByteData:array of Byte):Boolean;
      function GetCheckResult: boolean;
    end;
const
     PWM_COMMWRITE=WM_USER+1;
implementation
//構造函數,初始化變量
constructor TComm.Create(AOWner:TComponent);
begin
  inherited Create(AOwner);
  ReadThread:=nil;
  hCommFile:=0;
  bOpened:=False;
  //缺省隊列長度
  INQUESIZE:=129600;
  QUTQUESIZE:=129600;
end;
//析構函數,釋放串口
destructor TComm.Destroy;
begin
  FreeComm;
  inherited Destroy;  //執行父類的析構函數
end;
//初始化串口
function TComm.InitComm(ThisCommName:string;BaudRate,DataByte,StopByte,ParityByte:integer):boolean;
var
  dcb:Tdcb;  //Data Control Block 控制信息
begin
  //判斷有沒有打開該串口
  if hCommFile<>0 then
  begin
    InitComm:=False;
    exit;
  end;
  //用CreateFile打開串口
  hCommFile:=CreateFile(pChar(ThisCommName),GENERIC_READ or GENERIC_WRITE,0,{not shared}nil,{no security ??}OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  //如果打開失敗
  if hCommFile=INVALID_HANDLE_VALUE then
  begin
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //如果打開的文件類型不是FILE_TYPE_CHAR也算失敗,則關閉文件
  if GetFileType(hCommFile)<>FILE_TYPE_CHAR then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //如果設置失敗,則關閉文件
  if not SetupComm(hCommFile,INQUESIZE,QUTQUESIZE) then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //讀入串口信息
  PurgeComm(hCommFile,PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
  GetCommState(hCommFile,dcb);
  //設置串口參數
  dcb.BaudRate:=BaudRate;  //波特率
  dcb.ByteSize:=DataByte;  //數據位數,如每byte4-8個bit
  dcb.Parity:=ParityByte;  //是否有校驗位0-4=no,odd,even,mark,space
  dcb.StopBits:=StopByte;  //停止位,0,1,2=1,1.5,2
  dcb.Flags:=1;
  //如果設置串口參數失敗,則關閉文件
  if not SetCommState(hCommFile,dcb) then
  begin
    CloseHandle(hCommFile);
    hCommFile:=0;
    InitComm:=False;
    exit;
  end;
  //設置打開文件成功標志
  InitComm:=True;
  bOpened:=True;
  CommName:=ThisCommName;
end;
//釋放串口
procedure Tcomm.FreeComm;
begin
  if hCommFile=0 then exit;  //如果沒有打開的串口,則直接退出
  //關閉讀數據線程
  CloseReadThread;
  //關閉文件
  PurgeComm(hCommFile,PURGE_RXABORT+PURGE_RXCLEAR+PURGE_TXABORT+PURGE_TXCLEAR);
  CloseHandle(hCommFile);
  bOpened:=False;
end;
//調用WriteFile向串口寫數據
function TComm.WriteData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;
var
  nSent:DWord;
begin
  Result:=WriteFile(hCommFile,pDataToWrite^,dwSizeofDataToWrite,nSent,Nil);
end;
//調用WriteFile和sleep向串口延遲寫數據
function TComm.WriteDelayData(pDataToWrite:PChar;dwSizeofDataToWrite:DWord):boolean;
var
  nSent:DWord;
  i:integer;
begin
  Result:=False;
  for i:=1 to dwSizeofDataToWrite do
  begin
    Result:=WriteFile(hCommFile,(i-1+pDataToWrite)^,dwSizeofDataToWrite,nSent,Nil);
    Sleep(50);  //延遲一段時間再寫下一段數據
  end;
end;
//發送字符串
procedure TComm.SendStr(str:String);
begin
  str:=str+Chr(13)+Chr(10);  //添加回車,換行
  WriteData(pChar(str),Length(str));
end;
//調用ReadFile讀入數據
function Tcomm.ReadData(pBuffer:pChar;BufferSize:DWord):boolean;
var
  nRead:DWord;
begin
  Result:=ReadFile(hCommFile,pBuffer^,BufferSize,nRead,Nil);
end;
//通過CloseEvent事件關閉讀線程
procedure TComm.CloseReadThread;
begin
  //如果讀線程存在則關閉
  if ReadThread<>nil then
  begin
    ReadThread.bReadThread:=False;
    //清除讀的數據
    PurgeComm(hCommFile,PURGE_RXABORT+PURGE_RXCLEAR);
    //等待一段時間,結束線程
    if(WaitForSingleObject(ReadThread.Handle,10000)=WAIT_TIMEOUT) then
      ReadThread.Terminate;
    ReadThread.Free;
    ReadThread:=nil;
  end;
end;
//返回輸入隊列中數據的長度
function TComm.BytesInInQue:DWord;
var
  stat:TCOMSTAT;
  errs:DWord;
begin
  ClearCommError(hCommFile,errs,@stat);
  Result:=stat.cbInQue;
end;
//返回輸出隊列中數據的長度
function TComm.BytesInOutQue:DWord;
var
  stat:TCOMSTAT;
  errs:DWord;
begin
  ClearCommError(hCommFile,errs,@stat);
  Result:=stat.cbOutQue;
end;
//等待數據
function TComm.WaitForBytes(Bytes:DWord;TimeLen:DWord):boolean;
var
  time1,time2:DWord;
begin
  //得到當前時間
  time1:=GetTickCount;
  time2:=time1;
  //循環等待,直到TimeLen秒或讀入Bytes個數據
  while (BytesInInQue<Bytes) and (hCommFile<>0) and ((time2-time1)<TimeLen) do
  begin
    Application.ProcessMessages;
    time2:=GetTickCount;
  end;
  //返回是否成功讀入Bytes個數據
  if BytesInInQue>=Bytes then
    Result:=True
  else
    Result:=False;
end;
//清除串口
procedure TComm.ClearComm;
begin
  PurgeComm(hCommFile,PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
end;
//傳送二進制的數據
function TComm.OutputByte(const ByteData: array of Byte ): Boolean;
var
  lrc: LongWord;
    i: Integer;
begin
   for i:=Low(ByteData) to High(ByteData) do
     WriteFile(hCommFile,ByteData[i],1,lrc, nil);
   Result := True;
end;
//讀數據線程
procedure TReadThread.Execute;
begin
  while bReadThread do
  begin
  end;
end;
//設置校驗項目

function TComm.GetCheckResult:boolean;
var
  dwEventMask: DWORD;
  stat:TCOMSTAT;
  errs:DWord;
begin
  Result:=TRUE;
  dwEventMask:=0;
  SetCommMask(hCommFile,EV_ERR);
  ClearCommError(hCommFile,errs,@stat);
  WaitCommEvent(hCommFile,dwEventMask,nil);
  if ((dwEventMask and EV_ERR)=EV_ERR) then
    Result:=FALSE;;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠狠色丁香婷婷综合激情 | 韩国女主播成人在线| 最新成人av在线| 国产精品高潮呻吟| 国产精品另类一区| 亚洲欧洲av另类| 亚洲综合无码一区二区| 亚洲黄色尤物视频| 天天综合网天天综合色| 午夜视频在线观看一区| 舔着乳尖日韩一区| 精品一区二区三区不卡| 国产乱码精品1区2区3区| 国产一区二区三区在线观看免费| 黄色成人免费在线| 成人免费高清视频| 色偷偷久久人人79超碰人人澡| 99国产精品99久久久久久| 日本韩国一区二区| 欧美一区二区三区在线观看视频 | a亚洲天堂av| 成人黄色电影在线| 欧美怡红院视频| 日韩一区二区免费电影| 久久久精品影视| 一区二区三区四区亚洲| 男人操女人的视频在线观看欧美 | 久久久国际精品| 亚洲美女免费在线| 老汉av免费一区二区三区| 国产激情91久久精品导航 | 婷婷开心激情综合| 国产专区综合网| 91在线一区二区三区| 91精品国产丝袜白色高跟鞋| 久久亚洲一级片| 亚洲主播在线播放| 国产美女视频一区| 欧美精品亚洲一区二区在线播放| 26uuu国产电影一区二区| 国产精品传媒入口麻豆| 日本成人在线不卡视频| 成人自拍视频在线| 日韩三级视频在线看| 国产精品电影一区二区| 蓝色福利精品导航| 欧美在线观看18| 欧美激情在线看| 蜜桃一区二区三区在线| 91在线porny国产在线看| 欧美xxxx老人做受| 视频一区视频二区中文字幕| 不卡欧美aaaaa| 久久只精品国产| 日韩av在线发布| 欧美视频一二三区| 亚洲私人黄色宅男| 成人自拍视频在线| 亚洲国产一区二区a毛片| 国产福利一区二区三区视频在线 | 人人爽香蕉精品| 91丨九色丨蝌蚪丨老版| 欧美激情综合在线| 国产一区视频导航| 精品国产乱码久久久久久免费| 亚洲一线二线三线久久久| 成人h精品动漫一区二区三区| 欧美不卡123| 久久精品国产成人一区二区三区| 欧美视频一二三区| 亚洲风情在线资源站| 欧美综合视频在线观看| 亚洲欧美电影一区二区| 99热在这里有精品免费| 国产精品国产三级国产普通话蜜臀 | 精品国产精品一区二区夜夜嗨| 午夜伦理一区二区| 7777精品伊人久久久大香线蕉超级流畅| 亚洲综合免费观看高清在线观看| 97久久精品人人爽人人爽蜜臀| 国产精品传媒视频| 色www精品视频在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 91视频.com| 亚洲一线二线三线久久久| 日本韩国一区二区三区| 亚洲成av人片在线观看| 欧美日韩国产一区| 秋霞成人午夜伦在线观看| 欧美zozozo| 国产91精品精华液一区二区三区| 中文字幕的久久| 一本一道波多野结衣一区二区| 亚洲美女视频在线观看| 欧美电影在线免费观看| 麻豆视频一区二区| 久久久亚洲精品一区二区三区| 国产成人自拍网| 中文字幕一区二区三区色视频 | 欧洲精品在线观看| 日本成人超碰在线观看| 国产三区在线成人av| 99久免费精品视频在线观看 | 69成人精品免费视频| 狠狠色丁香久久婷婷综| 综合久久综合久久| 91精品国产高清一区二区三区| 国产成人免费xxxxxxxx| 亚洲在线中文字幕| 精品国产第一区二区三区观看体验 | 欧美精品一区二区三区视频| 成人爱爱电影网址| 日本不卡1234视频| 亚洲人成在线播放网站岛国| 欧美一区二区三区不卡| 成人av在线资源| 免费人成在线不卡| 亚洲欧美日韩国产综合| 亚洲精品在线观看视频| 在线日韩一区二区| 国产99久久久国产精品免费看| 亚洲成人av一区| 国产精品日日摸夜夜摸av| 欧美精品亚洲一区二区在线播放| 国产成人免费9x9x人网站视频| 亚洲va国产天堂va久久en| 国产日产欧美精品一区二区三区| 欧美日韩精品一区二区天天拍小说 | 亚洲国产精品人人做人人爽| 久久先锋影音av| 69堂精品视频| 欧美日韩在线播放三区| 不卡的看片网站| 国产一区二区精品在线观看| 天天亚洲美女在线视频| 亚洲精品国产a久久久久久| 欧美激情一二三区| 久久久一区二区三区捆绑**| 日韩一区二区三区在线观看| 欧美视频在线一区| 日本韩国欧美三级| 日本韩国欧美国产| 宅男在线国产精品| 欧美精品在欧美一区二区少妇| 91成人网在线| 色噜噜狠狠一区二区三区果冻| eeuss国产一区二区三区| 国产成人在线影院 | 一本久道久久综合中文字幕| 国产精品456露脸| 国产精品亚洲一区二区三区妖精 | 国产激情视频一区二区三区欧美| 日本美女一区二区三区视频| 日日摸夜夜添夜夜添国产精品 | 国内精品视频666| 美女被吸乳得到大胸91| 美女久久久精品| 狂野欧美性猛交blacked| 日韩精品免费专区| 美女一区二区在线观看| 奇米影视在线99精品| 蜜臀精品一区二区三区在线观看| 石原莉奈在线亚洲二区| 首页国产丝袜综合| 国内成人自拍视频| 国产精品一区二区不卡| 国产在线看一区| 国产精品一区二区在线观看不卡| 国产很黄免费观看久久| 99re这里只有精品6| 欧美三级视频在线观看| 日韩一区二区三区四区| 国产午夜精品一区二区三区嫩草| 亚洲国产精品ⅴa在线观看| 亚洲人成伊人成综合网小说| 亚洲一线二线三线视频| 久久精品国产亚洲高清剧情介绍 | 99国产精品久久久久久久久久 | 天天综合色天天| 国产一区二区调教| 色综合中文字幕国产 | 国产精品精品国产色婷婷| 亚洲欧美成人一区二区三区| 亚洲福利视频一区| 国内不卡的二区三区中文字幕| 丁香啪啪综合成人亚洲小说 | 久久精品夜夜夜夜久久| 亚洲女性喷水在线观看一区| 日韩国产欧美在线观看| 国产999精品久久久久久绿帽| 色8久久精品久久久久久蜜| 日韩一区二区三区免费看| 国产精品国产三级国产专播品爱网 | 欧美欧美午夜aⅴ在线观看| 精品噜噜噜噜久久久久久久久试看| 国产精品拍天天在线| 免费观看久久久4p| 在线观看国产日韩| 国产欧美一区二区精品忘忧草| 亚洲不卡一区二区三区|