if bShift then keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
end; end;
procedure TCommThread.Execute; var dwErrorFlags,dwLength : DWORD; fReadStat : Boolean; InChar : Char; AbIn : String; XX,YY : double; VID : string; ASleep: integer; begin while Connected do begin ASleep := 200; ClearCommError(CommHandle, dwErrorFlags, FComStat); if (dwErrorFlags > 0) then begin PurgeComm(CommHandle,(PURGE_RXABORT and PURGE_RXCLEAR)); end; dwLength := FComStat.cbInQue; if (dwLength> 0) then begin fReadStat := ReadFile(CommHandle, InChar, 1, dwLength, nil);
if (fReadStat) then begin if Assigned(FOnGetStr)then FOnGetStr(InChar); end; ASleep := 18; end; sleep(ASleep); end; end;
constructor TCommThread.Create(AONGetStr :TONGetStrEvent); begin FreeOnTerminate := TRUE; FOnGetStr:= AONGetStr; GetMem(FComStat,SizeOf(TComStat)); inherited Create(FALSE); end; destructor TCommThread.Destroy; begin FreeMem(FComStat); inherited Destroy; end;
procedure Tfrmmain.StartCmdClick(Sender: TObject); begin StartComm; end;
procedure tfrmmain.DoOnGetStr(AChar: Char); var S: string; begin Memo1.Lines.Text := Memo1.Lines.Text + AChar; S := AChar; SendStr(S); end;
procedure tfrmmain.StartComm; var CommTimeOut : TCOMMTIMEOUTS; DCB : TDCB; fRetVal : Boolean; sPort: string; begin sPort := CSetupRec^.FPort; OnGetStr := DoOnGetStr; CommHandle := CreateFile(PChar(sPort),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL , 0); if CommHandle = 0 then begin MsgBox('打开端口失败!('+ sPort+')'); Exit; end; CommTimeOut.ReadIntervalTimeout := MAXDWORD; CommTimeOut.ReadTotalTimeoutMultiplier := 0; CommTimeOut.ReadTotalTimeoutConstant := 0; SetCommTimeouts(CommHandle, CommTimeOut); GetCommState(CommHandle,DCB); DCB.BaudRate := CSetupRec^.FBaud; //9600; DCB.ByteSize := CSetupRec^.FData; DCB.Parity := C_Parity[CSetupRec^.FParity]; //ODDPARITY; //NOPARITY; DCB.StopBits := C_Stopbits[CSetupRec^.FStopBit]; //ONESTOPBIT; fRetVal := SetCommState(CommHandle, DCB); if (fRetVal) then begin Connected := true; TCommThread.Create(FOnGetStr); end else begin MsgBox('端口初始化失败!('+ sPort+')'); CloseHandle(CommHandle); Exit; end;
procedure tfrmmain.EndComm; begin if Connected then begin Connected := false; CloseHandle(CommHandle); StopCmd.Enabled := false; StartCmd.Enabled := true; TrayIco.Hint := Caption +'-'+ '已经停止监听'; end; end;
procedure Tfrmmain.StopCmdClick(Sender: TObject); begin EndComm; end;
procedure Tfrmmain.BitBtn3Click(Sender: TObject); begin ShowMessage('Copyright: 同享科技有限公司'); end;
procedure Tfrmmain.BitBtn4Click(Sender: TObject); begin Close; end;
procedure Tfrmmain.BitBtn2Click(Sender: TObject); begin frmSetup := TfrmSetup.Create(nil); if frmSetup.ShowModal = mrOk then begin EndComm; StartComm; end; frmSetup.Release; end;
procedure Tfrmmain.N4Click(Sender: TObject); begin if MsgBoxSel('确定要停退出监听程序吗?') then begin Tag := 1; Close; AutoLaunch_Add('COM口数据监听程序', ParamStr(0), 0); end; end;
procedure Tfrmmain.N1Click(Sender: TObject); begin Show; end;
procedure Tfrmmain.N2Click(Sender: TObject); begin Hide; end;