📄 pausecr.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 + -