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

📄 barr.cpp

📁 停车场用
💻 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 + -