📄 timeclock.pas
字号:
end;
end;
procedure TfrmMain.sbDelClockClick(Sender: TObject);
var
i: Integer;
begin
if (lvClocks.SelCount>0) then
begin
if (MsgBox(Screen.ActiveForm.Handle, SECNEYNOGAEuOGEe, SAE1, MB_YESNO or MB_ICONQUESTION)=IDYES) then
for i := lvClocks.Items.Count-1 downto 0 do
if lvClocks.Items[i].Selected then
begin
lvClocks.Items.Delete(i);
end;
msg.Caption := SDROPDECIVE;
Windows.Beep(2500,100)
end
else
msg.Caption :=SSELECTDECIVE;
Windows.Beep(2500,100);
end;
procedure TfrmMain.lvClocksDeletion(Sender: TObject; Item: TListItem);
var
idx: Integer;
begin
lvClocks.Items.BeginUpdate;
try
idx := clbDevs.Items.IndexOfObject(Item.Data);
if pclk=Item.Data then
ClosePort(pclk);
if Idx<>-1 then
begin
clbDevs.Items.Delete(idx);
cbDecive.Items.Delete(idx);
end;
Idx := FClocks.IndexOf(Item.Data);
Item.Data:=nil;
if Idx<>-1 then
begin
if Assigned(pclk)and(pclk=FClocks[idx]) then
begin
ClosePort(pclk);
pclk := nil;
end;
if Assigned(FClocks[idx]) then
Dispose(FClocks[idx]);
FClocks[idx] := nil;
FClocks.Delete(Idx);
end;
finally
lvClocks.Items.EndUpdate;
end;
end;
procedure TfrmMain.lvClocksSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected and Assigned(Item)and(Assigned(Item.Data)) then
with PClockInfo(Item.Data)^ do
begin
edClockID.Text := IntToHex(clock_id, 2);
cbPort.ItemIndex := Port-1;
//cbRate.Text := format('%d', [BaudRate]);
cbCmdVerify.Checked:=CmdVerify;
if clock_type=0 then
begin
edClockType.Text := SOEG;
edFireware.Text := '';
end else
begin
edClockType.Text := format('%d', [clock_type]);
edFireware.Text:=format('%1.2n', [Fireware]);
end;
edPlace.Text := format('%s',[clock_place]);
cbICID.Checked := cls>0;
// edClockTypeChange(Sender);
end;
end;
procedure TfrmMain.btnSearchClick(Sender: TObject);
var
Strs: TStringList;
function SearchClock(Port, BaudRate, start_id, end_id, Delay: Integer): Integer;
var
i: Integer;
hPort: THandle;
S: string;
begin
Result := 0;
hPort := OpenCommPort(Port, BaudRate);
if hPort=0 then Exit;
SetCmdVerify(dlgSearchPort.cbCmdVerify.Checked);
if not Assigned(dlgHints) then
dlgHints := TdlgHints.Create(Self);
try
dlgHints.Show;
dlgHints.Update;
dlgHints.msg.Caption := '';
for i := start_id to end_id do
begin
S := IntToHex(i, 2);
dlgHints.msg.Caption := format(SOyOUAOCOMDS, [Port, S]);
dlgHints.msg.Update;
if TestCallClock(hPort, i, Delay) then
begin
Strs.Add(S+#9+IntToStr(Port));
Inc(Result);
end;
end;
finally
EastRiver.DisConnectClock(hPort);
dlgHints.Close;
end;
end;
var
i, nInt, Port, BaudRate, start_id, end_id, Delay, flag: Integer;
AllPort: Boolean;
Item: TListItem;
S: string;
pclk2: PClockInfo;
SaveCursor: TCursor;
begin
Strs := TStringList.Create;
SaveCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
if dlgSearchPort.Execute(Port, BaudRate, start_id, end_id, Delay, AllPort) then
begin
if Assigned(pclk) then ClosePort(pclk);
nInt := 0;
if not AllPort then
nInt := SearchClock(Port, BaudRate, start_id, end_id, Delay)
else
for i := 0 to cbPort.Items.Count-1 do
begin
Port := StrToIntDef(Copy(cbPort.Items[i], 4, Length(cbPort.Items[i])-3), 1);
nInt := nInt+SearchClock(Port, BaudRate, start_id, end_id, delay);
end;
if (nInt>0) then
begin
if (Sender=nil)or(MsgBox(Screen.ActiveForm.Handle, PChar(format(SOODOEeECNOEeEeAGI, [nInt])), SIaE, MB_YESNO or MB_ICONQUESTION)=IDYES) then
begin
flag := 1;
FClocks.Clear;
lvClocks.Items.Clear;
clbDevs.Clear;
end;
//if flag = 1 then
begin
for i := 0 to Strs.Count-1 do
begin
nInt := pos(#9, Strs[i]);
S := Copy(Strs[i], 1, nInt-1);
Port := StrToIntDef(Copy(Strs[i], nInt+1, Length(Strs[i])-nInt), 1);
Item := lvClocks.FindCaption(0, S, False, True, False);
if (not Assigned(Item))or(Item.SubItems[1]<>IntToStr(Port)) then
begin
New(pclk2);
FClocks.Add(pclk2);
FillChar(pclk2^, SizeOf(TClockInfo), 0);
pclk2.CmdVerify := dlgSearchPort.cbCmdVerify.Checked;
pclk2.hPort := 0;
pclk2.clock_id := StrToInt('$'+S);
// pclk2.clock_name := S;
pclk2.Port := Port;
pclk2.BaudRate := BaudRate;
with lvClocks.Items.Add do
begin
Data := pclk2;
Caption := S;
SubItems.Add('');
SubItems.Add(IntToStr(pclk2.Port));
SubItems.Add(IntToStr(pclk2.BaudRate));
SubItems.Add(SOEG);
SubItems.Add('');
SubItems.Add('');
SubItems.Add('');
end;
clbDevs.Items.AddObject(format(SSCOMD, [pclk2.Port, pclk2.clock_id,pclk2.clock_place]), TObject(pclk2));
cbDecive.Items.AddObject(format(SSCOMD, [pclk2.port, pclk2.clock_id,pclk2.clock_place]),TObject(pclk2));
end
end;
if (clbDevs.ItemIndex=-1)and(clbDevs.Items.Count>0) then
begin
clbDevs.Checked[0] := True;
clbDevs.ItemIndex := 0;
end;
end;
end
else
begin
MsgBox(Screen.ActiveForm.Handle, SAOGOOEe, SIaE, MB_OK or MB_ICONINFORMATION);
end;
end;
finally
Screen.Cursor := SaveCursor;
Strs.Free;
end;
end;
procedure TfrmMain.edInspectorDblClick(Sender: TObject);
begin
ClosePort(pclk);
end;
procedure TfrmMain.ClosePort(pclk: PClockInfo);
begin
if Assigned(pclk) then
begin
if (pclk.hPort<>0)and(pclk.hPort<>INVALID_HANDLE_VALUE) then
EastRiver.DisConnectClock(pclk.hPort);
pclk.hPort := 0;
pclk.Connected:=False;
edInspector.Caption := SINU;
end;
end;
function TfrmMain.OpenPort(pclk: PClockInfo): Boolean;
var
i: Integer;
R: Boolean;
SaveCursor: TCursor;
begin
Result:=False;
SaveCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
msg.Caption := Format(SOyOUAOSS, [pclk.Port, pclk.clock_id]);
msg.Update;
if not CheckHandle(pclk.hPort) then
begin
pclk.Connected := False;
pclk.hPort := OpenCommPort(pclk.Port, pclk.BaudRate);
if CheckHandle(pclk.hPort) then
begin
if pclk.clock_type<>0 then
SetClockModel(pclk.hPort, pclk.Model, pclk.Fireware, pclk.cls)
else
begin
SetCmdVerify(cbCmdVerifyFirst.Checked);
end;
if not CallClock(pclk.hPort, pclk.clock_id) then
begin
CloseHandle(pclk.hPort);
pclk.hPort:=0;
Result:=False;
end else
begin
Result:=True;
end;
end;
if Result and CheckHandle(pclk.hPort) then
begin
SetCardStyle(cbCardStyle.ItemIndex);
edInspector.Caption := SAU;
msg.Caption := SAOE;
if pclk.clock_type<>0 then
begin
SetClockModel(pclk.hPort, pclk.Model, pclk.Fireware, pclk.cls);//自动识别
pclk.VerOrd:=GetClockVersionOrd(pclk.hPort);
// SetCmdVerify(pclk.CmdVerify);
end else
begin
GetClockModel(pclk.hPort, pclk.Model, pclk.Fireware, pclk.cls);
pclk.VerOrd:=GetClockVersionOrd(pclk.hPort);
end;
end
else if pclk.hPort=INVALID_HANDLE_VALUE then//端口无效或正在使用
begin
Result:=False;
pclk.hPort := 0;
edInspector.Caption := SINU;
msg.Caption := format(SISSOEUCOMD, [pclk.Port]);
end
else
begin
edInspector.Caption := SINU;
msg.Caption := format(SISSAOEeSS, [pclk.Port, pclk.clock_id]);
end;
end
else{ if CheckConnectClock(hPort, pclk.clock_id) then}
begin
msg.Caption := SAOOK;
edInspector.Caption := SAU;
Result := True;
end{
else
begin
try
CloseHandle(hPort);
except
end;
hPort := 0;
pclk.hPort := 0;
Result := 0;
edInspector.Caption := SINU;
end};
pclk.Connected := CheckHandle(pclk.hPort);
i := clbDevs.Items.IndexOfObject(TObject(pclk));
if i<>-1 then
begin
if Result then
begin
if pclk.Model=0 then
clbDevs.Items[i] := format(SSCOMDISSEGUGI, [pclk.Port, pclk.clock_id])
else
clbDevs.Items[i] := format('COM%d-%.2x(%d%s %1.2n)', [pclk.Port, pclk.clock_id, pclk.Model, arICID[pclk.cls], pclk.Fireware]);
end
else
clbDevs.Items[i] := format(SSCOMDISSIN, [pclk.Port, pclk.clock_id])
end;
if Result then
begin
{
if (pclk.model=680) then
begin
btnMoneySum.Caption := SIuNUGIU;
btnMoneySum.Tag := 0;
end else
begin
btnMoneySum.Caption := SIGAEUAEB;
btnMoneySum.Tag := 1;
end;
}
btnRead.Enabled:=GetClockSupports(pclk.hPort, fiStoreRecord);
btnClearData.Enabled:=btnRead.Enabled;
btnSetTime.Enabled:=GetClockSupports(pclk.hPort, fiClockTime);
// btnGetTime.Enabled:=btnSetTime.Enabled;
if not btnRead.Enabled then
begin
//btnSetAdmin.Enabled:=GetClockSupports(pclk.hPort, fiAdminCard);
btnSetMark.Enabled:=GetClockSupports(pclk.hPort, fiHaveMark);
//btnRealCollect.Enabled:=GetClockSupports(pclk.hPort, fiRealTime);
btnSetClockId.Enabled:=GetClockSupports(pclk.hPort, fiChangeClockId);
end else
begin
//btnSetAdmin.Enabled:=True;
btnSetMark.Enabled:=True;
btnSetClockId.Enabled:=True;
//btnRealCollect.Enabled:=True;
end;
//btnSetPwd.Enabled:=GetClockSupports(pclk.hPort, fiICReader);
R:=GetClockSupports(pclk.hPort, fiConsumption);
//tsConsumption.TabVisible:=R;
//tsPeriods.TabVisible:=pclk.VerOrd>2;
//tsPriceList.TabVisible:=GetClockSupports(pclk.hPort, fiPriceList);
end;
finally
Screen.Cursor := SaveCursor;
msg.Update;
end;
end;
procedure TfrmMain.ChooseDev;
begin
PageControl1.ActivePage := tsBaseOP;
MsgBox(Screen.ActiveForm.Handle, PChar(SCeNOnUAE), PChar(SIaE), MB_OK);
Abort;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
Screen.OnActiveFormChange:=nil;
ClosePort(pclk);
pclk := nil;
//ClearIDList(DeviceList);
ClearIDList(FClocks);
//DeviceList.Free;
lvClocks.Free;
fIni.Free;
FreeIcon;
NormalIcon.Free;
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;
ClosePort(pclk);
Windows.Beep(2500, 100);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -