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

📄 pausecr.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "PauseCR.h"
#include "dido.h"
#include "dynamic.h"
#include "option.h"
#include "gridtool.h"
#include "source.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

//设置编辑文本
static void SetEditText(TPauseCRForm *te);
//获取编辑文本
static int GetEditText(TPauseCRForm *te);
//设置Grid内容
static void SetControlerGridText(TStringGrid *pGrid,void *pHead);
//设置假日格栅宽度
static void SetControlerGridWidth(TStringGrid *pGrid);

//获取控制器状态文本
static char *GetOneCRStateText(CONTROLER *pCR);
//获取控制器状态
static int GetOneCRState(CONTROLER *pCR);
//设置按钮状态
static int SetButtonState(TPauseCRForm *te,int n);

//---------------------------------------------------------------------------
__fastcall TPauseCRForm::TPauseCRForm(TComponent* Owner)
  : TForm(Owner)
{
 m_pHead = new TList;
}
void __fastcall TPauseCRForm::FormDestroy(TObject *Sender)
{
 DelTList(m_pHead);
 delete m_pHead;
 m_pHead=NULL;
}
//设置控制器状态
int SetControlerState(TObject *Owner)
 {
  TPauseCRForm *se;
  int rc;

  rc=FALSE;
  se = new TPauseCRForm((TComponent*)Owner);
  if(se!=NULL){
    SetEditText(se);
    rc=se->ShowModal();
    if(rc==mrOk)
     { rc=TRUE; GetEditText(se); }
    else rc=FALSE;
    delete se;
   }
  return(rc);
 }
//设置编辑文本
void SetEditText(TPauseCRForm *te)
 {
  void *pList;

  pList=te->m_pHead;
  CopyTList(pList,GetControlerList(),sizeof(CONTROLER));//拷贝一个控制器链

  //设置假日格栅宽度
  SetControlerGridWidth(te->m_TextGrid);
  SetControlerGridText(te->m_TextGrid,pList);

  te->m_OkBut->Enabled=FALSE;
 }
//获取编辑文本
int GetEditText(TPauseCRForm *te)
 {
  void *pList,*pCRList;
  void *pCur,*pDest;
  int i;

  pList=te->m_pHead;
  pCRList = GetControlerList();
  for(i=0;;i++){
    pCur = GetDotOnTList(pList,i);
    pDest = GetDotOnTList(pCRList,i);
    if(pCur==NULL || pDest==NULL)break;

    LookControler(pDest)->nStatus = LookControler(pCur)->nStatus;
   }
  return(i);
 }
 

//设置Grid内容
void SetControlerGridText(TStringGrid *pGrid,void *pHead)
 {
  void *pCur;
  CONTROLER *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;

    t->Clear();
    a = LookControler(pCur);
    wsprintf(szBuf,"%02d",i+1);//No.编号
    t->Add(szBuf);

    t->Add(a->szName);      //说明
    n = GetCRIPNetFlag(a);
    GetNetIDStr(szBuf,a->nNetID,n); //网络地址
    t->Add(szBuf);
    if(n && a->nIPPort>0)//IP网
      wsprintf(szBuf,"%4d",a->nIPPort);//IP端口
    else szBuf[0]=0;
    t->Add(szBuf);
    wsprintf(szBuf,"%02d",a->nAddrID);//通讯地址
    t->Add(szBuf);
    p=GetOneCRStateText(a);   //使用情况
    t->Add(p);
     //显示Grid的nIndex行内容
    DispGridText(pGrid,t,i);
   }
  delete t;
 }
//设置假日格栅宽度
void SetControlerGridWidth(TStringGrid *pGrid)
 {
  static char *pszTitle[]={"No.","名称",
        "网络节点","IP端口","通讯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]=100; //网络节点
  x[3]=55;  //IP端口
  x[4]=40;  //通讯ID
  for(i=m=0;i<n;i++)
    if(x[i]!=0){ nWidth -= x[i]; m++;}
  if(m<n) 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];
   }
 }
//获取控制器状态文本
char *GetOneCRStateText(CONTROLER *pCR)
 {
  static char *pszText[]={"未联线","不在本地机上",
             "未建立通讯链路","暂停使用"};
  static char pszDef[]="设备正常";
  int n;
  char *p;

  n = GetOneCRState(pCR);
  if(n>0 && n<=sizeof(pszText)/sizeof(char *))
    p = pszText[n-1];
  else p=pszDef;
  return(p);
 }
//获取控制器状态
int GetOneCRState(CONTROLER *pCR)
 {
  int n;

  n=0;  //"设备正常";
  if(GetCRUnLinkFlag(pCR))n=1;//"未联线",
  else if(GetCROnLineFlag(pCR)==0)n=2; //"不在本地机上",
  else if(GetCRPauseFlag(pCR))n=4;//"暂停使用"
  else if(IsValidControler(pCR)==0)n=3;//"未建立通讯链路",
  return(n);
 }


void __fastcall TPauseCRForm::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);
  if(State.Contains(gdSelected) && ACol==1)//设置按钮状态
    SetButtonState(this,ARow-1);
}
//---------------------------------------------------------------------------

void __fastcall TPauseCRForm::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;
}
//设置按钮状态
int SetButtonState(TPauseCRForm *te,int n)
 {
  void *pCur;
  CONTROLER *pCR;
  int rc;

  pCur = GetDotOnTList(te->m_pHead,n);
  pCR = LookControler(pCur);
  if(pCR!=NULL) rc = GetOneCRState(pCR);
  else rc=-1;
  if(rc==0){  //"设备正常";
    te->m_PauseBut->Enabled=TRUE;
    te->m_ContinueBut->Enabled=FALSE;
   }
  else if(rc==4){//"暂停使用"
    te->m_PauseBut->Enabled=FALSE;
    te->m_ContinueBut->Enabled=TRUE;
   }
  else {
    te->m_PauseBut->Enabled=FALSE;
    te->m_ContinueBut->Enabled=FALSE;
   }
  return(rc);
 }
void __fastcall TPauseCRForm::m_ContinueButClick(TObject *Sender)
{
  void *pCur;
  CONTROLER *pCR;
  int n;

  n = m_TextGrid->Row-1;
  pCur = GetDotOnTList(m_pHead,n);
  pCR = LookControler(pCur);
  if(pCR!=NULL){
    SetCRPauseFlag(pCR,FALSE);
    SetControlerGridText(m_TextGrid,m_pHead);//设置Grid内容
    m_OkBut->Enabled=TRUE;
   }
}
//---------------------------------------------------------------------------
void __fastcall TPauseCRForm::m_PauseButClick(TObject *Sender)
{
  void *pCur;
  CONTROLER *pCR;
  int n;

  n = m_TextGrid->Row-1;
  pCur = GetDotOnTList(m_pHead,n);
  pCR = LookControler(pCur);
  if(pCR!=NULL){
    SetCRPauseFlag(pCR,TRUE);
    SetControlerGridText(m_TextGrid,m_pHead);//设置Grid内容
    m_OkBut->Enabled=TRUE;
   }
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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