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

📄 frm_c_kczpas.pas

📁 是一个用delphi设计的考勤系统
💻 PAS
字号:
unit frm_c_kczpas;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ModalForm, Menus, StdCtrls, ExtCtrls, ComCtrls, ChangeImage,
   YLabelButton, UTcard, UTyhxx, UErrDisplay;

type
   Tfrm_c_kcz = class(TMyModalForm)
      LBtnEdit: TLabelB;
      BtnEdit: TChangeImg;
      BtnHelp: TChangeImg;
      LBtnHelp: TLabelB;
      BtnInport: TChangeImg;
      LBtnInport: TLabelB;
      BtnMe: TChangeImg;
      LBtnMe: TLabelB;
      stb: TStatusBar;
      GroupBox1: TGroupBox;
      GroupBox2: TGroupBox;
      GroupBox3: TGroupBox;
      GroupBox4: TGroupBox;
      Label1: TLabel;
      Label2: TLabel;
      Label3: TLabel;
      Label4: TLabel;
      GroupBox5: TGroupBox;
      Label5: TLabel;
      Label6: TLabel;
      edtCzje: TEdit;
      lvczjl: TListView;
      Label7: TLabel;
      Label8: TLabel;
      Label9: TLabel;
      BtnBrowse: TChangeImg;
      lblyhbh: TLabel;
      lblyhxm: TLabel;
      lblCardsn: TLabel;
      lblCardye: TLabel;
      lblczcs: TLabel;
      lblsydate: TLabel;
      lblsytype: TLabel;
      lblbmmc: TLabel;
      Label10: TLabel;
      procedure imgCloseButtonClick(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      procedure edtCzjeKeyPress(Sender: TObject; var Key: Char);
      procedure BtnBrowseClick(Sender: TObject);
      procedure BtnEditClick(Sender: TObject);
      procedure BtnInportClick(Sender: TObject);
      procedure BtnHelpClick(Sender: TObject);
      procedure BtnMeClick(Sender: TObject);
   private
    { Private declarations }
      procedure cz(czfs: integer);
      procedure IniDate;
   public
    { Public declarations }
   end;
   TReadCardThread = class(TThread)
   private
      Cardsn: longword;
      procedure Execute; override;
      procedure ShowCardInf;
   end;

var
   frm_c_kcz: Tfrm_c_kcz;

implementation

uses UGlobal, frm_c_CzSzpas, frm_c_ksypas, UGeneralFunc;
var
   yhcard: Tcard;
   yhxx: Tyhxx;
   ReadCardThread: TReadCardThread;
   ReadCard: boolean = False; //0:无读卡 1:正在读卡 2:正在写卡
   Writecard: boolean = false;
   CardSign: Integer = 0;
{$R *.dfm}

{ TReadCardThread }

procedure TReadCardThread.Execute;
var
   bShow: boolean;
   iFailCount: integer;
begin
   inherited;
   iFailCount := 0;
   while not Terminated do
   begin
      if CardSign = 0 then
      begin
         bShow := False;
         cardsign := 1;
         if Cardsn = 0 then
         begin
            yhcard.yhdk(False);
            Cardsn := yhcard.CardSN;
            yhxx.GetYhxx(yhcard.Yhbh);
            bShow := True;
         end
         else
         begin
            if not yhcard.CardExist(CardSn) then
            begin
               if iFailCount = 1 then
               begin
                  yhcard.yhdk(False);
                  Cardsn := yhcard.CardSN;
                  yhxx.GetYhxx(yhcard.Yhbh);
                  bShow := True;
                  iFailCount := 0;
               end
               else
               begin
                  inc(iFailCount);
                  bShow := False;
               end;
            end;
         end;
         cardsign := 0;
         sleep(200);
         if bShow then
         begin
            iFailCount := 0;
            Synchronize(ShowCardInf);
         end;
      end;
   end;
end;

procedure TReadCardThread.ShowCardInf;
begin
   with frm_c_kcz do
   begin
      if yhcard.RetVal = -1 then
      begin
         IniDate;
         exit;
      end;
      stb.Panels[1].Text := yhcard.RetMsg;
      if yhcard.RetVal = 0 then
         stb.Panels[1].Text := '输入金额后点击[充值] 或 按[ENTER]键充值 ';
      lblyhbh.caption := yhcard.Yhbh;
      lblyhxm.Caption := yhxx.Yhxm;
      lblcardsn.Caption := inttostr(yhcard.CardSN);
      lblcardye.Caption := trim(format('%12.2f', [yhcard.cardye])) + '  元';
      lblczcs.Caption := inttostr(yhcard.CardTimes);
      lblsydate.Caption := datetostr(yhcard.DateLimit);
      lblsytype.Caption := inttostr(yhcard.CardType);
      lblbmmc.Caption := yhxx.Bjmc;
      edtczje.SelectAll;
   end;
end;

procedure Tfrm_c_kcz.imgCloseButtonClick(Sender: TObject);
begin
   inherited;
   ReadCardThread.DoTerminate;
   ReadCardThread.Free;
   close;
end;

procedure Tfrm_c_kcz.IniDate;
begin
   lblyhbh.Caption := '';
   lblyhxm.Caption := '';
   lblcardsn.Caption := '';
   lblcardye.Caption := '';
   lblczcs.Caption := '';
   lblsydate.Caption := '';
   lblsytype.Caption := '';
   lblbmmc.Caption := '';
   edtczje.Text := '';
   stb.Panels[1].Text := '请将IC卡放在发卡器上';
   stb.Panels[5].Text := trim(format('%12.2f', [gtSysCs.dMinCzje])) + '元'
      + '----' + trim(format('%12.2f', [gtSyscs.dMaxczje])) + '元';
   if gtsyscs.bXjCzPrint then
      stb.Panels[3].Text := '是'
   else
      stb.Panels[3].Text := '否';
end;

procedure Tfrm_c_kcz.FormCreate(Sender: TObject);
begin
   inherited;
   IniDate;
   yhcard := Tcard.Create;
   yhxx := Tyhxx.create;
   ReadCardThread := TReadCardThread.Create(False);
end;

procedure Tfrm_c_kcz.edtCzjeKeyPress(Sender: TObject; var Key: Char);
begin
   inherited;
   if key = char(vk_back) then exit;
   if (key = #13) and (trim(edtczje.Text) <> '-') then
   begin
      BtnEditClick(self);
      edtczje.SetFocus;
      edtczje.SelectAll;
   end;
  //
   if key = '-' then
   begin
      if length(edtczje.text) > 0 then key := #0;
      exit;
   end;
  //
   if ((length(edtczje.text) - pos('.', edtczje.text)) = 2) and (pos('.', edtczje.text) <> 0) then
   begin
      key := #0;
      exit;
   end;
  //
   if (length(edtczje.Text) = 0) or (pos('.', edtczje.text) <> 0) then
   begin
      if not (key in ['0'..'9']) then key := #0
   end
   else
   begin
      if not (key in ['0'..'9', '.']) then key := #0;
   end;

end;

procedure Tfrm_c_kcz.BtnBrowseClick(Sender: TObject);
begin
   inherited;
   if trim(lblsytype.Caption) = '' then
   begin
      stb.Panels[1].Text := '无卡使用类别显示';
      ErrDisplay.ErrPrompt(stb.Panels[1].Text, '');
      exit;
   end;
   if not assigned(frm_c_ksy) then
      frm_c_ksy := Tfrm_c_ksy.Create(application);
   frm_c_ksy.CardType := strtoint(lblsytype.Caption);
   frm_c_ksy.Show;
end;

procedure Tfrm_c_kcz.BtnEditClick(Sender: TObject);
begin
   inherited;
   if trim(edtczje.Text) = '' then exit;
   if copy(edtczje.Text, 1, 1) = '-' then
   begin
      stb.Panels[1].Text := '如果要冲正请输入负金额后点击[冲正]';
      ErrDisplay.ErrPrompt(stb.Panels[1].Text, '');
      exit;
   end;
   cz(1);
end;

procedure Tfrm_c_kcz.cz(czfs: integer);
var
   dscye, dCzje: double;
   syhxm: string;
   sStr: string;
   NewItem: Tlistitem;
   i: integer;
begin
   btnedit.Enabled := False;
   edtczje.Enabled := False;
   try
      dCzje := strtofloat(trim(edtczje.Text));
      syhxm := yhxx.Yhxm;
      if (abs(dCzje) <= gtsyscs.dMaxCzje) and (abs(dCzje) >= gtsyscs.dMinCzje) then
      begin
         dscye := yhcard.CardYe;
         sStr := '当前用户:' + yhxx.Yhxm + #13#10 +
            '充值金额:' + edtczje.Text + #13#10 +
            '       请确认';
         if application.MessageBox(pchar(sstr), '充值提示', mb_YesNo + mb_iconquestion) = id_Yes then
         begin
            while CardSign = 1 do ;
            cardsign := 1;
            if trim(edtczje.Text) = '' then exit;
            yhcard.yhcz(czfs, dczje);
            if yhcard.RetVal = 0 then
            begin
               if lvczjl.Items.Count >= 5 then lvczjl.Items[0].Delete;
               NewItem := lvczjl.Items.Add;
               NewItem.Caption := yhcard.Yhbh;
               NewItem.SubItems.Add(syhxm);
               NewItem.SubItems.Add(inttostr(yhcard.CardSN));
               NewItem.SubItems.Add(trim(format('%12.2f', [yhcard.CardYe - dczje])));
               NewItem.SubItems.Add(trim(format('%12.2f', [dczje])));
               NewItem.SubItems.Add(trim(format('%12.2f', [yhcard.CardYe])));
               NewItem.SubItems.Add(inttostr(yhcard.CardTimes));
               NewItem.SubItems.Add(timetostr(time));
               NewItem.Selected := True;
               stb.Panels[1].Text := '[' + inttostr(yhcard.retval) + ']' + yhcard.RetMsg;
               ReadCardThread.Cardsn := 0;
            end
            else
               stb.Panels[1].Text := '[' + inttostr(yhcard.retval) + ']' + yhcard.RetMsg;
         end;
      end
      else
         stb.Panels[1].Text := '金额超限';
   finally
      btnedit.Enabled := True;
      edtczje.Enabled := True;
      edtczje.SetFocus;
      edtczje.SelectAll;
      CardSign := 0;
   end;
   ErrDisplay.ErrPrompt(stb.Panels[1].Text, '');
end;

procedure Tfrm_c_kcz.BtnInportClick(Sender: TObject);
begin
   inherited;
   if trim(edtczje.Text) = '' then exit;
   if copy(edtczje.Text, 1, 1) <> '-' then
   begin
      stb.Panels[1].Text := '如果要冲正请输入负金额后点击[冲正]';
      ErrDisplay.ErrPrompt(stb.Panels[1].Text, '');
      exit;
   end;
   cz(3);
end;

procedure Tfrm_c_kcz.BtnHelpClick(Sender: TObject);
begin
   inherited;
   HtmlHelp(Handle, gtSyscs.sHelpFileName, $0001, DWORD(PChar('Introduction.htm')));
end;

procedure Tfrm_c_kcz.BtnMeClick(Sender: TObject);
begin
   inherited;
   frm_c_CzSz := Tfrm_c_CzSz.Create(application);
   frm_c_CzSz.ShowModal;
   frm_c_CzSz.Free;
   stb.Panels[5].Text := trim(format('%12.2f', [gtSysCs.dMinCzje])) + '元'
      + '----' + trim(format('%12.2f', [gtSyscs.dMaxczje])) + '元';
   if gtsyscs.bXjCzPrint then
      stb.Panels[3].Text := '是'
   else
      stb.Panels[3].Text := '否';
end;

end.

⌨️ 快捷键说明

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