搬家第14天-138.Wincc V7.3 c脚本计算ListView勾选的行数、勾选行flow1求和、最大值、最小值
前面的练习可以看出ListView第一列可以是复选框便于操作人员勾选,那么我们有时候需要计算勾选了多少行,勾选的行flow1和,flow1最大值、最小值。本篇博客使用c脚本完成上述目的。我们还是使用前面博客里面的数据库做练习,建立4个内部文本变量,名字分别为CurDate、flow1、flow2、flow3。页面上放置一个ListView控件,名字修改为LV,放置几个按钮,分别用于计算勾选的函数,勾选行flow1和、勾选行flow1最大值/最小值。放置及格静态文本,名字分别为txtCount,txtSum,txtMax,txtMin,用于显示上述计算值。页面打开事件中初始化ListView,把数据表的内容装入ListView控件。
计算行数之和的按钮,在其鼠标点击事件中添加c脚本:
#include "apdefap.h"
void OnObjectChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("kernel32.dll")
#define GetObject GetObject
int i,RowCount,count;
char charCount[256];
__object *pdl=NULL;
__object *pic=NULL;
__object *obj=NULL;
__object *txtCount=NULL;
__object *ListItem=NULL;
pdl = __object_create("PDLRuntime");
pic=pdl->GetPicture("");
obj=pic->GetObject("LV");
txtCount=pic->GetObject("txtCount");
RowCount=obj->ListItems->Count;
count=0;
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked) count=count+1;
}
sprintf(charCount,"%d",count);
txtSum->text=charSum;
}
计算勾选各行flow1和按钮鼠标点击事件添加以下c脚本:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("kernel32.dll")
#define GetObject GetObject
int i,RowCount,sum;
char charSum[256];
__object *pdl=NULL;
__object *pic=NULL;
__object *obj=NULL;
__object *txtCount=NULL;
__object *ListItem=NULL;
pdl = __object_create("PDLRuntime");
pic=pdl->GetPicture("");
obj=pic->GetObject("LV");
txtCount=pic->GetObject("txtSum");
RowCount=obj->ListItems->Count;
sum=0;
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked) sum=sum+ListItem->ListSubItems->item(2)->Text;
}
sprintf(charSum,"%d",sum);
txtCount->text=charSum;
}
求最大值按钮鼠标点击事件添加以下c脚本
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("kernel32.dll")
#define GetObject GetObject
int i,RowCount,max;
char charMax[256];
__object *pdl=NULL;
__object *pic=NULL;
__object *obj=NULL;
__object *txtMax=NULL;
__object *ListItem=NULL;
pdl = __object_create("PDLRuntime");
pic=pdl->GetPicture("");
obj=pic->GetObject("LV");
txtMax=pic->GetObject("txtMax");
RowCount=obj->ListItems->Count;
//max取一个初始数值,即第一个勾选行的数值
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked)
{
max=ListItem->ListSubItems->item(2)->Text;
break;
}
}
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked)
if (maxListSubItems->item(2)->Text) max=ListItem->ListSubItems->item(2)->Text;
}
sprintf(charMax,"%d",max);
txtMax->text=charMax;
}
求最小值按钮的鼠标点击事件添加以下c脚本
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("kernel32.dll")
#define GetObject GetObject
int i,RowCount,min;
char charMin[256];
__object *pdl=NULL;
__object *pic=NULL;
__object *obj=NULL;
__object *txtMin=NULL;
__object *ListItem=NULL;
pdl = __object_create("PDLRuntime");
pic=pdl->GetPicture("");
obj=pic->GetObject("LV");
txtMin=pic->GetObject("txtMin");
RowCount=obj->ListItems->Count;
//min取一个初始数值,即第一个勾选行的数值
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked)
{
min=ListItem->ListSubItems->item(2)->Text;
break;
}
}
for(i=1;i<=RowCount;i++)
{ ListItem=obj->listitems->item(i);
if (ListItem->checked)
if (min>ListItem->ListSubItems->item(2)->Text) min=ListItem->ListSubItems->item(2)->Text;
}
sprintf(charMin,"%d",min);
txtMin->text=charMin;
}
保存运行,就可以试验各个按钮的效果了。