📄 monitor.cpp
字号:
//---------------------------------------------------------------------------
#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 + -