procedure TIDCardRead_F.ReadIDCard;
var
  iRet : integer;
begin
  while (PortEnable) and (StartReadID) do
  begin
    Sleep(1000);
    iRet:= SDT_StartFindIDCard(Port, pucSn, 1); //查卡
    if iRet = 159 then
      iRet:= SDT_SelectIDCard(Port,pucSn,1) //选卡
    else Continue;
    if iRet= 144 then
    begin
      puiCHMsgLen:=0;
      puiPHMsgLen:=0;
      iRet:= SDT_ReadBaseMsgToFile(1001, 'wz.txt',puiCHMsgLen, 'zp.wlt',puiPHMsgLen,1); //存储文件
    end
    else Continue;
    if iRet =144 then
    begin
      UsbOrCom:='U';//连接的类型是通过Usb端口
      if UsbOrCom ='U' then
        iRet := GetBmp('zp.wlt',2)
      else if UsbOrCom='C' then //如果连接的类型是Com端口
        iRet := GetBmp('zp.wlt',1);
      if iRet=1 then
      begin
        img_XP.Picture.LoadFromFile('zp.bmp');
        IDCard.InitInfo(ExtractFilePath(Application.ExeName) +'wz.txt');
        lblID_Name.Caption:= IDCard.Name;
        lblID_Sex.Caption:= IDCard.Sex_CName;
        lblID_Nation.Caption:= IDCard.NATION_CName;
        lblID_Birth.Caption:= IDCard.BIRTH;
        lblID_Addr.Caption:= IDCard.ADDRESS;
        lblID_ID.Caption:= IDCard.IDC;
        lblID_Depart.Caption:= IDCard.REGORG;
        lblID_Time.Caption:= IDCard.STARTDATE +'-'+IDCard.ENDDATE;
        DeleteFile('zp.bmp');
        DeleteFile('wz.txt');
      end
      else
        Continue;
    end;
  end;
end;这段代码有人能帮我解释下吗?我想针对这些做些修改,它这里是不是不停的在进行读取。

解决方案 »

  1.   

    while循环有条件,如果条件不符合了,自然会停止读取,PortEnable和StartReadID貌似是在外部定义的。
      

  2.   

    你说的是while的那句
    while (PortEnable) and (StartReadID) do这个?
    那如果我在while循环外面执行呢?
    他的那个while循环是不是如果读取出来了。就停止循环
      

  3.   

    PortEnable、StartReadID不知函数还是个bool变量,总之PortEnable和StartReadID都为True时,whlie循环就一直持续循环。所以要想退出循环,除非这两个变量或函数其中之一的结果为false,全部代码中没有看到哪里有改变PortEnable、StartReadID的地方,所以暂时认为是起监听功能的死循环,估计插入卡后读出数据显示在各个label里,如此反复。直到读卡器端口禁用。
    没细琢磨该代码,只是猜测
      

  4.   

    全部代码估计有点多。我上传到地址如果有时间的话。能帮我看看。在哪里处理比较好。
    http://download.csdn.net/download/zhangzhen_927116/6029247