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

📄 main.~pas

📁 一个Delphi写的跟考勤机门禁机收款机的接品软件源码
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
          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 + -