📄 okc21mainut.~pas
字号:
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 + -