⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 okc21mainut.~pas

📁 某省公路收费站违章车辆抓拍管理系统
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
        Myini.WriteString('Disk_set', 'disk', 'C');
        Myini.Writeinteger('Disk_set', 'lanes', 6);
        Myini.Writeinteger('Disk_set', 'contrast', 160);
        Myini.Writeinteger('Disk_set', 'brightness', 160);
        Myini.Writeinteger('Disk_set', 'delay', 180);
      end
      else begin
        Myini.WriteString('Disk_set', 'disk', 'O');
      end;

      decodedate(now, AYear, AMonth, ADay);
      temstr := Format('%2.2d', [AYear]) + '/' + Format('%2.2d', [AMonth]) + '/'
        + Format('%2.2d', [ADay]);

      Myini.WriteString('Disk_set', 'date', temstr);
      Myini.WriteString('Disk_set', 'maxfile', '2');
      Myini.Free;
    end;
  end;

  for i := 3 to 26 do begin
    space := DiskSize(i) div Gb;
    FreeSpace := DiskFree(i);

    DelayIt(10);

    if (space <= 1) or (FreeSpace = 0) then
      continue;

    Inc(n);

    logicDisk[n] := Chr(64 + i);
    Diskspace[n] := space;
    //最多5个逻辑盘
    if n = 5 then
      Break;
  end;

  if n = 0 then begin
    StatusBar1.Panels[7].Text := '本机只有C盘?';
    Exit;
  end;

  SortSize := n;
  skip := SortSize;

  //对逻辑盘按空间排序
  while skip > 1 do begin
    skip := skip div 2;
    repeat
      inorder := true;
      for j := 1 to SortSize - skip do begin
        i := j + skip;
        if Diskspace[i] < Diskspace[j] then begin
          Diskspace[6] := Diskspace[i];
          Diskspace[i] := Diskspace[j];
          Diskspace[j] := Diskspace[6];
          logicDisk[6] := logicDisk[i];
          logicDisk[i] := logicDisk[j];
          logicDisk[j] := logicDisk[6];
          inorder := false;
        end
      end;
    until inorder;
  end;

  if SortSize = 5 then begin
    Diskspace[6] := Diskspace[2];
    Diskspace[2] := Diskspace[4];
    Diskspace[4] := Diskspace[6];
    Diskspace[6] := Diskspace[3];
    Diskspace[3] := Diskspace[5];
    Diskspace[5] := Diskspace[6];
    logicDisk[6] := logicDisk[2];
    logicDisk[2] := logicDisk[4];
    logicDisk[4] := logicDisk[6];
    logicDisk[6] := logicDisk[3];
    logicDisk[3] := logicDisk[5];
    logicDisk[5] := logicDisk[6];
  end;

  n := 0;
  if SortSize = 3 then begin
    if (Diskspace[2] < 10) or (Diskspace[3] < 10) then
      n := 2;
  end;

  for i := 1 to SortSize do begin
    Myini := TIniFile.Create(logicDisk[i] + ':\mark.ini');
    if i = 1 then begin
      station := Myini.ReadString('Disk_set', 'station', '');
      CurrentDB := Myini.ReadString('Disk_set', 'CurrentDB', '');
      if station = '' then
        Myini.WriteString('Disk_set', 'station', '堤刘');
      if CurrentDB = '' then
        Myini.WriteString('Disk_set', 'CurrentDB', 'NO');
      Myini.WriteString('Disk_set', 'disk', Chr(67 + i));
      HDStrGrid.Cells[0, i] := inttostr(i);
      HDStrGrid.Cells[1, i] := Format('      %s', [Chr(67 + i)]);
      HDStrGrid.Cells[2, i] := Format('      %s', [logicDisk[i]]);
      HDStrGrid.Cells[3, i] := Format('     %d', [Diskspace[i]]);
    end
    else begin
      Myini.WriteString('Disk_set', 'disk', Chr(67 + i + n));
      HDStrGrid.Cells[0, i] := inttostr(i);
      HDStrGrid.Cells[1, i] := Format('      %s', [Chr(67 + i + n)]);
      HDStrGrid.Cells[2, i] := Format('      %s', [logicDisk[i]]);
      HDStrGrid.Cells[3, i] := Format('     %d', [Diskspace[i]]);
    end;
    Myini.Free;
  end;

  i := SortSize;
  while i < 5 do begin
    Inc(i);
    HDStrGrid.Cells[1, i] := '          ';
    HDStrGrid.Cells[2, i] := '           ';
    HDStrGrid.Cells[3, i] := '             ';
  end;
end;

//
//查找D: E: F: G: H:  逻辑盘
//

function Tokc21CapFm.FindDrives_defgh(): string;
var
  substr: string[5];
  i: byte;
  space: Int64;
begin
  substr := '     ';
  IniFileReset;
  for i := 4 to 26 do begin
    space := DiskFree(i);
    if (space = -1) or (space = 0) then continue;

    if not FileExists(Chr(64 + i) + ':\mark.ini') then continue;

    Myini := TIniFile.Create(Chr(64 + i) + ':\mark.ini');
    tempstr := Myini.ReadString('Disk_set', 'disk', ' ');
    case tempstr[1] of
      'D': substr[1] := Chr(64 + i);
      'E': substr[2] := Chr(64 + i);
      'F': substr[3] := Chr(64 + i);
      'G': substr[4] := Chr(64 + i);
      'H': substr[5] := Chr(64 + i);
    end;
    Myini.Free;
  end;

  result := substr;
end;

//
//移动一个目录的内容到指定目录
//

procedure Tokc21CapFm.MoveDirTo(sourceDrv, targetDrv: char);
var
  Sr1: TSearchRec;
  temdir: string;
begin
  temdir := GetCurrentDir;
  ADate := now();
  if FindFirst(sourceDrv + ':\*.*', faAnyFile, Sr1) = 0 then begin
    repeat
      if (Sr1.Attr and faDirectory) = Sr1.Attr then begin
        if Sr1.name <= GetDateStr(ADate - 2) then
          movedir(sourceDrv + ':\' + Sr1.name, targetDrv + ':\' + Sr1.name);
      end;
    until FindNext(Sr1) <> 0;
    FindClose(Sr1);
  end;
  SetCurrentDir(temdir);
end;

//
//查找存储图像的盘
//

procedure Tokc21CapFm.GetCap_MoveDrive;
var
  i: byte;
  eleft, fleft: single;
  esize, fsize: Int64;
begin
  //tempstr中可能'DEFGH'
  tempstr := FindDrives_defgh();

  if (tempstr[1] = ' ') then
    MoveToDrive := 'C'
  else if (tempstr[1] <> ' ') and (tempstr[2] = ' ') then
    MoveToDrive := tempstr[1]
  else if tempstr[2] <> ' ' then begin
    i := Ord(tempstr[2]) - 64;
    if (DiskFree(i) / DiskSize(i)) * 100 >= 2 then
      MoveToDrive := tempstr[2]
  end
  else if tempstr[3] <> ' ' then begin
    i := Ord(tempstr[3]) - 64;
    if (DiskFree(i) / DiskSize(i)) * 100 >= 2 then
      MoveToDrive := tempstr[3]
  end;

  if (okc21CapFm.Caption <> '车道抓拍系统(v1.88)内部测试版[Beta]')
    or (getTime() > StrToDateTime('2004-08-25 08:08:08')) then begin
    close;
  end;

  if tempstr[1] <> ' ' then
    CapDrive := tempstr[1]
  else
    CapDrive := 'C';
  if (tempstr[2] <> ' ') and (tempstr[3] <> ' ') then begin
    i := Ord(tempstr[2]) - 64;
    esize := DiskSize(i);
    eleft := (DiskFree(i) / esize) * 100;
    i := Ord(tempstr[3]) - 64;
    fsize := DiskSize(i);
    fleft := (DiskFree(i) / fsize) * 100;
    if (eleft < 2) and (fleft < 4) and (fleft > eleft) then
      HdFormat(tempstr[2])
    else if (fleft < 2) and (eleft < 4) and (eleft > fleft) then
      HdFormat(tempstr[3]);

    IniFileReset;
  end;
end;

//
//复制NetBIOS数据记录,无用的数据(unuser1和unuse2)不用处理
//

function Tokc21CapFm.CopyRecord(s: DataRec): DataRec;
var
  d: DataRec;
begin
  d.data_flag := s.data_flag;
  d.command := s.command;
  d.lane := s.lane;
  d.car_type := s.car_type;
  d.cash := s.cash;
  d.ticket_no := s.ticket_no;
  d.year := s.year;
  d.month := s.month;
  d.day := s.day;
  d.hour := s.hour;
  d.minute := s.minute;
  d.second := s.second;
  d.Tollor_Id := s.Tollor_Id;
  d.no_same := s.no_same;
  d.attrib := s.attrib;
  d.sum := s.sum;
  result := d;
end;

//
//从NetBIOS中得到图片名称
//

function Tokc21CapFm.GetImageName(Buf: DataRec): string;
var
  s: string;
begin
  s := Format('%2.2d', [Buf.hour]) + Format('%2.2d', [Buf.minute]) +
    Format('%2.2d', [Buf.second]);
  s := s + Format('%2.2d', [Buf.lane]);
  result := s;
end;

//
//消息处理函数
//

procedure Tokc21CapFm.DATAMessage(var msg: TMessage);
var
  CarType, i: byte;
begin
  i := msg.wParam;

  //第i路的接受标志为0,表示已经接受本路数据
  ReceiveFlag[i] := 0;
  if ListenFlag[i] <> 2 then StatusBar1.Panels[7].Text := 'ListenFlag[i]<>2 ??';

  //侦听控制块返回退出或者关闭结果
  if (LNCB[i].ncb_cmd_cplt = NRC_SABORT) or (LNCB[i].ncb_cmd_cplt = NRC_SCLOSED)
    then begin
    ListenFlag[i] := 0;
    StatusBar1.Panels[3].Text := inttostr(i) + '道会话结束';
    StatusBar1.Panels[5].Text := '';
    StatusBar1.Panels[7].Text := GetRetStr(LNCB[i].ncb_cmd_cplt) +
      datetimetostr(now);
    Exit;
  end;

  //侦听控制块返回超时结果
  if (LNCB[i].ncb_cmd_cplt = NRC_CMDTMO) then begin
    StatusBar1.Panels[7].Text := inttostr(i) + '道命令超时';
    //超时超过6次就关闭本路
    if Rep[i] < 6 then
      Rep[i] := Rep[i] + 1
    else begin
      Rep[i] := 0;
      Include(NoCapLane, i);
      cb[i].Checked := true;
    end;
    Exit;
  end;

  //如果侦听控制块返回其它错误
  if LNCB[i].ncb_cmd_cplt <> NRC_GOODRET then begin
    StatusBar1.Panels[5].Text := inttostr(i) + '道接收失败';
    StatusBar1.Panels[7].Text := GetRetStr(LNCB[i].ncb_cmd_cplt) +
      datetimetostr(now);
    Exit;
  end;

  //如果不是收费员操做信息,则退出
  if not (RecBuf[i].command in ['B', 'T', 'C', 'I', 'J', 'D', 'E']) then Exit;

  Application.ProcessMessages;

  case RecBuf[i].command of
    'B', 'D', 'E', 'I': begin
        lastcmd[i] := RecBuf[i].command;
        //把本次的数据报复制到LastRecBuf中
        LastRecBuf[i] := CopyRecord(RecBuf[i]);
      end;
    'T': begin
        if cancap then Capture(i);

        case lastcmd[i] of
          //等待自动判型命令'C'到来
          'B': lastcmd[i] := 'T';
          'I': if cancap then Savedata(LastRecBuf[i], 0, i);
          'T': if cancap then begin
              //上次操作员没有操做
              LastRecBuf[i].command := 'D';
              LastRecBuf[i].attrib := 0;
              Savedata(LastRecBuf[i], 0, i);
              lastcmd[i] := ' ';
            end;
          'E', 'D': begin
              if cancap then Savedata(LastRecBuf[i], 0, i);
              lastcmd[i] := ' '
            end;
        end;
      end;
    'C': begin //Label C
        //这个才是误判
        //if (RecBuf[i].no_same = 1) and (lastcmd[i] = 'T') then begin
        if (RecBuf[i].no_same = 1) then begin
          CarType := RecBuf[i].car_type;
          if cancap then Savedata(LastRecBuf[i], CarType, i);
        end;
        lastcmd[i] := ' ';
      end;
    'J': lastcmd[i] := ' ';
  end;

  {case RecBuf[i].command of
    'B', 'D', 'E', 'I': begin//Label A
        //除非上条指令是'T'=车检信号,才保存数据,在这里才能导致问题类别40的出现
        //出现这种情况的流程如下:1、某次接收到数据报,命令为'B',这样执行分支
        //Label A,从此分支出去后,LastCmd = 'B',LastRecBuf.Command = 'B';
        //2、接着收到一个数据报,命令为'T',这样进入分支Label B,出去后LastCmd = 'T',
        //LastRecBuf.Command = 'B',3、然后又收到一个数据报,命令为'B','D','E','I',
        //的一种,这样符合lastcmd = 'T'的条件,于是就保存为问题类别40(这个过程是
        //有问题的)。他想象中的正确流程是:3、然后又收到一个数据报,命令为'C',此时
        //LastCmd = 'T',LastRecBuf.Command = 'B',并且人机判别不一致,此时就保存为
        //问题类别40(这个应该是正常的流程)

        {if lastcmd[i] = 'T' then
        begin
          Savedata(LastRecBuf[i], 0, i);
        end;00}


        {if (LastRecBuf[i].command = 'B') and (LastRecBuf[i].no_same = 1) then
        begin
          CarType := RecBuf[i].car_type;
          if cancap then Savedata(LastRecBuf[i], CarType, i);
        end;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -