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

📄 editroadway.cpp

📁 停车场用
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "EditRoadway.h"
#include "dido.h"
#include "option.h"
#include "Dynamic.h"
#include "CBuilder.h"
#include "Vtl.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置编辑内容
static void SetEditText(TEditRoadwayForm *te,void *pHead,int nIndex,int nMode);
//获取编辑内容
static int GetEditText(TEditRoadwayForm *te,void *pHead,int nIndex);
//获取相同地址(-1=>无,0=>原来,1=>其它记录)
static int GetOtherRoadwayOnTList(void *pHead,ROADWAY *Sour,int nOld);
//获取编辑内容
static void GetEditUnit(TEditRoadwayForm *te,ROADWAY *a);
//设置车道组的组合框
static void SetGroupComBox(TComboBox *pBox,int n);
//设置类型组合框
static void SetTypeComBox(TComboBox *pBox,int n);
//设置APB组合框
static void SetAPBComBox(TComboBox *pBox,int n);
//设置ReaderType组合框
static void SetReaderTypeComBox(TComboBox *pBox,int n);
//设置停车场组合框
static void SetParkComBox(TComboBox *pBox,int nParkNo);

//获取车道链表中最大的编号
static int GetMaxRoadNoOnList(void *pHead);

//设置LED网络节点
static void SetLEDNetText(TEditRoadwayForm *te,ROADWAY *pRoad);
//设置串行通讯端口
static void SetCommCoBox(TComboBox *pBox,DWORD nNetID);

//设置VideoType组合框
static void SetVideoTypeComBox(TComboBox *pBox,int nType);
//设置LEDType组合框
static void SetLEDTypeComBox(TComboBox *pBox,int nType);
//设置图片处理方式组合框
static void SetPhotoComBox(TComboBox *pBox,int nType);

//---------------------------------------------------------------------------
__fastcall TEditRoadwayForm::TEditRoadwayForm(TComponent* Owner)
  : TForm(Owner)
{
}
//添加修改模组
int ReworkRoadway(TComponent* Owner,void *pHead,int nIndex,int nMode)
 {
  TEditRoadwayForm *te;
  int rc;

  rc=-1;
  te = new TEditRoadwayForm(Owner);
  if(te!=NULL){
    SetEditText(te,pHead,nIndex,nMode);
    if(te->ShowModal()==IDOK)rc=te->m_Index;
    delete te;
   }
  return(rc);
 }
//设置编辑内容
void SetEditText(TEditRoadwayForm *te,void *pHead,int nIndex,int nMode)
 {
  ROADWAY a;
  char szBuf[30];
  int rc;

  te->m_pHead=pHead; te->m_Index=nIndex;
  rc=GetDotTextOnTList(pHead,nIndex,&a,sizeof(a));
  if(rc==0)a.nAPB=1; //默认APB为第一层

  te->m_NameEdit->SetTextBuf(a.szName);

  SetGroupComBox(te->m_GroupCoBox,a.nGroup);
  SetTypeComBox(te->m_TypeCoBox,a.nType);
  SetAPBComBox(te->m_APBCoBox,a.nAPB);
  SetReaderTypeComBox(te->m_ReaderTypeCoBox,a.nReaderType);
  SetParkComBox(te->m_ParkCoBox,a.nParkNo);

  SetLEDNetText(te,&a);//设置LED网络节点
  SetVideoTypeComBox(te->m_VideoTypeCoBox,a.nVideoType);
  SetLEDTypeComBox(te->m_LEDTypeCoBox,a.nLEDType);
  SetPhotoComBox(te->m_PhotoCoBox,a.nPhotoDeal);

  //设置整数值到子控制中
  SetIntToControl(te->m_ReaderIDEdit,a.nReaderID+1);
  SetIntToControl(te->m_VideoChanEdit,a.nVideoID+1);

  if(LookCount(pHead)<=0)nMode=0;
  if(nMode==0)//增加
     te->m_EditBut->Enabled=FALSE;
  else te->m_AddBut->Enabled=FALSE;//修改
 }
//获取编辑内容
void GetEditUnit(TEditRoadwayForm *te,ROADWAY *pRoad)
 {
  char szBuf[30];
  int n;

  te->m_NameEdit->GetTextBuf(pRoad->szName,sizeof(pRoad->szName));

  pRoad->nGroup = GetIntOnControl(te->m_GroupCoBox);
  pRoad->nType = GetIntOnControl(te->m_TypeCoBox);
  pRoad->nAPB = GetIntOnControl(te->m_APBCoBox);
  pRoad->nReaderType = GetIntOnControl(te->m_ReaderTypeCoBox);
  pRoad->nParkNo = GetIntOnControl(te->m_ParkCoBox);

  pRoad->nPhotoDeal=GetIntOnControl(te->m_PhotoCoBox);
  pRoad->nVideoType=GetIntOnControl(te->m_VideoTypeCoBox);
  pRoad->nLEDType=GetIntOnControl(te->m_LEDTypeCoBox);

  n=GetIntOnControl(te->m_ReaderIDEdit)-1;
  if(n<0)n=0;  pRoad->nReaderID=n;

  n=GetIntOnControl(te->m_VideoChanEdit)-1;
  if(n<0)n=0;  pRoad->nVideoID=n;

  //通讯网络
  n= te->m_CommNetRBox->Checked;
  if(n){//串行通讯
    pRoad->nLEDNetID = GetIntOnControl(te->m_CommCoBox);
    pRoad->nLEDIPPort=0;
   }
  else{//IP网络
    te->m_IPEdit->GetTextBuf(szBuf,sizeof(szBuf));
    pRoad->nLEDNetID= IPStrToDWORD(szBuf);
    pRoad->nLEDIPPort=GetIntOnControl(te->m_PortEdit);
   }
  SetRoadLEDIPNetFlag(pRoad,!n);
  if(pRoad->nVideoType==ROADVIDEO_NONE)//无图像卡
     pRoad->nPhotoDeal = ROADPHOTO_NONE; //不捕捉图片
 }
//设置LED网络节点
void SetLEDNetText(TEditRoadwayForm *te,ROADWAY *pRoad)
 {
  char szBuf[50];
  int n,nComm,nIP,nPort;

  n = GetRoadLEDIPNetFlag(pRoad);

  nPort=0; nComm=0; nIP=0;
  if(n==0){ //串行口
     nComm=pRoad->nLEDNetID;
     te->m_CommNetRBox->Checked=TRUE;
    }
  else{  //IP网
    nIP=pRoad->nLEDNetID; nPort=pRoad->nLEDIPPort;
    te->m_IPNetRBox->Checked=TRUE;
   }
  SetCommCoBox(te->m_CommCoBox,nComm);

  GetIPStr(szBuf,nIP);
  te->m_IPEdit->SetTextBuf(szBuf);
  wsprintf(szBuf,"%d",nPort);
  te->m_PortEdit->SetTextBuf(szBuf);

  te->m_CommNetRBoxClick(te->m_CommNetRBox);//选择网络输入框
 }
//设置串行通讯端口
void SetCommCoBox(TComboBox *pBox,DWORD nNetID)
 {
  int i,n;
  char *p,szBuf[30];

  pBox->Items->Clear();
  for(i=0;i<256;i++){
    p = GetCOMName(i);
    if(p==NULL)break;
    wsprintf(szBuf,"%d: %s",i,p);
    pBox->Items->Add(p);
   }
  if(nNetID>=256)n=0;
  else n = nNetID;
  pBox->ItemIndex=n;
 }
//设置组号组合框
void SetGroupComBox(TComboBox *pBox,int nGroup)
 {
  static char pszText[]="%d: 第 %d 组";
  int i;
  char szBuf[50];

  pBox->Items->Clear();
  for(i=0;i<256;i++){
      wsprintf(szBuf,pszText,i,i);
      pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=nGroup;
 }
//设置停车场组合框
void SetParkComBox(TComboBox *pBox,int nParkNo)
 {
  static char pszText[]="%d: %s";
  int i,nCur;
  void *pHead,*pCur;
  PARKDATA *t;
  char szBuf[50];

  nCur=0;
  pBox->Items->Clear();
  pHead = GetParkList();
  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;
    t = LookPark(pCur);
    wsprintf(szBuf,pszText,t->nParkNo,t->szName);
    if(nParkNo==t->nParkNo)nCur=i;
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=nCur;
 }
//设置类型组合框
void SetTypeComBox(TComboBox *pBox,int nType)
 {
  static char pszText[]="%d: %s";
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    p = GetRoadwayType(i);
    if(p==NULL)break;
    wsprintf(szBuf,pszText,i,p);
    pBox->Items->Add(szBuf);
   }
  if(nType<0 || nType>=i)nType=0;
  pBox->ItemIndex=nType;
 }
//设置图片处理方式组合框
void SetPhotoComBox(TComboBox *pBox,int nType)
 {
  static char pszText[]="%d: %s";
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    p = GetRoadPhotoProc(i);//获取车道图片处理方式
    if(p==NULL)break;
    wsprintf(szBuf,pszText,i,p);
    pBox->Items->Add(szBuf);
   }
  if(nType<0 || nType>=i)nType=0;
  pBox->ItemIndex=nType;
 }

//设置APB组合框
void SetAPBComBox(TComboBox *pBox,int nAPB)
 {
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=1;i<4;i++){
    GetAPBTypeStr(szBuf,i);
    pBox->Items->Add(szBuf);
   }
  GetAPBTypeStr(szBuf,0);
  pBox->Items->Add(szBuf);

  if(nAPB>0 && nAPB<4)nAPB--;
  else nAPB=3;
  pBox->ItemIndex=nAPB;
 }
//设置ReaderType组合框
void SetReaderTypeComBox(TComboBox *pBox,int nType)
 {
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    p = GetReaderType(i);//获取ReaderType串
    if(p==NULL)break;
    wsprintf(szBuf,"%d: %s",i,p);
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=nType;
 }
//设置VideoType组合框
void SetVideoTypeComBox(TComboBox *pBox,int nType)
 {
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    GetVideoType(i); //图象卡类型
    if(p==NULL)break;
    wsprintf(szBuf,"%d: %s",i,p);
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=nType;
 }
//设置LEDType组合框
void SetLEDTypeComBox(TComboBox *pBox,int nType)
 {
  int i;
  char *p,szBuf[50];

  pBox->Items->Clear();
  for(i=0;;i++){
    GetLEDType(i); //图象卡类型
    if(p==NULL)break;
    wsprintf(szBuf,"%d: %s",i,p);
    pBox->Items->Add(szBuf);
   }
  pBox->ItemIndex=nType;
 }
//获取编辑内容
int GetEditText(TEditRoadwayForm *te,void *pHead,int nIndex)
 {
  static char pszText[]="添加/修改的车道\n"
       "其名称:\"%s\"\n\n已经有重复!";
  char szBuf[100];
  ROADWAY a;
  int nCur;

  GetDotTextOnTList(pHead,nIndex,&a,sizeof(ROADWAY));
  GetEditUnit(te,&a);

  nCur= GetOtherRoadwayOnTList(pHead,&a,nIndex);
  if(nIndex>=0 && nCur<=0){//修改
    SetDotTextOnTList(pHead,nIndex,&a,sizeof(a));
    nCur=nIndex;
   }
  else if(nCur<0){//不存在该记录,添加
     a.nNo = GetMaxRoadNoOnList(pHead)+1;
     if(AddContentToTList(pHead,&a,sizeof(a)))
       nCur=LookCount(pHead)-1;
     else nCur=-2;
    }
  else{ //重复,提示错误
    wsprintf(szBuf,pszText,a.szName);
    Application->MessageBox(szBuf,GetMainTitle(),
       MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
    te->m_NameEdit->SetFocus();
    nCur=-1;
   }
  return(nCur);
 }
//获取相同编号(-1=>无,0=>原来,1=>其它记录)
int GetOtherRoadwayOnTList(void *pHead,ROADWAY *Sour,int nOld)
 {
  void *pCur;
  ROADWAY  *a;
  char *pszName;
  int i,rc,nType;

  rc=-1;// 认为无重复的记录
  pszName= Sour->szName;
  nType = Sour->nType;
  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;

    a=LookRoadway(pCur);
    if((int)a->nType==nType && lstrcmpi(a->szName,pszName)==0){
       if(i!=nOld){rc=1;break;}//有不同的记录,则停止搜索
       else rc=0;  //相同的记录,则继续搜索
      }
   }
  return(rc);
 }
//添加
void __fastcall TEditRoadwayForm::m_AddButClick(TObject *Sender)
 {
  int rc;

  rc = GetEditText(this,m_pHead,-1);//获取编辑内容
  if(rc>=0){ ModalResult=IDOK;  m_Index=rc; }
  else {   ModalResult=0; }
 }
//修改
void __fastcall TEditRoadwayForm::m_EditButClick(TObject *Sender)
{
 int rc;
  rc = GetEditText(this,m_pHead,m_Index);//获取编辑内容
  if(rc>=0){ ModalResult=IDOK;  m_Index=rc; }
  else {  ModalResult=0; }
}
//获取车道链表中最大的编号
int GetMaxRoadNoOnList(void *pHead)
 {
  int i,n,nMax;
  void *pCur;

  nMax=0;
  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;

    n=LookRoadway(pCur)->nNo;
    if(n>nMax)nMax=n;
   }
  return(nMax);
 }

void __fastcall TEditRoadwayForm::m_IPEditChange(TObject *Sender)
{
 EditIPChange(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TEditRoadwayForm::m_CommNetRBoxClick(TObject *Sender)
{
  int n;
  n = m_CommNetRBox->Checked;
  if(n){//串行网络
    m_IPEdit->Enabled=FALSE;
    m_PortEdit->Enabled=FALSE;
    m_CommCoBox->Enabled=TRUE;
    if(this->Visible)
       m_CommCoBox->SetFocus();
   }
  else {//IP网络
    m_IPEdit->Enabled=TRUE;
    m_PortEdit->Enabled=TRUE;
    m_CommCoBox->Enabled=FALSE;
    if(this->Visible)
      m_IPEdit->SetFocus();
   }
}
//---------------------------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -