条码扫描是通过串口通讯吗?如何取得扫描后的数据?谁有这方面的经验资料吗?发到 [email protected] 谢谢!

解决方案 »

  1.   

    unit comm;interface
     uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls; type
        TCOMM = Class
         State:byte;
         Hcomm:THandle;
        private{}    public{}
          procedure OpenComm(ComFlag:String);
          procedure CloseComm;
          Function  GetCommData:string;
     end;
     implementation{ TCOMM }procedure TCOMM.CloseComm;
    begin
      IF not (Hcomm=INVALID_HANDLE_VALUE) then
      closeHandle(hcomm);
    end;function TCOMM.GetCommData: string;
    var
      Temp : string;
      inbuff: array[0..2047] of Char;
      nBytesRead, dwEvent, dwError:LongWORD ;
      cs:TCOMSTAT;
    begin
         if (hComm=0) then exit;//先判断是否已打开通信端口
         ClearCommError(hComm,dwError,@CS);  //取得状态
         ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
         //串行在读取数据后,会自动将缓冲区中已被读取的数据清除掉
         if cs.cbInQue =0 then exit;
         // 数据是否大于我们所准备的Buffer
         if cs.cbInQue > sizeof(inbuff) then
         begin
           PurgeComm(hComm, PURGE_RXCLEAR);  // 清除COM 数据
           exit;
         end;
         Temp:=Copy(inbuff,1,cs.cbInQue);//取出数据
         result:=temp;
    end;procedure TCOMM.OpenComm(ComFlag:String);
    var
      CC:TCommconfig;
      comstr:string;
    begin
      Hcomm:=CreateFile(Pchar(ComFlag),GENERIC_READ OR GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
      while  (Hcomm=INVALID_HANDLE_VALUE)  do
      begin
           if messagedlg('打开通讯端口'+ComFlag+'失败!  你需要重新设置连接端口吗?',mtConfirmation,[MBYES,MBNO],0)=MRNO then exit
           else begin
                   comstr:=inputbox('宁航科技','请输入连接端口','COM4');
                   ComFlag:=Comstr;
                   Hcomm:=CreateFile(Pchar(comstr),GENERIC_READ OR GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
                end;
      end;
       GetCommState(Hcomm,CC.DCB);
       CC.dcb.BaudRate:=CBR_9600;
       CC.dcb.ByteSize:=8;
       CC.dcb.Parity:=NOPARITY;
       CC.dcb.StopBits:=ONESTOPBIT;
       if not SetCommState(Hcomm,CC.dcb) then
       begin
          Messagebox(0,'通讯设备端口参数设置错误!','系统提示',MB_OK);
          exit;
       end;
    end;end.
      

  2.   

    条码枪一般用键盘口或upb,条码扫描和键盘输入一样的,你把光标定在一个Edit上,一扫条码,数据就进来的,不用自己去处理,并带个回车的,你拿把条码枪试试就知道了