📄 main.~pas
字号:
if bRuning=False then
begin
msg.Caption := Format(SOAOGOAEAEUAESSAEAEDIoEyY, [pclk.Port, pclk.clock_id, Count-1]);
Break;
end;
nLine := ReadTextLine;
if nLine>0 then
begin
for i := 0 to nLine-1 do
SaveTextLine(i); //保存文本
Flush(F);
Flush(F2);
if (nLine>1) or ((nLine=1)and((Count+ERCount) mod 10=0)) then
begin
dlgProgress.ProgressBar.Position:=Count+ERCount-1;
dlgProgress.msg.Caption := format(SONAEDIoCA, [Count+ERCount-1]);
dlgProgress.Update;
end;
if ErrorCount>0 then
case rgOnError.ItemIndex of
0:{出错继续}
begin
ErrorCount:=0;
end;
1:{出错重试}
begin
Windows.Beep(2500, 150);
dlgProgress.msg.Caption := Format(SSSUAEyYIIoOyOUOEOUDI, [pclk.Port, pclk.clock_id, ErrorCount]);
end;
2:{出错重试三次继续}
begin
Windows.Beep(2500, 150);
if (pclk.VerOrd<>2)and(ErrorCount<=3) then
dlgProgress.msg.Caption := Format(SSSUAEyYIIoOyOUOEOUDI, [pclk.Port, pclk.clock_id, ErrorCount])
else
ErrorCount:=0;
end;
end;
end
else if (nLine=-1) then //读数据发生错误
begin
Inc(ErrorCount);
Windows.Beep(2500, 150);
case rgOnError.ItemIndex of
0:{出错继续}
begin
ErrorCount:=0;
end;
1:{出错重试}
begin
dlgProgress.msg.Caption := Format(SSSUAEyYIIoOyOUOEOUDI, [pclk.Port, pclk.clock_id, ErrorCount])
end;
2:{出错重试三次继续}
begin
if ErrorCount<=3 then
dlgProgress.msg.Caption := Format(SSSUAEyYIIoOyOUOEOUDI, [pclk.Port, pclk.clock_id, ErrorCount])
else
begin
ErrorCount:=0;
msg.Caption:=msg_error_quit;
msg.Update;
UnCallClock(pclk.hPort);
Sleep(500);
// if not CallClock(pclk.hPort, pclk.clock_id) then
Break;
end;
end;
end;
end
else
begin
Windows.Beep(2500, 100);
if Count+ERCount>1 then
begin
S:=format(SOUSSEIAEAEDIoEyYAEOUIASSOG, [pclk.Port, pclk.clock_id, Count-1, ExtractFileName(FileName)]);
if ERCount>0 then
S:=S+format(msg_saved_error_record, [ERCount, ExtractFileName(ERRFile)]);
msg.Caption := S;
end else
msg.Caption := SEeISSEyY1;
WriteLn(FLog, msg.Caption);
WriteLn(FLog, Endl);
Break;
end;
until False;
end;
finally
Flush(F);
Flush(F2);
Flush(FLog);
CloseFile(FLog);
CloseFile(F);
CloseFile(F2);
hHandle := FileOpen(FileName, fmOpenRead);
nSize := GetFileSize(hHandle, nil);
FileClose(hHandle);
if nSize=0 then
DeleteFile(PChar(FileName));
hHandle := FileOpen(ERRFile, fmOpenRead);
nSize := GetFileSize(hHandle, nil);
FileClose(hHandle);
if nSize=0 then
DeleteFile(PChar(ERRFile));
dlgProgress.Animate.Active:=False;
end;
end;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
S: string;
begin
bRuning := False;
try
// if FDeviceListModified then
// SaveListFile(CurrentListFile, True);
with Fini do
begin
if not cbNotSaveDeviceList.Checked then
begin
EraseSection(DevSec);
for i := 0 to FClocks.Count-1 do
with PClockInfo(FClocks[i])^ do
begin
S := format(SDSSUUNSS, [clock_type, arBoolean[Boolean(cls)], clock_id, Port, BaudRate, Fireware, '', arBoolean[CmdVerify]]);
WriteString(DevSec, IntToStr(i), S);
end;
end;
begin
WriteBool(SetSec, 'CmdVerifyFirst', cbCmdVerifyFirst.Checked);
WriteString(SetSec, 'FormatString', edFMTStr.Text);
WriteBool(SetSec, 'UseFormatString', cbUseFmt.Checked);
WriteInteger(SetSec, 'Save', rbSave.ItemIndex);
WriteString(SetSec, 'FileName', edFileName.Text);
WriteBool(SetSec, 'Timer Update Time', cbSynTime.Checked);
WriteBool(SetSec, 'Auto Clear Device', cbAutoClearClock.Checked);
WriteBool(SetSec, 'Timer Receive', cbTimeReceive.Checked);
WriteString(SetSec, 'Time1', meTime1.Text);
WriteString(SetSec, 'Time2', meTime2.Text);
WriteString(SetSec, 'Time3', meTime3.Text);
WriteString(SetSec, 'Time4', meTime4.Text);
WriteString(SetSec, 'Time5', meTime5.Text);
WriteBool(SetSec, 'Not Save Device List', cbNotSaveDeviceList.Checked);
WriteInteger(SetSec, 'On Error Action', rgOnError.ItemIndex);
end;
UpdateFile;
end;
except
MsgBox(Screen.ActiveForm.Handle, PChar(SISSAEAaOAIAS), PChar(SIIo), MB_OK or MB_ICONERROR);
Halt;
end;
end;
procedure TfrmMain.btnGetTimeClick(Sender: TObject);
var
curTime: Double;
TimeString:Array[0..16] of char;
begin
if clbDevs.ItemIndex=-1 then
ChooseDev;
with clbDevs do
begin
pclk := PClockInfo(Items.Objects[ItemIndex]);
if OpenPort(pclk) then
begin
if ReadClockTime(pclk.hPort, CurTime) then
begin
msg.Caption := format(SSSEAIS, [pclk.Port, pclk.clock_id, DateTimeToStr(CurTime)]);
end
else
begin
msg.Caption := SERROR;
end;
end;
Windows.Beep(2500, 100);
end;
end;
procedure TfrmMain.btnSetTimeClick(Sender: TObject);
var
Right: Boolean;
i, y, SaveIdx: Integer;
begin
y:=0;
SaveIdx:=clbDevs.ItemIndex;
for i:=0 to clbDevs.Items.Count-1 do
if clbDevs.Checked[i] and Assigned(clbDevs.Items.Objects[i]) then
begin
pclk:=PClockInfo(clbDevs.Items.Objects[i]);
clbDevs.ItemIndex:=i;
clbDevs.Refresh;
if OpenPort(pclk) then
begin
Right := SetClockTime(pclk.hPort, Now);
if Right then
msg.Caption := Format(SSSEAEeOAE, [pclk.Port, pclk.clock_id])
else
msg.Caption := Format(SSSEAEeOAEU, [pclk.Port, pclk.clock_id]);
end;
Windows.Beep(2500, 150);
ClosePort(pclk);
Sleep(100);
inc(y);
end;
clbDevs.ItemIndex:=SaveIdx;
if y=0 then
begin
if clbDevs.ItemIndex=-1 then
ChooseDev;
begin
pclk := PClockInfo(clbDevs.Items.Objects[clbDevs.ItemIndex]);
if not OpenPort(pclk) then
begin
pclk.Connected := False;
pclk.hPort := OpenCommPort(pclk.Port, pclk.BaudRate);
if pclk.clock_type<>0 then
SetClockModel(pclk.hPort, pclk.Model, pclk.Fireware, pclk.cls)
else
begin
SetCmdVerify(cbCmdVerifyFirst.Checked);
end;
end
else
pclk.Connected := True;
if CheckHandle(pclk.hPort) then
begin
if not pclk.Connected then
begin
if MsgBox(Handle, pchar(format(SISSAUECNEOOOAEEeOACOMDEUEIAEuOGEeAEA, [pclk.Port])), msg_confirm, MB_YESNO or MB_ICONQUESTION)<>IDYES then
begin
ClosePort(pclk);
Exit;
end;
Right := SetPortAllClockTime(pclk.hPort, Now);
for i:=0 to 2 do
begin
if i<>((pclk.baudrate div 9600) div 2) then
begin
if i=0 then InitCommPort(pclk.hPort, 9600, 255) else
InitCommPort(pclk.hPort, i*2*9600, 255);
Right := SetPortAllClockTime(pclk.hPort, Now);
end;
end;
if InitCommPort(pclk.hPort, pclk.baudrate, 255) then
ClosePort(pclk);
end
else
Right := SetClockTime(pclk.hPort, Now);
if Right then
msg.Caption := Format(SSSEAEeOAE, [pclk.Port, pclk.clock_id])
else
msg.Caption := Format(SSSEAEeOAEU, [pclk.Port, pclk.clock_id]);
if not pclk.Connected then
begin
if CheckHandle(pclk.hPort) then
CloseHandle(pclk.hPort);
pclk.hPort:=0;
end;
end;
Windows.Beep(2500, 150);
end;
end;
end;
procedure TfrmMain.btnReadClick(Sender: TObject);
var
I, x, y: Integer;
Right: Boolean;
SaveCursor: TCursor;
SaveCaption: string;
WindowList: Pointer;
ActiveWindow : Hwnd;
begin
if bRuning=True then
begin
bRuning := False;
Exit;
end;
ActiveWindow := GetActiveWindow;
WindowList := DisableTaskWindows(0);
x := clbDevs.ItemIndex;
SaveCursor := Screen.Cursor;
Screen.Cursor := crAppStart;
if not Assigned(dlgProgress) then dlgProgress:=TdlgProgress.Create(Self);
try
ClosePort(pclk);
begin
bRuning := True;
SaveCaption := btnRead.Caption;
btnRead.Caption := SIO;
y:=0;
for I := 0 to clbDevs.Items.Count-1 do
if clbDevs.Checked[i] then
Inc(y);
if (clbDevs.ItemIndex<>-1) and (y<2) then
begin
pclk := PClockInfo(clbDevs.Items.Objects[clbDevs.ItemIndex]);
if OpenPort(pclk) then
begin
if (Sender=btnRead)and(not btnRead.Enabled) then Exit;
if (Sender=nil) and cbSynTime.Checked then//定时更新时间
begin
Right := SetClockTime(pclk.hPort, Now);
if Right then
msg.Caption := Format(SSSEAEeOAE, [pclk.Port, pclk.clock_id])
else
msg.Caption := Format(SSSEAEeOAEU, [pclk.Port, pclk.clock_id]);
end;
ReadData(pclk, True, False); //快速下载数据
end;
end else if y=0 then
MsgBox(Screen.ActiveForm.Handle, PChar(SCeNOnUAEEAN), PChar(SIaE), MB_OK or MB_ICONINFORMATION)
else
for I := 0 to clbDevs.Items.Count-1 do
begin
if clbDevs.Checked[i] then
begin
clbDevs.ItemIndex := i;
clbDevs.Update;
pclk := PClockInfo(clbDevs.Items.Objects[i]);
if OpenPort(pclk) then
begin
if (Sender=btnRead)and(not btnRead.Enabled) then Continue;
if (Sender=nil) and cbSynTime.Checked then//定时更新时间
begin
Right := SetClockTime(pclk.hPort, Now);
if Right then
msg.Caption := Format(SSSEAEeOAE, [pclk.Port, pclk.clock_id])
else
msg.Caption := Format(SSSEAEeOAEU, [pclk.Port, pclk.clock_id]);
end;
ReadData(pclk, True, True); //快速下载数据
ClosePort(pclk);
end;
end;
end;
end;
finally
Screen.Cursor := SaveCursor;
EnableTaskWindows(WindowList);
if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
dlgProgress.Close;
clbDevs.ItemIndex := x;
btnRead.Caption := SaveCaption;
bRuning := False;
end;
end;
procedure TfrmMain.btnSetAdminClick(Sender: TObject);
var
Right: Boolean;
i: Integer;
CardNo: string;
Buff: array[0..32] of char;
begin
if clbDevs.ItemIndex=-1 then
ChooseDev;
with clbDevs do
begin
pclk := PClockInfo(Items.Objects[ItemIndex]);
OpenPort(pclk);
if not CheckHandle(pclk.hPort) then
begin
pclk.Connected := False;
pclk.hPort := OpenCommPort(pclk.Port, pclk.BaudRate);
if pclk.clock_type<>0 then
SetClockModel(pclk.hPort, pclk.Model, pclk.Fireware, pclk.cls)
else
begin
SetCmdVerify(cbCmdVerifyFirst.Checked);
end;
end
else
pclk.Connected := True;
if CheckHandle(pclk.hPort) then
begin
if dlgCardNo=nil then
dlgCardNo := TdlgCardNo.Create(Application);
if pclk.Connected then
if ReadManagerCard(pclk.hPort, Buff) then
dlgCardNo.edCardNo.Text := Buff;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -