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

📄 unit2.pas

📁 基于delphi的门禁考勤系统
💻 PAS
字号:
unit Unit2;

interface

uses
  Windows, ActiveX, ComObj, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Registry, IniFiles, StrUtils, Buttons, ShlObj, FileCtrl;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    txtschoolno: TEdit;
    txtcf: TEdit;
    txtwcf: TEdit;
    txtport: TEdit;
    ComboBox1: TComboBox;
    cmdtimeset: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    schoolin1: TEdit;
    txtshin: TEdit;
    ComboBox2: TComboBox;
    schoolout1: TEdit;
    txtshout: TEdit;
    schoolty1: TEdit;
    schoolin2: TEdit;
    schoolout2: TEdit;
    schoolty2: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    procedure cmdtimesetClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    function check(devidstr: string): boolean;
    function removedo(str: string; dostr: string): string;
    procedure setdevid(tmpstr: string; schoolno: string; front: string; dostr: string);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  devidarr: TStrings;
  clickbool: boolean;

implementation

uses Unit1, Unit4;

{$R *.dfm}

procedure TForm2.cmdtimesetClick(Sender: TObject);
begin
  clickbool := true;
//  self.Hide;
  Form1.Show;
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
var
  i,j,count: integer;
  devidstr: string;
  checkdevidarr: TStrings;
  Bool: boolean;
//  Reg: TRegistry;
begin
  if TryStrToInt(txtschoolno.text, i) then
  begin
    if length(txtschoolno.text) <> 4 then
    begin
      Showmessage('学校编码只能设置为4位的数字!');
      txtschoolno.Text := '';
      txtschoolno.SetFocus;
      exit;
    end;
  end else
  begin
    Showmessage('学校编码必须设置为4位的整数!');
    txtschoolno.Text := '';
    txtschoolno.SetFocus;
    exit;
  end;

  if ComboBox2.Text = '' then
  begin
    Showmessage('默认串口设置不能为空');
    ComboBox2.ItemIndex := 0;
    exit;
  end;

  if TryStrToInt(txtcf.text, i) then
  begin
    if strtoint(txtcf.Text) < 5 then
    begin
      Showmessage('重复刷卡时间间隔不能小于5分钟');
      txtcf.Text := inttostr(5);
      txtcf.SetFocus;
      exit;
    end;
  end else
  begin
    Showmessage('重复刷卡时间间隔必须设置为可识别的数字'); 
    txtcf.Text := inttostr(5);
    txtcf.SetFocus;
    exit;
  end;

  if TryStrToInt(txtwcf.Text, i) then
  begin
    if (strtoint(txtwcf.Text) < 10) then
    begin
      Showmessage('无回执重复上传时间间隔设置不能小于10分钟');
      txtwcf.Text := inttostr(10);
      txtwcf.SetFocus;
      exit;
    end;
  end else
  begin
    Showmessage('无回执重复上传时间间隔设置必须为整数');
    txtwcf.Text := inttostr(10);
    txtwcf.SetFocus;
    exit;
  end;

  if  TryStrToInt(txtport.Text, i) then
  begin
    if (ComboBox1.Text = '') or (txtport.Text = '') then
    begin
      Showmessage('请选择正确的IP和端口!');
      ComboBox1.ItemIndex := 0;
      txtport.Text := inttostr(10000);
      exit;
    end;
  end else
  begin
    Showmessage('请选择正确的IP和端口!');
    ComboBox1.ItemIndex := 0;
    txtport.Text := inttostr(10000);
    exit;
  end;
  
  Bool := false;
  count := 0;

  if (schoolin1.text = '') and (schoolout1.text = '') and (schoolty1.text = '') and (schoolin2.text = '') and (schoolout2.text = '') and (schoolty2.text = '') and (txtshin.text = '') and (txtshout.text = '') then
    Bool := true;    //机号所填全为空,则不进行下面的机号重复校验

  if not Bool then     //判断机号是否重复
  begin
    if RightStr(schoolin1.text, 1) <> '' then devidstr := devidstr + removedo(schoolin1.text, ',');
    if RightStr(schoolout1.text, 1) <> '' then devidstr := devidstr + removedo(schoolout1.text, ',') + ',';
    if RightStr(schoolty1.text, 1) <> '' then devidstr := devidstr + removedo(schoolty1.text, ',') + ',';
    if RightStr(schoolin2.text, 1) <> '' then devidstr := devidstr + removedo(schoolin2.text, ',') + ',';
    if RightStr(schoolout2.text, 1) <> '' then devidstr := devidstr + removedo(schoolout2.text, ',') + ',';
    if RightStr(schoolty2.text, 1) <> '' then devidstr := devidstr + removedo(schoolty2.text, ',') + ',';
    if RightStr(txtshin.text, 1) <> '' then devidstr := devidstr + removedo(txtshin.text, ',') + ',';
    if RightStr(txtshout.text, 1) <> '' then devidstr := devidstr + removedo(txtshout.text, ',') + ',';
    if check(devidstr) then
    begin
      devidstr := removedo(devidstr, ',');
      try
      begin
        checkdevidarr := TStringList.Create;
        checkdevidarr.CommaText := devidstr;
        for i := 0 to checkdevidarr.Count - 1 do
        begin
          for j := 0 to checkdevidarr.Count - 1 do
          begin
            if checkdevidarr[i] = checkdevidarr[j] then
              Inc(count);
          end;
          if count >=2 then
          begin
            showmessage('设备号为: ' + checkdevidarr[i] + ' 的机号重复');
            exit;
          end;
          count := 0;
        end;
      end;
      finally
        freeandnil(checkdevidarr);
        devidstr := '';
      end;
    end else
    begin
      showmessage('对不起,在您所设置的机号中含有非法字符!');
      exit;
    end;
  end;

  devidArr := Tstringlist.Create;

  if schoolin1.Text <> '' then setdevid(schoolin1.Text, txtschoolno.text, '11', ',');
  if schoolout1.Text <> '' then setdevid(schoolout1.Text, txtschoolno.text, '21', ',');
  if schoolty1.Text <> '' then setdevid(schoolty1.Text, txtschoolno.text, '31', ',');
  if txtshin.Text <> '' then setdevid(txtshin.Text, txtschoolno.text, '13', ',');
  if txtshout.Text <> '' then setdevid(txtshout.Text, txtschoolno.text, '23', ',');
  if schoolin2.Text <> '' then setdevid(schoolin2.Text, txtschoolno.text, '12', ',');
  if schoolout2.Text <> '' then setdevid(schoolout2.Text, txtschoolno.text, '22', ',');
  if schoolty2.Text <> '' then setdevid(schoolty2.Text, txtschoolno.text, '32', ',');
  inifile.WriteString('schoolno', 'value', txtschoolno.Text);
  inifile.WriteString('COM', 'value', RightStr(ComboBox2.Text, 1));
  inifile.WriteString('Card.Interval','value',txtcf.Text);
  inifile.WriteString('Upload.Interval','value',txtwcf.Text);
  inifile.WriteString('IP','value',ComboBox1.Text);
  inifile.WriteString('PORT','value',txtport.Text);
  inifile.WriteString('schoolin1','value',removedo(schoolin1.Text,','));
  inifile.WriteString('schoolout1','value',removedo(schoolout1.Text,','));
  inifile.WriteString('schoolty1','value',removedo(schoolty1.Text,','));
  inifile.WriteString('txtshin','value',removedo(txtshin.Text,','));
  inifile.WriteString('txtshout','value',removedo(txtshout.Text,','));
  inifile.WriteString('schoolin2','value',removedo(schoolin2.Text,','));
  inifile.WriteString('schoolout2','value',removedo(schoolout2.Text,','));
  inifile.WriteString('schoolty2','value',removedo(schoolty2.Text,','));
  inifile.WriteString('SendCount','value', '20');                //上发数据量
  inifile.WriteString('Send.Interval', 'value', '10000');        //上发时间间隔
  inifile.WriteString('Road.Interval','value', '10000');         //自动采集数据时间间隔(毫秒)
  inifile.WriteString('Count','value','20');                     //每多少条保存进数据库
  inifile.WriteString('Sleep','value', '0');                   //读数据休息时间
  inifile.WriteString('CheckState','value','2000');              //检测ISWORK的状态
  inifile.WriteString('conn.interval','value','60');             //十分钟连接一次远程
  inifile.WriteString('Style','value','T');                      //存数据模式,默认为 单条

//  Reg := TRegistry.Create;
//  try
//  begin
//    Reg.RootKey := HKEY_LOCAL_MACHINE;
//    Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False);
    if CheckBox1.Checked then
    begin
//      Reg.WriteString('Catcher', Paramstr(0));
      inifile.WriteString('autostart','value','T');
    end else
//      Reg.DeleteValue('Catcher');
      inifile.WriteString('autostart','value','F');
//  end;
//  finally
//    Reg.CloseKey;
//    Reg.Free;
//  end;
  
  if inifile.ReadString('check1', 'value', '') = '' then
  begin
    showmessage('为保证程序正常运行,请在下面弹出的出入校对话框中,对出入校时间段进行设置!');
    self.Hide;
    Form1.Show;
    exit;
  end;

  for i := 0 to devidArr.Count - 1 do
  begin
    devidstr := devidstr + devidArr[i] + ',';
  end;

  devidstr := removedo(devidstr, ',');
  inifile.WriteString('devids','value',devidstr);

  showmessage('在您下次启动程序的时候设置生效!!!');
  Close;
  Form4.Show;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);
var
  fn: string;
begin
  fn := ExtractFilePath(Paramstr(0));
  fn := fn + 'values.ini';
  if not FileExists(fn) then
  begin
    showmessage('配置文件尚未生成,请您认真设置!');
    exit;
  end else begin
    Close;
    Form4.Show;
  end;
end;

function TForm2.check(devidstr: string): boolean;
var
  i: integer;
begin
  result :=False;
  for i:=1 to length(devidstr) do
  begin
      if devidstr[i] in ['0'..'9',','] then
        result :=True
      else
      begin
        result :=False;
        exit;
      end;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
//var
//  Reg: TRegistry;
begin
//  Reg := TRegistry.Create;
//  try
//  begin
//    Reg.RootKey := HKEY_LOCAL_MACHINE;
//    Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False);
//    if Reg.ValueExists('Catcher') then
//    begin
//      if Reg.ReadString('Catcher') = Paramstr(0) then
      if inifile.ReadString('autostart','value', '') <> '' then
      begin
        if inifile.ReadString('autostart','value', '') = 'T' then
          self.CheckBox1.Checked := True
        else
          self.CheckBox1.Checked := False;
      end;
//    end;
//  end;
//  finally
//    Reg.CloseKey;
//    Reg.Free;
//  end;

  ComboBox2.Text := inifile.ReadString('COM', 'value', '');
  if inifile.ReadString('IP','value', '') <> '' then ComboBox1.Text := inifile.ReadString('IP','value', '');
  if inifile.ReadString('schoolno', 'value', '') <> '' then txtschoolno.Text := inifile.ReadString('schoolno', 'value', '');
  if inifile.ReadString('Card.Interval', 'value', '') <> '' then txtcf.Text := inifile.ReadString('Card.Interval','value', '');
  if inifile.ReadString('Upload.Interval', 'value', '') <> '' then txtwcf.Text := inifile.ReadString('Upload.Interval','value', '');
  if inifile.ReadString('PORT', 'value', '') <> '' then txtport.Text := inifile.ReadString('PORT','value', '');
  schoolin1.Text := inifile.ReadString('schoolin1','value', '');
  schoolout1.Text := inifile.ReadString('schoolout1','value', '');
  schoolty1.Text := inifile.ReadString('schoolty1','value', '');
  txtshin.Text := inifile.ReadString('txtshin','value', '');
  txtshout.Text := inifile.ReadString('txtshout','value', '');
  schoolin2.Text := inifile.ReadString('schoolin2','value', '');
  schoolout2.Text := inifile.ReadString('schoolout2','value', '');
  schoolty2.Text := inifile.ReadString('schoolty2','value', '');

  SetWindowLong(self.Handle, GWL_STYLE, WS_CAPTION);

end;

function TForm2.removedo(str: string; dostr: string): string;
begin
  if RightStr(str,1) = dostr then
    result := copy(str, 1, length(str)-1)
  else
    result := str;
end;

procedure TForm2.setdevid(tmpstr: string; schoolno:string; front: string; dostr: string);
var
  tempstring: TStringlist;
  tempdevid, NumStr, devid: string;
  i: integer;
begin
  NumStr := '00000';
  tempdevid := removedo(tmpstr, ',');
  tempstring := TStringlist.Create;
  try
  begin
    tempstring.Delimiter := ',';
    tempstring.CommaText := tempdevid;
    for i := 0 to tempstring.Count - 1 do
    begin
      devid := Copy(NumStr,1,5 - Length(tempstring[i])) + tempstring[i];
      devidArr.Add(front + schoolno + devid);
    end;
  end;
  finally
    freeandnil(tempstring);
  end;
end;

end.

⌨️ 快捷键说明

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