📄 roadway.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Roadway.h"
#include "dido.h"
#include "editRoadway.h"
#include "gridtool.h"
#include "option.h"
#include "param.h"
#include "dynamic.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置显示内容
static void SetEditText(TRoadwayForm *te);
//设置Grid内容
static void SetRoadwayGridText(TStringGrid *pGrid,void *pRoadway);
//---------------------------------------------------------------------------
//设置假日格栅宽度
static void SetRoadwayGridWidth(TStringGrid *pGrid);
//---------------------------------------------------------------------------
__fastcall TRoadwayForm::TRoadwayForm(TComponent* Owner)
: TForm(Owner)
{
m_pHead=new TList;
}
//---------------------------------------------------------------------------
void __fastcall TRoadwayForm::FormDestroy(TObject *Sender)
{
DelTList(m_pHead);
delete m_pHead;
}
//---------------------------------------------------------------------------
//设置进出车道
int SetRoadway(TObject *Owner)
{
TRoadwayForm *se;
int rc;
rc=FALSE;
se = new TRoadwayForm((TComponent*)Owner);
if(se!=NULL){
SetEditText(se);
se->ShowModal();
rc=se->m_nDone;
delete se;
}
return(rc);
}
//设置显示内容
void SetEditText(TRoadwayForm *te)
{
void *pList;
int n;
pList = te->m_pHead;
//拷贝TList链,nSize:节点内容尺寸
CopyTList(pList,GetRoadwayList(),sizeof(ROADWAY));
//设置格栅宽度
SetRoadwayGridWidth(te->m_TextGrid);
SetRoadwayGridText(te->m_TextGrid,pList);
if(LookCount(pList)<=0)n=FALSE;
else n=TRUE;
te->m_EditBut->Enabled=n;
te->m_DelBut->Enabled=n;
te->m_SaveBut->Enabled=FALSE;
}
//设置Grid内容
void SetRoadwayGridText(TStringGrid *pGrid,void *pHead)
{
void *pCur;
ROADWAY *a;
TStringList *t;
int i,n;
char szBuf[50],*p;
ClearGridAllText(pGrid,FALSE);
try{ t = new TStringList;}
catch(...){return;}
for(i=0;;i++){
pCur = GetDotOnTList(pHead,i);
if(pCur==NULL)break;
a = LookRoadway(pCur);
t->Clear();
wsprintf(szBuf,"%02d",i+1);
t->Add(szBuf);
t->Add(a->szName);//描述
p=GetRoadwayType(a->nType);//车道类型:进入、外出、混合
t->Add(p);
wsprintf(szBuf,"%01d",a->nGroup); //车道组号
t->Add(szBuf);
p=GetAPBType(a->nAPB);//反潜回阶层
t->Add(p);
wsprintf(szBuf,"%01d",a->nReaderID);//读卡机ID
t->Add(szBuf);
p=GetReaderType(a->nReaderType);//读卡机类型
t->Add(p);
//显示Grid的nIndex行内容
DispGridText(pGrid,t,i);
}
delete t;
}
//设置假日格栅宽度
void SetRoadwayGridWidth(TStringGrid *pGrid)
{
static char *pszTitle[]={"No.","车道名称","车道类型",
"车道组号","APB阶层","读卡机通讯ID","读卡机类型"};
int x[10];
int i,m,n,nWidth;
nWidth = pGrid->ClientRect.Width();
n = pGrid->ColCount;
ZeroMemory(x,sizeof(x));
x[0]=25; x[2]=x[3]=x[4]=55;
for(i=m=0;i<n;i++)
if(x[i]!=0){nWidth-=x[i]; m++;}
if(n>m) nWidth = (nWidth-n)/(n-m);
for(i=0;i<n;i++)
if(x[i]==0)x[i]=nWidth;
for(i=0;i<n;i++){
pGrid->ColWidths[i]=x[i];
pGrid->Cells[i][0]=pszTitle[i];
}
}
void __fastcall TRoadwayForm::m_TextGridDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(State.Contains(gdFixed))//显示格栅标题
DispGridTitle(Sender,ACol,ARow,Rect,clRed);
else if(ACol>1)//设置格栅文字颜色,文字居中
SetGridTextColor(Sender,ACol,ARow,Rect,-1,DT_CENTER);
}
//---------------------------------------------------------------------------
void __fastcall TRoadwayForm::m_TextGridSelectCell(TObject *Sender,
int ACol, int ARow, bool &CanSelect)
{
int rc,n;
rc=TRUE;
n = LookCount(m_pHead);
if(ARow>n && ARow>1)rc=FALSE;
CanSelect=rc;
}
//---------------------------------------------------------------------------
void __fastcall TRoadwayForm::m_AddButClick(TObject *Sender)
{
int nIndex,rc;
rc=((TControl *)Sender)->Tag-100;
nIndex= m_TextGrid->Row-1;
nIndex = ReworkRoadway(this,m_pHead,nIndex,rc);//添加/修改车道
if(nIndex>=0){
SetRoadwayGridText(m_TextGrid,m_pHead);
m_TextGrid->Row=nIndex+1;
m_EditBut->Enabled=TRUE;
m_SaveBut->Enabled=TRUE;
m_DelBut->Enabled=TRUE;
}
}
void __fastcall TRoadwayForm::m_DelButClick(TObject *Sender)
{
static char
pszText[]="是否真的删除\n\n类型为\"%s\" 名称为\"%d\"的车道?";
void *p,*pHead;
ROADWAY *a;
char szBuf[100];
int rc,nIndex,nCount;
nIndex= m_TextGrid->Row-1;
pHead = m_pHead;
p = GetDotOnTList(pHead,nIndex);
if(p!=NULL){
a = LookRoadway(p);
wsprintf(szBuf,pszText,GetRoadwayType(a->nType),a->szName);
rc= Application->MessageBox(szBuf,GetMainTitle(),
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
if(rc==IDYES){
DelDotOnTList(pHead,nIndex);
nCount = LookCount(pHead);
if(nIndex>=nCount)nIndex=nCount-1;
if(nIndex<0)nIndex=0;
m_TextGrid->Row=nIndex+1;
SetRoadwayGridText(m_TextGrid,pHead);//删除最后行显示
if(nCount<=0)m_DelBut->Enabled=FALSE;
m_SaveBut->Enabled=TRUE;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TRoadwayForm::m_SaveButClick(TObject *Sender)
{
int rc;
SaveAllRoadway(m_pHead);
CopyTList(GetRoadwayList(),m_pHead,sizeof(ROADWAY));
m_SaveBut->Enabled=FALSE;
m_nDone=TRUE;
}
void __fastcall TRoadwayForm::m_CloseButClick(TObject *Sender)
{
int rc;
rc= m_SaveBut->Enabled;
if(rc!=FALSE){
rc=AskSaveData();//请求保存数据
if(rc) m_SaveButClick(Sender);
}
ModalResult=IDOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -