我在做一个画面,画面中有一个下接框,一个列表控件,一个趋势曲线控件,一个按钮。
列表和曲线控件组态的变量是一致的,但列表和曲线控件不同时显示出来,按钮用来切换显示列表或曲线。
我的想法是打开该画面时,将列表控件所组态的列名称填充到下拉框控件的列项中去,代码如下。
现在问题是打开该画面时,有时候能够成功填充下拉框,有时候不能填充,没有什么规律。
请各位兄弟给个建议。
//
#include "apdefap.h"
void OnOpenPicture(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma option(mbcs)
#define GetObjectA GetObject
int iListCount, iListIndex;
char *strLable;
int i;
BOOL bTrendDis;
__object *pdl=NULL;
__object *pic=NULL;
__object *obj=NULL;
bTrendDis = GetTagBitWait("bTableDisplay");
if(!bTrendDis)
{
pdl = __object_create("PDLRuntime");
if(!pdl)
{
printf("Open pdl = NULL\r\n");
return;
}
pic = pdl->GetPicture("pMain.pMainArea:pTableAndTrend");
if( pic == NULL)
{
__object_delete(pdl);
printf("Open pic = NULL\r\n");
return;
}
//cb2是一个S7flatDropDown控件
obj = pic->GetObject("cb2");
if( obj == NULL)
{
__object_delete(pic);
__object_delete(pdl);
printf("Open obj = NULL\r\n");
return;
}
// obj->Clear( );
//iTrendNo是一个内部变量,表示当前要显示的趋势曲线序号
iListIndex = GetTagSDWordWait("iTrendNo");
//cb3是一个表格控件
iListCount = GetPropWord(lpszPictureName,"cb3","NumItems");
if(iListIndex >= iListCount)
iListIndex = 0;
for(i = 0; i {
SetPropWord(lpszPictureName,"cb3","Index",i);
strLable = GetPropChar(lpszPictureName,"cb3","Name");
printf("Open Picture The Lable is: %s \r\n",strLable);
//cb4是一个趋势曲线控件
SetPropWord(lpszPictureName,"cb4","Index",i);
if(i == iListIndex)
{
SetPropBOOL(lpszPictureName,"cb4","ItemVisible",TRUE);
SetPropChar(lpszPictureName,"cb4","Label",strLable);
}
else
SetPropBOOL(lpszPictureName,"cb4","ItemVisible",FALSE);
obj->AddItem(strLable,i);
}
SetPropWord(lpszPictureName,"cb2","ListIndex",iListIndex);
SetPropWord(lpszPictureName,"cb4","Index",iListIndex);
SetPropChar(lpszPictureName,"cb4","Command","Reload");
printf( "Open Picture iTrendNo is: %d \r\n", iListIndex );
printf( "Open Picture cb3->NumItems is: %d \r\n", iListCount );
iListCount = GetPropWord(lpszPictureName,"cb2","ListCount");
printf( "Open Picture cb2->iListCount is: %d \r\n", iListCount );
__object_delete(obj);
__object_delete(pic);
__object_delete(pdl);
}
}