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

📄 roadway.cpp

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