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

📄 monitor.cpp

📁 停车场用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

#include "Monitor.h"
#include "Servermodule.h"
#include "bdbf.h"
#include "dido.h"
#include "Param.h"
#include "gridtool.h"
#include "option.h"
#include "datetool.h"
#include "CBuilder.h"
#include "inqpark.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置场内格栅宽度
static void SetParkinDBGridWidth(TDBGrid *pDBGrid);
//设置停车记录格栅宽度
static void SetParkrecDBGridWidth(TDBGrid *pDBGrid);

//显示当前场内车辆
static void ShowCurParkIn(TMonitorFrame *te,PARKREC *t);
//清除当前场内车辆
static void ClearCurParkIn(TMonitorFrame *te);

//显示当前停车记录
static void ShowCurParkRec(TMonitorFrame *te,PARKREC *t);
//清除当前停车记录
static void ClearCurParkRec(TMonitorFrame *te);

//获取比对内容
static char *GetManualText(PARKREC *pParkrec);

//---------------------------------------------------------------------------
__fastcall TMonitorFrame::TMonitorFrame(TComponent* Owner)
        : TFrame(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_MonitorPageControlChange(TObject *Sender)
{
 TDataSet *pQuery;
 int nIndex;

 m_ParkinDataSource->DataSet=GetParkInQuery();
 m_RecordDataSource->DataSet=GetRecordQuery();

 nIndex = ((TPageControl *)Sender)->ActivePageIndex;
 if(nIndex==1)
   pQuery = m_ParkinDataSource->DataSet;
 else if(nIndex==2)
   pQuery = m_RecordDataSource->DataSet;
 else pQuery=NULL;
 if(pQuery!=NULL)
   OpenADOQuery((TADOQuery *)pQuery,NULL);//查询数据表

 if(nIndex==1)
  SetParkinDBGridWidth(m_ParkInDBGrid);
 else if(nIndex==2)
  SetParkrecDBGridWidth(m_RecordDBGrid);
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_PhotoPanelResize(TObject *Sender)
{
 TRect tr;
 int y;

 tr=((TControl *)Sender)->ClientRect;
 y = (tr.Height() - m_NotePhotoPanel->Height)/2;
 m_InPhotoPanel->Height=y;
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_PPhotoPanelResize(TObject *Sender)
{
 TRect tr;
 int y;

 tr=((TControl *)Sender)->ClientRect;
 y = tr.Height()/2;
 m_PInPhotoPanel->Height=y;
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_RPhotoPanelResize(TObject *Sender)
{
 TRect tr;
 int y;

 tr=((TControl *)Sender)->ClientRect;
 y = tr.Height()/2;
 m_RInPhotoPanel->Height=y;
}
//设置场内格栅宽度
void SetParkinDBGridWidth(TDBGrid *pDBGrid)
 {
  int i,m,n,nWidth;
  int x[10];

  nWidth = pDBGrid->ClientRect.Width()-10;
  n = pDBGrid->Columns->Count;
  ZeroMemory(x,sizeof(x));

  x[0]=65; x[1]=55;
  for(i=m=0;i<n;i++){
    if(x[i]!=0){ nWidth -= x[i]; m++;}
   }
  if(n>m)nWidth = (nWidth-n-2)/(n-m);
  for(i=0;i<n;i++){
    if(x[i]==0)x[i]=nWidth;
    pDBGrid->Columns->Items[i]->Width=x[i];
   }
 }
//设置停车记录格栅宽度
void SetParkrecDBGridWidth(TDBGrid *pDBGrid)
 {
  int i,m,n,nWidth;
  int x[10];

  nWidth = pDBGrid->ClientRect.Width()-10;
  n = pDBGrid->Columns->Count;
  ZeroMemory(x,sizeof(x));

  x[0]=65;  x[4]=55;
  for(i=m=0;i<n;i++){
    if(x[i]!=0){ nWidth -= x[i]; m++;}
   }
  if(n>m)nWidth = (nWidth-n-2)/(n-m);
  for(i=0;i<n;i++){
    if(x[i]==0)x[i]=nWidth;
    pDBGrid->Columns->Items[i]->Width=x[i];
   }
 }

void __fastcall TMonitorFrame::m_MonitorPageControlResize(TObject *Sender)
{
 SetParkinDBGridWidth(m_ParkInDBGrid);
 SetParkrecDBGridWidth(m_RecordDBGrid);
}
void __fastcall TMonitorFrame::m_ParkinDataSourceDataChange(
      TObject *Sender, TField *Field)
{
 TDataSet *pQuery;
 int m,n;
 char szBuf[50];

 if(Field==NULL){//多个字段同时变化,即当前记录已变化
   pQuery =m_ParkinDataSource->DataSet;
   n= GetAllRecNum(pQuery);//获取总记录数
   m=GetCurRecno(pQuery);//获取当前记录号
   wsprintf(szBuf,"%d/%d",m,n);
   m_PRecNumPanel->Caption=szBuf;
  }
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_RecordDataSourceDataChange(
      TObject *Sender, TField *Field)
{
 TDataSet *pQuery;
 int m,n;
 char szBuf[50];

 if(Field==NULL){//多个字段同时变化,即当前记录已变化
   pQuery =m_RecordDataSource->DataSet;
   n= GetAllRecNum(pQuery);//获取总记录数
   m=GetCurRecno(pQuery);//获取当前记录号
   wsprintf(szBuf,"%d/%d",m,n);
   m_RRecNumPanel->Caption=szBuf;
  }
}
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_ParkInDBGridDrawColumnCell(
      TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
 TDataSet *pQuery;
 PARKREC a;
 char szBuf[50];
 int nEmpty;

  pQuery =m_ParkinDataSource->DataSet;
  nEmpty = pQuery->IsEmpty();
  if(nEmpty==0){
    if(DataCol==1){//卡片编号
      ReadParkinRecord(pQuery,&a);
      GetNumberText(szBuf,a.nCardNo);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    if(DataCol==2){//用户类型
      ReadParkinRecord(pQuery,&a);
      GetUserTypeText(szBuf,a.nUserType);//获取用户类型名称文本
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==3){//进入车道
      ReadParkinRecord(pQuery,&a);
      GetRoadwayNameText(szBuf,a.nInRoadNo);//获取车道名称文本
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==4){//进入时间
      ReadParkinRecord(pQuery,&a);
      //长整数转化为"YYYY-MM-DD HH:MM"格式串
      DWORDToYMDHMStr(szBuf,a.nInDate,a.nInTime);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
   }
  if(DataCol==4 && State.Contains(gdSelected)){//显示格栅
    if(nEmpty==0){
      a.pInPhoto = GetFieldBlobOnTable(pQuery,GetInPhotoFieldName());
      ShowCurParkIn(this,&a);
      DeleteBlobData(a.pInPhoto);
     }
    else ClearCurParkIn(this); //清除当前场内车辆
   }
}
//显示当前场内车辆
void ShowCurParkIn(TMonitorFrame *te,PARKREC *t)
 {
  TADOQuery *pQuery;
  USERDATA User;
  int n,nHolderNo;
  char szBuf[30];

  nHolderNo = t->nHolderNo;
  ZeroMemory(&User,sizeof(User));
  if(nHolderNo!=0){//非临时用户,则查找车主资料
    wsprintf(szBuf,"HOLDERNO=\'%s\'",nHolderNo);
    pQuery = (TADOQuery *)GetOtherQuery();//用OtherADOQuery元件查询一个表中记录
    n=QueryOneADOTable(pQuery,GetUserTableName(),szBuf,NULL);
    if(n>0){
      ReadUserRecord(pQuery,&User);
      User.pPhoto = GetFieldBlobOnTable(pQuery,GetCarPhotoFieldName());
     }
   }
  te->m_PUserNamePanel->Caption=User.szUserName;
  te->m_PCarTypePanel->Caption=User.szCarType;
  te->m_PCarTagPanel->Caption=User.szCarTag;
  te->m_PCarColorPanel->Caption=User.szCarColor;

  GetUserTypeText(szBuf,t->nUserType);
  te->m_PUserTypePanel->Caption=szBuf;
  GetNumberText(szBuf,t->nCardNo);
  te->m_PCardNoPanel->Caption=szBuf;

  GetDWORDDateText(szBuf,User.nBeginDate);
  te->m_PBeginDatePanel->Caption=szBuf; //结束日期
  GetDWORDDateText(szBuf,User.nEndDate);
  te->m_PEndDatePanel->Caption=szBuf;  //开始日期

  if(nHolderNo!=0)//非临时用户
      sprintf(szBuf,"%-9.2f",User.fMoney);
  else szBuf[0]=0; //记录不存在
  te->m_PMoneyPanel->Caption=szBuf;

  ShowOneImage(te->m_PInImage,t->pInPhoto);//显示入口图象
  ShowOneImage(te->m_POutImage,User.pPhoto);//显示车辆图象

  DeleteBlobData(User.pPhoto);
 }
//清除当前场内车辆
void ClearCurParkIn(TMonitorFrame *te)
 {
  TControl *pControl;
  int i;
  char szBuf[10];

  szBuf[0]=0;
  for(i=0; i<100;i++){
    pControl = (TControl *)GetChildComponent(te,i+200);//返回子元件
    if(pControl !=NULL)
      pControl->SetTextBuf(szBuf);
   }
  ShowOneImage(te->m_PInImage,NULL);//显示入口图象
  ShowOneImage(te->m_POutImage,NULL);//显示车辆图象
 }
//---------------------------------------------------------------------------
void __fastcall TMonitorFrame::m_RecordDBGridDrawColumnCell(
      TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
 TDataSet *pQuery;
 PARKREC a;
 char szBuf[50];
 int nEmpty;

  pQuery =m_RecordDataSource->DataSet;
  nEmpty = pQuery->IsEmpty();
  if(nEmpty==0){
    if(DataCol==1){//用户类型
      ReadParkrecRecord(pQuery,&a);
      GetUserTypeText(szBuf,a.nUserType);//获取用户类型名称文本
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==2){//进入时间
      ReadParkrecRecord(pQuery,&a);
      //长整数转化为"YYYY-MM-DD HH:MM"格式串
      DWORDToYMDHMStr(szBuf,a.nInDate,a.nInTime);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==3){//外出时间
      ReadParkrecRecord(pQuery,&a);
      //长整数转化为"YYYY-MM-DD HH:MM"格式串
      DWORDToYMDHMStr(szBuf,a.nOutDate,a.nOutTime);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==4){//停车收费
      ReadParkrecRecord(pQuery,&a);
      sprintf(szBuf,"%8.2f",a.fParkPrice);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
   }
  if(DataCol==4 && State.Contains(gdSelected)){//显示格栅
    if(nEmpty==0){
      a.pInPhoto = GetFieldBlobOnTable(pQuery,GetInPhotoFieldName());
      a.pOutPhoto = GetFieldBlobOnTable(pQuery,GetOutPhotoFieldName());
      ShowCurParkRec(this,&a);
      DeleteBlobData(a.pInPhoto);
      DeleteBlobData(a.pOutPhoto);
     }
    else ClearCurParkRec(this);//清除当前场内车辆
   }
}
//显示当前停车记录
void ShowCurParkRec(TMonitorFrame *te,PARKREC *t)
 {
  int nCardNo;
  char szBuf[30];

  nCardNo = t->nCardNo;
  te->m_RUserNamePanel->Caption=t->szUserName;
  te->m_RCarTypePanel->Caption=t->szCarType;
  te->m_RCarTagPanel->Caption=t->szCarTag;
  te->m_RCarColorPanel->Caption=t->szCarColor;

  GetRoadwayNameText(szBuf,t->nInRoadNo);//获取车道名称文本
  te->m_RInRoadPanel->Caption=szBuf;
  GetRoadwayNameText(szBuf,t->nOutRoadNo);//获取车道名称文本
  te->m_ROutRoadPanel->Caption=szBuf;

  GetNumberText(szBuf,nCardNo);
  te->m_RCardNoPanel->Caption=szBuf;

  ShowOneImage(te->m_RInImage,t->pInPhoto);//显示入口图象
  ShowOneImage(te->m_ROutImage,t->pOutPhoto);//显示出口图象
 }
//清除当前停车记录
void ClearCurParkRec(TMonitorFrame *te)
 {
  TControl *pControl;
  int i;
  char szBuf[10];

  szBuf[0]=0;
  for(i=0; i<100;i++){
    pControl = (TControl *)GetChildComponent(te,i+300);//返回子元件

⌨️ 快捷键说明

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