📄 control.c.svn-base
字号:
{
PersonType=2;
MoneyFlag=1; //MoneyFlag==1所有授权员不检查授权金额
}
switch(PersonType)
{
case 0: //搜索合法签发员总数
{
for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
{
TempAddress=PersonType*PersonTotalNum+Counter1;
TempAddress*=OnePersonLength;
TempAddress+=FirstPersonAdd;
ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0]));
if(Flag[0]==0x55)
{
Pointer->PersonTable[Counter].SerialNum=Counter1;//记录人员索引号
YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
PersonNumber+=1;
Counter+=1;
}
TempAddress+=OnePersonLength;
}
break;
}
case 1: //搜索合法审核员总数
{
for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
{
TempAddress=PersonType*PersonTotalNum+Counter1;
TempAddress*=OnePersonLength;
TempAddress+=FirstPersonAdd;
ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0])); //读取人员标志
if(Flag[0]==0x55) //人员有效?
{
ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress+15+PersonPointer->AcctIndex,(ucharx *)(&Flag[1]));//读取人员账号标志
if(IsQuickQF!=1)
Flag[1]=0x55; //快速签发时过滤账号,否则不过滤
if(Flag[1]==0x55) //人员授权?
{
Pointer->PersonTable[Counter].SerialNum=Counter1; //记录人员索引号
YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
PersonNumber+=1;
Counter+=1;
}
}
}
break;
}
case 2:
{ //搜索合法授权员总数
for(Counter1=0;Counter1<PersonTotalNum;Counter1++)
{
TempAddress=PersonType*PersonTotalNum+Counter1;
TempAddress*=OnePersonLength;
TempAddress+=FirstPersonAdd;
ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress,(ucharx *)(&Flag[0]));//读取人员标志
if(Flag[0]==0x55)
{
ZDHReadFlashToInterMem(ConfigFilePage,1,TempAddress+15+PersonPointer->AcctIndex,(ucharx *)(&Flag[1]));//读取人员账号权限标志
if(IsQuickQF!=1)
Flag[1]=0x55; //快速签发时过滤账号,否则不过滤
Flag[2]=0;
if(MoneyFlag!=1)
{
YJHReadFlashToExterMem(ConfigFilePage,8,(ucharx *)(AuthorMoneyAdd+Counter1*9),&MoneyBuffer[0]); //读取每个授权员的授权金额
Flag[2]=XramStringCompare((ucharx *)&(PersonPointer->MoneyLimit[0][0]),(ucharx *)(&MoneyBuffer[0]),8);//比较授权金额和当前金额
}
if((Flag[1]==0x55)&&(Flag[2]!=2))
{
Pointer->PersonTable[Counter].SerialNum=Counter1; //记录人员索引号
YJHReadFlashToExterMem(ConfigFilePage,NameLen,(ucharx *)(TempAddress+3),&(Pointer->PersonTable[Counter].Name[0]));//记录人员姓名
PersonNumber+=1;
Counter+=1;
}
}
}
break;
}
default: break;
}
return(PersonNumber);
}
uchar PersonSearch(PersonSelx *PersonPointer,uchar KeyValue) //控件返回人员序号
{
uchar TempByte,TempByte1;
uchar HistoryFocus = 0xff,KeyValidFg = 0;
uchar NowPageDispLine,DisplayTotalLine;
uchar RefreshFlag = 1,TotalPerson,DisplayYAdd;
ucharx SerialNum[3];
ucharx TempBuffer[sizeof(PersonList)];
PersonListx *PPointer = (PersonListx *)&TempBuffer[0];
TimerType = TimerKeyOn;
/*返回*/
if (KeyValue == KEYESC||KeyValue == KEYCLEAR) {
return(KeyValue);
}
/*得到人员列表*/
if(PersonPointer->PersonType>2)
{
TotalPerson=GetPersonNum(PPointer,PersonPointer,4); //获取可选择人员总数,不比较授权金额
}
else
{
TotalPerson=GetPersonNum(PPointer,PersonPointer,PersonPointer->PersonType);//获取可选择人员总数,比较授权金额
}
/*得到列表框最大显示行*/
DisplayTotalLine =
((PersonPointer->ListBoxY2)-(PersonPointer->ListBoxY1)-4)/((PersonPointer->LineInterval)+12);//计算当前条件下可以显示的总行数
/*设置当前显示行数*/
if (TotalPerson >= DisplayTotalLine) {
NowPageDispLine = DisplayTotalLine;
}
else {
NowPageDispLine = TotalPerson;
}
/*一页显示完毕则不刷新整屏*/
if (TotalPerson < DisplayTotalLine) {
RefreshFlag = 0;
}
/*如果光标超限则置到合法范围内*/
TempByte = (TotalPerson-(PersonPointer->StartOfNumber+1));
TempByte = TempByte%(DisplayTotalLine+1);
TempByte1 = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;
if (((PersonPointer->NowFocus+1) > TempByte)&&
(PersonPointer->StartOfNumber > TempByte1)) {
PersonPointer->NowFocus = TempByte;
}
/*允许弹出下拉菜单*/
if (PersonPointer->PopUpFlag==1) {
switch(KeyValue) {
case KEYDOWN: //下翻一条
/*只有一条记录时不移动光标*/
if (TotalPerson == 1) {
break;
}
/*保存上一次光标位置*/
KeyValidFg = 1;
HistoryFocus = PersonPointer->NowFocus;
/*如果是最后一条,设置到第一条*/
if (PersonPointer->StartOfNumber+PersonPointer->NowFocus >=
(TotalPerson-1)) {
PersonPointer->NowFocus = 0;
PersonPointer->StartOfNumber = 0;
}
/*如果光标是最后那么移动开始行位置*/
else if((PersonPointer->NowFocus+1)%DisplayTotalLine == 0) {
PersonPointer->StartOfNumber += 1;
}
/*只移动光标位置不刷新整个屏幕*/
else {
RefreshFlag = 0;
PersonPointer->NowFocus += 1;
}
break;
case KEYUP: //上翻一条
/*只有一条记录时不移动光标*/
if (TotalPerson == 1) {
break;
}
/*保存上一次光标位置*/
KeyValidFg = 1;
HistoryFocus = PersonPointer->NowFocus;
/*如果是第一条,设置到最后一条*/
if ((PersonPointer->StartOfNumber == 0)&&
(PersonPointer->NowFocus == 0)) {
if (TotalPerson <= NowPageDispLine) {
PersonPointer->NowFocus = TotalPerson-1;//指向最后一条
}
else {
PersonPointer->NowFocus = TotalPerson%DisplayTotalLine-1; //指向最后一条
}
if (TotalPerson <= DisplayTotalLine) {
PersonPointer->StartOfNumber = 0;
}
else if (TotalPerson%DisplayTotalLine == 0) {
PersonPointer->NowFocus = DisplayTotalLine-1;//指向最后一条
PersonPointer->StartOfNumber = (TotalPerson/DisplayTotalLine)*DisplayTotalLine-DisplayTotalLine;
}
else {
PersonPointer->StartOfNumber = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;//指向最后一页的起始位置
}
}
/*如果光标是最前那么移动开始行位置*/
else if (PersonPointer->NowFocus == 0) {
PersonPointer->StartOfNumber -= 1;
}
/*只移动光标位置不刷新整个屏幕*/
else {
RefreshFlag = 0;
PersonPointer->NowFocus -= 1;
}
break;
case KEYPAGEDOWN: //下翻一页 //tjzdh 2003.9.28
KeyValidFg = 1;
/*如果只有一页,不操作*/
if (DisplayTotalLine>TotalPerson) {
return(NOKEY);
}
/*执行翻页*/
if ((PersonPointer->StartOfNumber+DisplayTotalLine) < TotalPerson) {
PersonPointer->StartOfNumber += DisplayTotalLine;
/*翻到最后一页,光标位置超出范围移到最后一行*/
if (TotalPerson-PersonPointer->StartOfNumber < DisplayTotalLine) {
if (PersonPointer->NowFocus >= (TotalPerson-PersonPointer->StartOfNumber-1)%DisplayTotalLine) {
PersonPointer->NowFocus = TotalPerson-PersonPointer->StartOfNumber-1;
}
}
}
/*执行最后一页翻页操作,光标位置不变。开始行置为第一行*/
else if ((PersonPointer->StartOfNumber) == (TotalPerson%DisplayTotalLine)) {
PersonPointer->StartOfNumber = 0;
}
else if (PersonPointer->StartOfNumber >= (TotalPerson/DisplayTotalLine-1)*DisplayTotalLine) {
PersonPointer->StartOfNumber = 0;
}
break;
case KEYPAGEUP: //上翻一页
KeyValidFg = 1;
/*如果只有一页,不操作*/
if (DisplayTotalLine > TotalPerson) {
return(NOKEY);
}
/*如果是第一页,指向最后一页*/
if (PersonPointer->StartOfNumber == 0) {
TempByte = (TotalPerson/DisplayTotalLine)*DisplayTotalLine;
if (TotalPerson%DisplayTotalLine == 0) {
PersonPointer->StartOfNumber = TempByte-NowPageDispLine;
}
else {
PersonPointer->StartOfNumber = TempByte;
}
/*光标超出范围,把光标移到最后一行*/
TempByte = (TotalPerson%DisplayTotalLine-1);
if(PersonPointer->NowFocus > TempByte) {
PersonPointer->NowFocus = TempByte; //指向最后一条
}
}
/*执行翻页操作*/
else if ((PersonPointer->StartOfNumber) > DisplayTotalLine) {
PersonPointer->StartOfNumber -= DisplayTotalLine;
}
/*如果前面不够一页,指向第一页*/
else if (PersonPointer->StartOfNumber <= DisplayTotalLine) {
PersonPointer->StartOfNumber = 0;
}
break;
default:
break;
}
}
/*得到当前光标所指序号*/
TempByte = PersonPointer->StartOfNumber+PersonPointer->NowFocus;
PersonPointer->BackPerson = PPointer->PersonTable[TempByte].SerialNum; //zdhyy 2003.01.06
TempByte1 = PersonPointer->ListBoxX2-1;
/*留下滚动栏位置*/
if (TotalPerson > DisplayTotalLine) {
TempByte1 = PersonPointer->ListBoxX2-7;
}
TempByte = PersonPointer->ListBoxY1+3+
PersonPointer->NowFocus*(PersonPointer->LineInterval+12);
switch(KeyValue) {
case KEYFOCUSLIGHT:
/*由黑变坏*/
ZDHReverseRectangle(PersonPointer->ListBoxX1+21,TempByte,
TempByte1,TempByte+16,0x00);
return(KeyValue);
case KEYFOCUSBLACK:
/*由灰变黑*/
ZDHReverseRectangle(PersonPointer->ListBoxX1+21,TempByte,
TempByte1,TempByte+16,0x01);
return(KeyValue);
case KEYREV:
/*翻转*/
YJHReverseRectangle(PersonPointer->PopDownX1+1,PersonPointer->PopDownY1+1,
PersonPointer->PopDownX2-8,PersonPointer->PopDownY2);
return(KeyValue);
case KEYSINGLEREFRSH:
case KEYREFRSH:
/*强制刷新*/
KeyValidFg = 1;
RefreshFlag = 1;
break;
case KEYENTER:
KeyValidFg = 1;
if (PersonPointer->PopUpFlag == 1) {
/*如果要关闭下拉菜单则恢复窗口*/
if (PersonPointer->PopDispFlag == 1) {
PersonPointer->PopUpFlag = 0;
/*反白下拉菜单*/
YJHReverseRectangle(PersonPointer->PopDownX1+1,PersonPointer->PopDownY1+1,
PersonPointer->PopDownX2-8,PersonPointer->PopDownY2);
RestoreWindow((ucharx *)&LCD_Bffer[0]);
}
else {
return(KeyValue);
}
}
break;
case KEYSELECT:
KeyValidFg = 1;
/*如果要展开下拉菜单则保存LCD原内容*/
if (PersonPointer->PopUpFlag==0) {
PersonPointer->PopUpFlag = 1;
YJHSaveWindow(PersonPointer->ListBoxX1,
PersonPointer->ListBoxY1, PersonPointer->ListBoxX2,
PersonPointer->ListBoxY2, &LCD_Bffer[0]);
YJHClearWindow(PersonPointer->ListBoxX1,
PersonPointer->ListBoxY1, PersonPointer->ListBoxX2,
PersonPointer->ListBoxY2, 0x04);
RefreshFlag = 1;
break;
}
/*如果要关闭下拉菜单则恢复窗口*/
else if (PersonPointer->PopDispFlag == 1) {
PersonPointer->PopUpFlag = 0;
RestoreWindow((ucharx *)&LCD_Bffer[0]);
/*反白下拉菜单*/
YJHReverseRectangle(PersonPointer->PopDownX1+1,
PersonPointer->PopDownY1+1, PersonPointer->PopDownX2-8,
PersonPointer->PopDownY2);
return(NOKEY);
}
else {
return(NOKEY);
}
}
/*如果列表框不显示,按KEYDOWN KEYUP翻转下拉菜单*/
if (PersonPointer->PopUpFlag == 0) {
if ((KeyValue == KEYDOWN)||(KeyValue == KEYUP)) {
YJHReverseRectangle(PersonPointer->PopDownX1+1,
PersonPointer->PopDownY1+1, PersonPointer->PopDownX2-8,
PersonPointer->PopDownY2);
return(KEYNEXTDOWN);
}
}
/*无效按键返回*/
if (KeyValidFg == 0) {
return(NOKEY);
}
/*显示下拉菜单*/
if (PersonPointer->PopDispFlag == 1) {
/*显示下拉图标*/
DrawDownBox(PersonPointer->PopDownX1, PersonPointer->PopDownY1,
PersonPointer->PopDownX2, PersonPointer->PopDownY2, 0x42, 0x03,
TotalPerson);
/*如果有人数,显示当前光标所指到的人名*/
if (TotalPerson != 0) {
TempByte = PersonPointer->StartOfNumber+PersonPointer->NowFocus;
/*获取姓名长度*/
TempByte1 = Remove_0xff(&PPointer->PersonTable[TempByte].Name[0],NameLen);
TempByte1 = get_textlen(&PPointer->PersonTable[TempByte].Name[0],TempByte1);
/*显示人名*/
YJHStringDisplay(PersonPointer->PopDownX1+2, PersonPointer->PopDownY1+3,
0x45, 0x03, &(PPointer->PersonTable[TempByte].Name[0]), TempByte1);
}
}
/*不需要展开列表框则返回*/
if (PersonPointer->PopUpFlag == 0) {
return(KeyValue);
}
/*刷新时显示下拉框*/
if (RefreshFlag == 1) { //展开下拉菜单
/*显示下拉框*/
YJHDrawRectangle(PersonPointer->ListBoxX1, PersonPointer->ListBoxY1,
PersonPointer->ListBoxX2, PersonPointer->ListBoxY2, 0x42);
/*判断是否显示滚动栏*/
if (DisplayTotalLine < TotalPerson) {
YJHDrawLine(PersonPointer->ListBoxX2-6, PersonPointer->ListBoxY1,
PersonPointer->ListBoxX2-6, PersonPointer->ListBoxY2, 0x02);
}
DrawRollbar(PersonPointer->ListBoxX2-5, PersonPointer->ListBoxY1+1,
PersonPointer->ListBoxY2, PersonPointer->StartOfNumber+1,
DisplayTotalLine, TotalPerson);
}
DisplayYAdd = PersonPointer->ListBoxY1+2;
for (TempByte = 0; TempByte < NowPageDispLine; TempByte++) {
/*刷新时显示序号,人名*/
if (RefreshFlag == 1) {
/*过了最后一行,返回*/
if (PersonPointer->StartOfNumber+TempByte == TotalPerson) {
break;
}
/*得到姓名*/
TempByte1 = Remove_0xff(&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],NameLen);
TempByte1 = get_textlen(&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],TempByte1);//获取姓名长度
/*显示姓名*/
YJHStringDisplay(PersonPointer->ListBoxX1+28,DisplayYAdd+3,
0x45,0x03,&PPointer->PersonTable[PersonPointer->StartOfNumber+TempByte].Name[0],TempByte1);
/*显示序号*/
IntToAsc(PersonPointer->StartOfNumber+TempByte+1,&SerialNum[0]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -