📄 barr.cpp
字号:
//手工开闸
#include <vcl.h>
#pragma hdrstop
#include "Barr.h"
#include "dynamic.h"
#include "dido.h"
#include "option.h"
#include "CBuilder.h"
#include "source.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置监控文本
static int SetEditText(TBarrForm *te);
//设置监控车道
static int SetEditRoadway(TBarrForm *te,int nMode);
//---------------------------------------------------------------------------
__fastcall TBarrForm::TBarrForm(TComponent* Owner)
: TForm(Owner)
{
m_pHead = new TList;
m_nDone=0; m_nMode=0;
}
void __fastcall TBarrForm::FormDestroy(TObject *Sender)
{
delete m_pHead;
m_pHead=NULL;
}
//监控进出车道道闸
int SetRoadBarrState(TObject *Owner)
{
TBarrForm *se;
int rc;
rc=FALSE;
se = new TBarrForm((TComponent*)Owner);
if(se!=NULL){
SetEditText(se);
se->ShowModal();
rc=se->m_nDone;
delete se;
}
return(rc);
}
//监控进出车道报警
int SetRoadWarnState(TObject *Owner)
{
TBarrForm *se;
int rc;
rc=FALSE;
se = new TBarrForm((TComponent*)Owner);
if(se!=NULL){
se->m_nMode=1;
SetEditText(se);
se->ShowModal();
rc=se->m_nDone;
delete se;
}
return(rc);
}
//设置监控文本
int SetEditText(TBarrForm *te)
{
static char *pszTitle[]=
{ "手动监控车道道闸", "手动监控车道报警"};
static char *pszNote[]={
"注: 上述检查框中有\"√\", 表示该车道上的道闸抬起, 否则为落下",
"注: 上述检查框中有\"√\", 表示该车道上正在报警, 否则为解除报警"
};
int nMode;
nMode = te->m_nMode;
SetEditRoadway(te,nMode);
if(nMode!=0)nMode=1;
te->SetTextBuf(pszTitle[nMode]);
te->m_NoteLabel->SetTextBuf(pszNote[nMode]);
return(TRUE);
}
//设置监控车道
int SetEditRoadway(TBarrForm *te,int nMode)
{
void *pHead,*pCur;
void *pRoadList,*pCRList;
ROADWAY *pRoad;
TCheckBox *pChild;
int i,j,rc;
char szBuf[50];
pHead = te->m_pHead;
pRoadList = GetRoadwayList();
pCRList = GetControlerList();
for(i=0;;i++){//分类车道
pCur = GetDotOnTList(pRoadList,i);
if(pCur==NULL)break;
pRoad = LookRoadway(pCur);
pCur = GetCRWithRoadNo(pCRList,pRoad->nNo);
rc=IsValidControler(pCur);
SetRoadActiveFlag(pRoad,rc);
if(rc==FALSE)//不活动的车道,则添加在链表末尾
AddDotToTList(pHead,pRoad);
else{//活动的车道,则插入链表中
for(j=0;;j++){
pCur = GetDotOnTList(pHead,j);
if(pCur==NULL || GetRoadActiveFlag(LookRoadway(pCur))==FALSE)
break;
}
InsertDotToTList(pHead,pRoad,j);
}
}
//设置子窗口状态
SetChildState(te,100,200,SW_HIDE);
for(i=0;;i++){//显示车道
pCur = GetDotOnTList(pHead,i);
if(pCur==NULL)break;
pChild = dynamic_cast<TCheckBox *>(GetChildComponent(te,i+101));
if(pChild!=NULL){
pRoad = LookRoadway(pCur);
GetRoadwayNameText(szBuf,pRoad);
rc=GetRoadActiveFlag(pRoad);
pChild->SetTextBuf(szBuf);
pChild->Enabled=rc;
pChild->Visible=TRUE;
if(nMode==1){//监控报警
rc=GetRoadWarnFlag(pRoad);
pChild->Checked=rc;
}
}
}
return(i);
}
void __fastcall TBarrForm::m_BarrCBoxClick(TObject *Sender)
{
void *pCur;
ROADWAY *pRoad;
CONTROLER *pCR;
int nTag,nChecked,nState;
if(Showing==FALSE)return; //还未显示
nTag=((TCheckBox *)Sender)->Tag;
nChecked=((TCheckBox *)Sender)->Checked;
pCur = GetDotOnTList(m_pHead,nTag-101);
pRoad = LookRoadway(pCur);
if(pRoad!=NULL)
pCR = (CONTROLER *)GetCRWithRoadNo(GetControlerList(),pRoad->nNo);
else pCR=NULL;
if(pCR!=NULL){
if(m_nMode==0){//监控道闸
if(nChecked)nState = PARK_BARRUP; //人工抬闸
else nState = PARK_BARRDOWN; //人工落闸
}
else if(m_nMode==1){//监控报警
if(nChecked)nState = PARK_WARNON; //开始警报
else nState = PARK_WARNOFF; //解除警报
}
else nState=0;
SendCommandToSource(pCR,nState,(long)pRoad);//答复读取刷卡数据
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -