?? 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 + -