📄 deviceinfoinputunit.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 + -