📄 control.c.svn-base
字号:
if(SerialNum[1]==0x30) {
SerialNum[1]=0x20;
}
ZDHDrawTab(PersonPointer->ListBoxX1+2,DisplayYAdd+2,2,0x00,&SerialNum[1]);
}
/*留下滚动栏位置*/
KeyValidFg = PersonPointer->ListBoxX2-1;
if (TotalPerson > DisplayTotalLine) {
KeyValidFg=PersonPointer->ListBoxX2-7;
}
/*反白当前行*/
if (PersonPointer->NowFocus%DisplayTotalLine == TempByte) {
YJHReverseRectangle(PersonPointer->ListBoxX1+1,DisplayYAdd+1,
KeyValidFg,DisplayYAdd+17);
}
/*恢复原来光标*/
if ((HistoryFocus != 0xff)&&
(HistoryFocus%DisplayTotalLine == TempByte)&&
(HistoryFocus != PersonPointer->NowFocus)&&
RefreshFlag!=1) {
TempByte1 = PersonPointer->ListBoxY1+2+(HistoryFocus%DisplayTotalLine)*(PersonPointer->LineInterval+12);
YJHReverseRectangle(PersonPointer->ListBoxX1+1,TempByte1+1,KeyValidFg,TempByte1+17);
}
DisplayYAdd = DisplayYAdd+PersonPointer->LineInterval+12;
}
return(KeyValue);
}
////history down
//涵数说明:两字符比较大小
//入口参数:两字符指针*pstr1,*pstr2和比较长度strlen
//返回值:=0 相等;=1大于;=2小于
uchar strcmp1(ucharx *pstr1,ucharx *pstr2,uchar strlen)
{
uchar i;
for(i=0;i<strlen;i++)
{
if(*(pstr1+i)>*(pstr2+i))return(1);
else if(*(pstr1+i)<*(pstr2+i))return(2);
}
return(0);
}
//======================================================================//
//涵数说明:将一个整型数转为ASCII型字符串(定长 3字节,不足高端填 0x30)
//入口参数:查询方式和条件存在于结构 findhistory 中
//出口参数:无
void IntToAsc(uint num,ucharx *pAsc)
{
uchar i,j;
i=num/100;
*pAsc=i|0x30;
j=(num-i*100)/10;
*(pAsc+1)=j|0x30;
*(pAsc+2)=((num-i*100-j*10)/1)|0x30;
}
//涵数说明:将一个BCD数转为ASCII型字符串,BCD数长strlen字节,转换后的长度为 2*strlen字节
//入口参数:BCD数存放指针 pzhm,BCD数长strlen,ASCII型字符串指针 dsppzhm
//出口参数:无
void BcdToAsc(ucharx *pzhm,ucharx *dsppzhm,uchar strlen)
{
uchar i;
for(i=0;i<strlen;i++)
{
*(dsppzhm+2*i)=(*(pzhm+i))>>4&0x0f|0x30;
*(dsppzhm+2*i+1)=(*(pzhm+i))&0x0f|0x30;
}
}
uchar batch_ctrl(findhistoryx *p_ctrl,uchar key)
{
ucharx *p_history;
ucharx *p_bmp;
uintx oldfirst;
uintx oldsecond;
ucharx oldcurrline;
uintx oldfirstlabel;
uintx oldsecondlabel;
uintx oldcurrlinelabel;
uint nums;
uchar i,y;
ucharx oldcurr=0;
ucharx labelno[3];
ucharx dsppzhm[8];
uchar f_refresh=0; //整个列表框刷新标志(refrsh,select,pageup,pagedn)
uchar f_headref=1;
uchar f_headrev=0; //选择框反白标志
uchar f_cursor=0; //光标条上下移动(选择框中文本刷新)标志
ucharx old_flag=0;
uintx old_records;
if(key==KEYESC)return(KEYESC);
if(p_ctrl->records!=0) //至少有一条以上的记录时才处理键
{
switch(key)
{
case KEYREFRSH: //初始化刷新下查 p_ctrl->maxdspline 条
{
oldcurrline=p_ctrl->currline;
oldfirstlabel=p_ctrl->ppzhm[0].label;
oldsecondlabel=p_ctrl->ppzhm[1].label;
old_records=p_ctrl->records;
oldfirst=p_ctrl->ppzhm[0].offset;
oldsecond=p_ctrl->ppzhm[1].offset;
oldcurrlinelabel=p_ctrl->ppzhm[oldcurrline-1].label;
if((IsDoInit==2)&&(p_ctrl->mode==6))
{
old_flag=1;
IsDoInit=0;
}
if((IsDoInit==0)||(IsDoInit==1))
{
p_ctrl->ppzhm[0].offset=0;
p_ctrl->ppzhm[0].label=1;
if(p_ctrl->mode==6)
{
p_ctrl->records=SearchAll(p_ctrl,(ucharx *)PLJL_START,PLJL_MAX_LEN); //批量记录 //计算列表框内可以显示的行数(此项属性p_ctrl->maxdspline不受控,由外框尺寸计算而修改)
if(p_ctrl->records==0)
{
//YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
//YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
return(NOKEY);
}
p_ctrl->maxdspline=(p_ctrl->box_bottom-p_ctrl->box_top-2)/(p_ctrl->lineinter);
if((p_ctrl->maxdspline)>(p_ctrl->records)) p_ctrl->maxdspline=(uchar)(p_ctrl->records); //实际显示的行数
// SearchNow(p_ctrl,(ucharx *)PLJL_START,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)PLJL_END,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);
if(old_flag==1)
{
if(oldcurrline>(p_ctrl->records)) p_ctrl->currline=(uchar)p_ctrl->records;
if((p_ctrl->records)>(p_ctrl->maxdspline))
{
// if(oldfirstlabel>(p_ctrl->records)) oldfirstlabel=p_ctrl->records;
// if((oldfirstlabel+p_ctrl->maxdspline-1)>p_ctrl->records)
// p_ctrl->ppzhm[0].label=p_ctrl->records-p_ctrl->maxdspline+1;
p_ctrl->ppzhm[0].label=oldfirstlabel;
p_ctrl->ppzhm[0].offset=oldfirst;
if((oldcurrline==1)&&(old_records>p_ctrl->records))
{
p_ctrl->ppzhm[0].offset=oldsecond;
p_ctrl->ppzhm[0].label=oldsecondlabel;
}
if((p_ctrl->ppzhm[0].label>oldcurrlinelabel)&&(old_records>p_ctrl->records)) p_ctrl->ppzhm[0].label--;
SearchNow(p_ctrl,(ucharx *)PLJL_END,((p_ctrl->maxdspline)|0x80),0x0,PLJL_MAX_LEN);
}
}
}
else
{
p_ctrl->records=SearchAll(p_ctrl,(ucharx *)HISTORY_START,550); //历史记录 //计算列表框内可以显示的行数(此项属性p_ctrl->maxdspline不受控,由外框尺寸计算而修改)
if(p_ctrl->records==0)
{
//YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
//YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
return(NOKEY);
}
p_ctrl->maxdspline=(p_ctrl->box_bottom-p_ctrl->box_top-2)/(p_ctrl->lineinter);
if((p_ctrl->maxdspline)>(p_ctrl->records)) p_ctrl->maxdspline=(uchar)(p_ctrl->records); //实际显示的行数
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
}
}
else
{
// if(p_ctrl->mode==6)
// {
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,0x0,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
// SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,0x0,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
// }
// else
// {
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,((p_ctrl->maxdspline)|0x80),0x0,HISTORY_MAX_LEN);
// }
}
f_refresh=1;
}break;
case KEYUP:
{
////////xht add
if((p_ctrl->currline==1)&&(p_ctrl->records<=p_ctrl->maxdspline))
{
oldcurr=p_ctrl->currline;
p_ctrl->currline=(unsigned char)p_ctrl->records;
f_cursor=1;
break;
}
/////////end xht add
if(p_ctrl->currline==1) //如果当前行=首行
{
if(p_ctrl->mode==6)
{
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)&0x7f,0x1,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)&0x7f,0x1,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
}
else
{
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)&0x7f,0x1,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)&0x7f,0x1,HISTORY_MAX_LEN);
}
f_refresh=1;
}
else
{
oldcurr=p_ctrl->currline;
p_ctrl->currline--;
f_cursor=1;
}
TimerType=TimerKeyOn;
}break;
case KEYDOWN:
{
///////////xht add
if((p_ctrl->currline==p_ctrl->records)&&(p_ctrl->records<=p_ctrl->maxdspline))
{
oldcurr=p_ctrl->currline;
p_ctrl->currline=1;
f_cursor=1;
break;
}
//////////end of xht add
if(p_ctrl->currline==p_ctrl->maxdspline) //如果当前行=尾行
{
if(p_ctrl->mode==6)
{
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,0x1,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,0x1,PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
}
else
{
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)|0x80,0x1,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)|0x80,0x1,HISTORY_MAX_LEN);
}
f_refresh=1;
}
else
{
oldcurr=p_ctrl->currline;
p_ctrl->currline++;
f_cursor=1;
}
TimerType=TimerKeyOn;
}break;
case KEYPAGEUP:
{
if((p_ctrl->records)<=(p_ctrl->maxdspline)) break;
if(p_ctrl->mode==6)
{
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)&0x7f,1,PLJL_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)&0x7f,1,PLJL_MAX_LEN);
}
else
{
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)&0x7f,1,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline-1)&0x7f,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)&0x7f,1,HISTORY_MAX_LEN);
}
f_refresh=1;
TimerType=TimerKeyOn;
}break;
case KEYPAGEDOWN:
{
if((p_ctrl->records)<=(p_ctrl->maxdspline)) break;
if(p_ctrl->mode==6)
{
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
// SearchNow(p_ctrl,(ucharx *)PLJL_START,(p_ctrl->maxdspline)|0x80,1,PLJL_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),PLJL_MAX_LEN); //顺序上查 p_ctrl->maxdspline 条
SearchNow(p_ctrl,(ucharx *)PLJL_END,(p_ctrl->maxdspline)|0x80,1,PLJL_MAX_LEN);
}
else
{
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
// SearchNow(p_ctrl,(ucharx *)HISTORY_START,(p_ctrl->maxdspline)|0x80,1,HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline-1)|0x80,(p_ctrl->maxdspline-1),HISTORY_MAX_LEN);
SearchNow(p_ctrl,(ucharx *)HISTORY_END,(p_ctrl->maxdspline)|0x80,1,HISTORY_MAX_LEN);
}
f_refresh=1;
TimerType=TimerKeyOn;
}break;
case KEYENTER:
{
Save_RestoreHistory(&(p_ctrl->properties_len),&TEMPSTART[0],111);
if(p_ctrl->listvalid==1)
{
YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
p_ctrl->listvalid=0;
// YJHRestoreWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x1,&pwindow[0]);
}
i=p_ctrl->currline; //当前光标行所在的历史记录在总条数中的绝对同步
RecordOffset=p_ctrl->ppzhm[i-1].offset;
p_history=(ucharx *)(HISTORY_START+RecordOffset*HISTORY_LEN); //找到该条历史记录的起始地址
if(p_ctrl->mode==6)
{
p_history=(ucharx *)(PLJL_START+RecordOffset*HISTORY_LEN); //开始读当前光标行所在的历史记录
}
/*
for(i=0;i<13;i++)
{
YJHReadFlashToExterMem(0x2,HistoryLen[i],p_history+PhistoryOffset[i],(ucharx *)(&NowMM.Account[0]+PNowmmOffset[i]));
}
MakeDataToAsc(); //将NomMM中的有关BCD码数据转换为ASCII数据
*/
return(KEYENTER);
}break;
case KEYSELECT:
{
/*
f_headref=0;
if(p_ctrl->kind!=0) //如果带选择框
{
if(p_ctrl->listvalid==0)
{
p_ctrl->listvalid=1;
YJHSaveWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,&LCD_Bffer[0]);
f_refresh=1;
}
else
{
p_ctrl->listvalid=0;
YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
RestoreWindow((ucharx *)&LCD_Bffer[0]);
i=p_ctrl->currline; //当前光标行所在的历史记录在总条数中的绝对同步
RecordOffset=p_ctrl->ppzhm[i-1].offset;
p_history=(ucharx *)(HISTORY_START+RecordOffset*HISTORY_LEN); //找到该条历史记录的起始地址
if(p_ctrl->mode==6)
{
p_history=(ucharx *)(PLJL_START+RecordOffset*HISTORY_LEN); //开始读当前光标行所在的历史记录
}
for(i=0;i<13;i++)
{
YJHReadFlashToExterMem(0x2,HistoryLen[i],p_history+PhistoryOffset[i],(ucharx *)(&NowMM.Account[0]+PNowmmOffset[i]));
}
MakeDataToAsc(); //将NomMM中的有关BCD码数据转换为ASCII数据
f_refresh=0;
f_headrev=1;
return(KEYSELECT);
}
}
*/
return(KEYSELECT);
}break;
case KEYREV:
{
f_headrev=1;
}break;
case KEYESC:
{
return(KEYESC);
}break;
default:
{
return(NOKEY);
break;
}
}
}
if(f_refresh==1)
{
if(p_ctrl->listvalid==1) //如果列表框部分有效才显示
{
YJHClearWindow(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x00);
YJHDrawRectangle(p_ctrl->box_left,p_ctrl->box_top,p_ctrl->box_right,p_ctrl->box_bottom,0x03);
y=p_ctrl->first_y;
for(i=0;i<(p_ctrl->maxdspline);i++)
{
IntToAsc(p_ctrl->ppzhm[i].label,&labelno[0]); //整型数转为可直接显示的字符串
// DrawTab(p_ctrl->firstlable_x, y, 2, &labelno[1]);
if(labelno[0]=='0')
{
if(labelno[1]=='0')
DrawTab(p_ctrl->firstlable_x+6, y, 1, &labelno[2]);
else
DrawTab(p_ctrl->firstlable_x+3, y, 2, &labelno[1]);
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -