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

📄 deviceinfoinputunit.cpp

📁 指纹门禁机管理系统
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "DeviceInfoInputUnit.h"
#include "EventEngineUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "BaseInputUnit"
#pragma resource "*.dfm"
TDeviceInfoInputFrm *DeviceInfoInputFrm;
//---------------------------------------------------------------------------
__fastcall TDeviceInfoInputFrm::TDeviceInfoInputFrm(TComponent* Owner)
    : TBaseDataInputFrm(Owner)
{

}
//---------------------------------------------------------------------------
void TDeviceInfoInputFrm::GetDeviceInfo(DeviceInfo_T& oDeviceInfo)
{
   oDeviceInfo = aDeviceInfo;
}
//---------------------------------------------------------------------------

void TDeviceInfoInputFrm::SetOperateMode(OperateMode_T iMode)
{
    OperateMode = iMode;
}
//---------------------------------------------------------------------------
void TDeviceInfoInputFrm::SetDeviceInfo(DeviceInfo_T iDeviceInfo)
{
   aDeviceInfo = iDeviceInfo;
}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::FormCreate(TObject *Sender)
{
   edtDeviceID->OnChange = OnNumOnlyEditChange;

   edtIP4_1->OnChange = OnNumOnlyEditChange;
   edtIP4_2->OnChange = OnNumOnlyEditChange;
   edtIP4_3->OnChange = OnNumOnlyEditChange;
   edtIP4_4->OnChange = OnNumOnlyEditChange;
   edtPort->OnChange = OnNumOnlyEditChange;
   edtLock->OnChange = OnNumOnlyEditChange;

}
//---------------------------------------------------------------------------
void TDeviceInfoInputFrm::ShowParamTab(DeviceType_T iType)
{
   tsUSB->TabVisible = (iType == dtUSB);
   tsUart->TabVisible = (iType == dtCOM);
   tsIP->TabVisible = (iType == dtIP);
}
//---------------------------------------------------------------------------

void TDeviceInfoInputFrm::SetDeviceInfoToUI()
{
  edtDeviceID->Text = aDeviceInfo.DeviceID;
  edtDeviceName->Text = AnsiString(aDeviceInfo.DeviceName);

  ShowParamTab(aDeviceInfo.DeviceType);

  switch(aDeviceInfo.DeviceType)
  {
    case dtCOM:
    {
      rgDeviceType->ItemIndex = 1;
      cbCOMID->ItemIndex = aDeviceInfo.DeviceParams.UartParam.COMID - 1;
      cbBaud->ItemIndex = cbBaud->Items->IndexOf(aDeviceInfo.DeviceParams.UartParam.Baud);
    }break;
    case dtUSB: rgDeviceType->ItemIndex = 0;break;
    case dtIP:
    {
      rgDeviceType->ItemIndex = 2;
      edtIP4_1->Text = aDeviceInfo.DeviceParams.IPParam.IPs[0];
      edtIP4_2->Text = aDeviceInfo.DeviceParams.IPParam.IPs[1];
      edtIP4_3->Text = aDeviceInfo.DeviceParams.IPParam.IPs[2];
      edtIP4_4->Text = aDeviceInfo.DeviceParams.IPParam.IPs[3];
      edtPort->Text = aDeviceInfo.DeviceParams.IPParam.Port;
    }break;
  }
  edtCaption->Text = aDeviceInfo.DeviceCaption;
  edtLock->Text = aDeviceInfo.AutoLockSec;
  cbStatus->Checked = aDeviceInfo.DeviceStatus == dsRightStatus;
  switch(rgMode->ItemIndex)
  {
    case 0:aDeviceInfo.DeviceMode = dmNormalMode;break;
    case 1:aDeviceInfo.DeviceMode = dmLongOpenMode;break;
    case 2:aDeviceInfo.DeviceMode = dmLongCloseMode;break;
  }
  edtDesc->Text = aDeviceInfo.DeviceDesc;

}
//---------------------------------------------------------------------------
bool TDeviceInfoInputFrm::CheckInput()
{
   //检查输入
   AnsiString lDeviceID;
   lDeviceID = edtDeviceID->Text.Trim();
   if (lDeviceID.IsEmpty())
   {
      Application->MessageBoxA("请输入设备编号!","提示信息",MB_OK + MB_ICONWARNING);
      edtDeviceID->SetFocus();
      return false;
   }
   AnsiString lDeviceName = edtDeviceName->Text.Trim();
   if (lDeviceName.IsEmpty())
   {
      Application->MessageBoxA("请输入设备名称!","提示信息",MB_OK + MB_ICONWARNING);
      edtDeviceName->SetFocus();
      return false;
   }
   if (rgDeviceType->ItemIndex == 2)
   {
      if (edtIP4_1->Text.IsEmpty()||edtIP4_2->Text.IsEmpty()||edtIP4_3->Text.IsEmpty()||edtIP4_4->Text.IsEmpty())
      {
         Application->MessageBoxA("IP地址不能为空!","提示信息",MB_OK + MB_ICONWARNING);
         edtIP4_1->SetFocus();
         return false;
      }
      if (edtPort->Text.IsEmpty())
      {
         Application->MessageBoxA("端口号不能为空!","提示信息",MB_OK + MB_ICONWARNING);
         edtPort->SetFocus();
         return false;
      }
   }

   if (edtLock->Text.ToInt() <= 1)
   {
      Application->MessageBoxA("自动锁时间不能小于1!","提示信息",MB_OK + MB_ICONWARNING);
      edtLock->SetFocus();
      return false;
   }
   if (edtLock->Text.ToInt() > 255)
   {
      Application->MessageBoxA("自动锁时间不能大于255!","提示信息",MB_OK + MB_ICONWARNING);
      edtLock->SetFocus();
      return false;
   }
   return true;
}
//---------------------------------------------------------------------------
bool TDeviceInfoInputFrm::GetDeviceInfoFromUI()
{
  if (!CheckInput())
     return false;

  aDeviceInfo.DeviceID = edtDeviceID->Text.ToInt();
  strcpy(aDeviceInfo.DeviceName,edtDeviceName->Text.c_str());

  switch(rgDeviceType->ItemIndex)
  {
    case 0:aDeviceInfo.DeviceType = dtUSB;break;
    case 1:
    {
        aDeviceInfo.DeviceType = dtCOM;
        aDeviceInfo.DeviceParams.UartParam.COMID = cbCOMID->ItemIndex+1;
        aDeviceInfo.DeviceParams.UartParam.Baud = cbBaud->Text.ToInt();
    }break;
    case 2:
    {
       aDeviceInfo.DeviceType = dtIP;
       aDeviceInfo.DeviceParams.IPParam.IPs[0] = edtIP4_1->Text.ToInt();
       aDeviceInfo.DeviceParams.IPParam.IPs[1] = edtIP4_2->Text.ToInt();
       aDeviceInfo.DeviceParams.IPParam.IPs[2] = edtIP4_3->Text.ToInt();
       aDeviceInfo.DeviceParams.IPParam.IPs[3] = edtIP4_4->Text.ToInt();
       aDeviceInfo.DeviceParams.IPParam.Port = edtPort->Text.ToInt();
    }break;
  }
  strcpy(aDeviceInfo.DeviceCaption,edtCaption->Text.c_str());
  aDeviceInfo.AutoLockSec = edtLock->Text.ToInt();
  if (cbStatus->Checked)
     aDeviceInfo.DeviceStatus = dsRightStatus;
  else
     aDeviceInfo.DeviceStatus = dsOutStatus;
  switch(rgMode->ItemIndex)
  {
    case 0:aDeviceInfo.DeviceMode = dmNormalMode;break;
    case 1:aDeviceInfo.DeviceMode = dmLongOpenMode;break;
    case 2:aDeviceInfo.DeviceMode = dmLongCloseMode;break;
  }
  strcpy(aDeviceInfo.DeviceDesc,edtDesc->Text.c_str());
  return true;
}
//---------------------------------------------------------------------------
void TDeviceInfoInputFrm::SetUIEnabled(bool iEnabled)
{
   edtDeviceID->Enabled = iEnabled;
   edtDeviceName->Enabled = iEnabled;
   rgDeviceType->Enabled = iEnabled;
   pcParam->Enabled = iEnabled;
   edtCaption->Enabled = iEnabled;
   edtLock->Enabled = iEnabled;
   cbStatus->Enabled = iEnabled;
   rgMode->Enabled = iEnabled;
   edtDesc->Enabled = iEnabled;
}
//---------------------------------------------------------------------------

void TDeviceInfoInputFrm::InitShow()
{
    switch(OperateMode)
    {
     case omAdd:     //新增设备
     {
       edtDeviceID->Text = "";
       edtDeviceName->Text = "";
       rgDeviceType->ItemIndex = 0;
       ShowParamTab(dtUSB);
       edtCaption->Text = "MIAXIS";
       edtLock->Text = 8;
       cbStatus->Checked = true;
       rgMode->ItemIndex = 0;
       edtDesc->Text = "";

       bbtnInitDevice->Visible = false;
       bbtnRead->Visible = false;
     }break;
     case omEdit:   //修改设备
     {
        SetDeviceInfoToUI();
        edtDeviceID->Enabled = false;

        bbtnInitDevice->Visible = true;
        bbtnRead->Visible = true;
     }break;
     case omView:   //查看设备
     {
       SetDeviceInfoToUI();
       SetUIEnabled(false);
       bbtnOK->Visible = false;

       bbtnInitDevice->Visible = false;
       bbtnRead->Visible = false;
     }break;
    }
}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::FormShow(TObject *Sender)
{
   InitShow();
}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::bbtnOKClick(TObject *Sender)
{
   TBaseDataInputFrm::bbtnOKClick(Sender);

   int lRV;
   AnsiString lMsg;

   switch(OperateMode)
   {
     case omAdd:   //新增模式
     {
        if (GetDeviceInfoFromUI())
        {
           //判断该设备编号是否已存在
           if (aDBAccess.IsExistsDeviceInfo(aDeviceInfo.DeviceID))
           {
             lMsg = "新增时编号:" + AnsiString(aDeviceInfo.DeviceID) + "的设备已经存在!";
             Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONWARNING);
             edtDeviceID->SetFocus();
             return;
           }
           lRV = aDBAccess.InsertDeviceInfo(aDeviceInfo);
           if (lRV == OK)
           {
             Application->MessageBoxA("新增设备信息成功!","提示信息",MB_OK + MB_ICONINFORMATION);
             Close();
           }
           else
             Application->MessageBoxA("新增设备信息失败!","提示信息",MB_OK + MB_ICONERROR);
        }
     }break;
     case omEdit:  //修改模式
     {
        if (GetDeviceInfoFromUI())
        {
          lRV = aDBAccess.UpdateDeviceInfo(aDeviceInfo.DeviceID,aDeviceInfo);
           if (lRV == OK)
           {
             Application->MessageBoxA("修改设备信息成功!","提示信息",MB_OK + MB_ICONINFORMATION);
             Close();
           }
           else
             Application->MessageBoxA("修改设备信息失败!","提示信息",MB_OK + MB_ICONERROR);
        }

     }break;
   }

}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::rgDeviceTypeClick(TObject *Sender)
{
   tsUSB->TabVisible = rgDeviceType->ItemIndex == 0;
   tsUart->TabVisible = rgDeviceType->ItemIndex == 1;
   tsIP->TabVisible = rgDeviceType->ItemIndex == 2;
}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::bbtnInitDeviceClick(TObject *Sender)
{
   if (edtLock->Text.ToInt() <= 1)
   {
      Application->MessageBoxA("自动锁时间不能小于1!","提示信息",MB_OK + MB_ICONWARNING);
      edtLock->SetFocus();
      return;
   }
   if (edtLock->Text.ToInt() > 255)
   {
      Application->MessageBoxA("自动锁时间不能大于255!","提示信息",MB_OK + MB_ICONWARNING);
      edtLock->SetFocus();
      return;
   }
   if (Application->MessageBoxA("您要对设备进行初始化吗?该操作将清除设备内所有数据!!!","提示信息",MB_YESNO + MB_ICONQUESTION) == ID_NO)
     return;
   DeviceInfo_T lDeviceInfo;
   int lDeviceID = edtDeviceID->Text.ToInt();
   int lRV = aDBAccess.GetDeviceInfo(lDeviceID,lDeviceInfo);
   if (lRV == OK)
   {
      TDeviceAccess *pDeviceAccess = GetDeviceAccessInstance();
      TEventEngine* pEventEngine = GetEventEngineInstance();
      int lHandle = pEventEngine->GetDeviceHandle(lDeviceID);
      if (lHandle == 0)
      {
         Application->MessageBoxA("连接设备失败!","提示信息",MB_OK + MB_ICONERROR);
         return;
      }

      //清除设备用户数据
      lRV = pDeviceAccess->ClearUser(lHandle);
      if (lRV != OK)
      {
         Application->MessageBoxA("清除设备用户数据失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }
      //设置设备标题
      AnsiString lCaption = lDeviceInfo.DeviceCaption;
      lRV = pDeviceAccess->SetCaption(lHandle,lDeviceInfo.DeviceCaption,lCaption.Length());
      if (lRV != OK)
      {
         Application->MessageBoxA("设置设备标题失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }

      //设置设备自动锁时间
      lRV = pDeviceAccess->SetAutoLock(lHandle,lDeviceInfo.AutoLockSec);
      if (lRV != OK)
      {
         Application->MessageBoxA("设置设备自动锁时间失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }

      //设置设备工作模式
      lRV = pDeviceAccess->SetDoorMode(lHandle,lDeviceInfo.DeviceMode);
      if (lRV != OK)
      {
         Application->MessageBoxA("设置设备工作模式失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }

     if (lRV == OK)
     {
        pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
        Application->MessageBoxA("初始化设备成功!","提示信息",MB_OK + MB_ICONINFORMATION);
     }
   }
   else
   {
      Application->MessageBoxA("获取设备信息失败!","提示信息",MB_OK + MB_ICONERROR);
   }

}
//---------------------------------------------------------------------------

void __fastcall TDeviceInfoInputFrm::bbtnReadClick(TObject *Sender)
{
   DeviceInfo_T lDeviceInfo;
   int lDeviceID = edtDeviceID->Text.ToInt();
   int lRV = aDBAccess.GetDeviceInfo(lDeviceID,lDeviceInfo);
   if (lRV == OK)
   {
      TDeviceAccess *pDeviceAccess = GetDeviceAccessInstance();
      TEventEngine* pEventEngine = GetEventEngineInstance();
      int lHandle = pEventEngine->GetDeviceHandle(lDeviceID);
      if (lHandle == OK)
      {
         Application->MessageBoxA("连接设备失败!","提示信息",MB_OK + MB_ICONERROR);
         return;
      }

      int lSecond;
      lRV = pDeviceAccess->GetAutoLock(lHandle,lSecond);
      if(lRV != OK)
      {
         Application->MessageBoxA("读取自动锁失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }
      edtLock->Text = lSecond;

      int lMode;
      lRV = pDeviceAccess->GetDoorMode(lHandle,lMode);
      if(lRV != OK)
      {
         Application->MessageBoxA("读取门禁工作模式失败!","提示信息",MB_OK + MB_ICONERROR);
         pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
         return;
      }
      if(lMode == dmNormalMode)
         rgMode->ItemIndex = 0;
      if(lMode == dmLongOpenMode)
         rgMode->ItemIndex = 1;
      if(lMode == dmLongCloseMode)
         rgMode->ItemIndex = 2;

      pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
   }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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