📄 lcd_pop.c
字号:
{
if(GetIn() != OK)
continue;
if(GetMainMode() != CurrMode)
return NG;
if(InCmd == KD_CLEAR)
continue;
if(InCmd != KD_ENTER)
return NG;
if(!numcnt)
return NG;
return OK;
}
return OK;
}
/*----------------------------------------------------------------------------*
* 函数功能:
* 根据传入的字符串 以及显示按键的大小, 通过按键的选择实现功能的选择.
* 输入参数:
* **Str -- 一个指针数组, 其单元指向需要显示的字符串
* Size_Tab -- 需要显示的各按键的基本大小
* 限于输入数据可选的情况调用.
*----------------------------------------------------------------------------*/
byte Get_Btn_Choice_Input(char **Str, byte Size, byte num)
{
byte i,j,k;
byte hor_size;
byte vrt_size;
byte posi = 0;
word key;
Lcd_Pop_Flag = 1;
vrt_size = Size>>4;
hor_size = Size&0x0f;
for(i = 0; i < num ; i++)
{
posi = ((i*hor_size)/6)*vrt_size*6 + (i*hor_size)%6;
if(posi >= 18)
break;
Pop_Btn[posi].posi = posi;
Pop_Btn[posi].fill_color = DARKGREEN;
Pop_Btn[posi].font_color = YELLOW;
Pop_Btn[posi].size = Size; //注意如果不是单键, 需要对旁边相关按键的size 进行更新
memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
Lcd_Draw_Button_Ex(Pop_Btn[posi],Str[i], strlen(Str[i]), ALIGN_MID);
}
InCmd = KD_NULL;
lnum = 0;
numcnt = 0;
while(1)
{
key = GetKey();
if(GetMainMode() != CurrMode)
{
Rst_ProgPop_Key_LayOut();
return NG;
}
if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
{
key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
key = (key/6/vrt_size)*(6/hor_size) + (key%6)/hor_size;
if(key >= num) continue;
numcnt = 1;
lnum = key;
Rst_ProgPop_Key_LayOut();
return OK;
}
else if(key == KD_CANCEL)
{
Rst_ProgPop_Key_LayOut();
return NG;
}
bellcnt = 0x01;
}
Rst_ProgPop_Key_LayOut();
return NG;
}
/*----------------------------------------------------------------------------*
* 函数功能:
* 如果只有2种选择, 可以使用此函数实现选择按键的特殊显示效果
* 输入参数:
* **Str -- 一个指针数组, 其单元指向需要显示的字符串
* Size -- 只能为0x22
* num -- 只能为2
* *result -- 返回的结果. YES-1 / NO-0
* 返回值:
* OK -- 得到所需要的选择
* NG -- 没有得到选择, 强制被退出
*
*----------------------------------------------------------------------------*/
byte Get_Btn_Choice_Input_Ex(char **Str, byte Size, byte num, BYTE *result)
{
byte i,j,k;
byte hor_size;
byte vrt_size;
byte posi = 0;
word key;
BYTE ret = NG;
BYTE len ;
Lcd_Pop_Flag = 1;
Size = 0x22; //由于函数的特殊效果, 只能是这样的参数输入
num = 2;
vrt_size = Size>>4;
hor_size = Size&0x0f;
for(i = 0; i < 2 ; i++)
{
if(i == 0) posi = 0;
else if(i == 1) posi = 4;
Pop_Btn[posi].posi = posi;
Pop_Btn[posi].fill_color = DARKGREEN;
Pop_Btn[posi].font_color = YELLOW;
Pop_Btn[posi].size = Size; //注意如果不是单键, 需要对旁边相关按键的size 进行更新
memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
len = (strlen(Str[i])>= MAX_LCD_TEXT? MAX_LCD_TEXT : strlen(Str[i]));
memcpy(Pop_Btn[posi].desc, Str[i], len);
Pop_Btn[posi].desc[MAX_BTN_DESC_LEN] = 0;
Lcd_Draw_Button(Pop_Btn[posi]);
}
*result = KD_NO;
while(1)
{
key = GetKey();
if(GetMainMode() != CurrMode)
{
ret = NG;
break;
}
if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
{
key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
if(key/6 >= vrt_size)
continue;
if(key%6 < hor_size)
{
*result = KD_YES;
ret = OK;
break;
}
else if(key%6 >= 6-hor_size)
{
*result = KD_NO;
ret = OK;
break;
}
else /*输入非YES,也非NO,所以继续等待*/
{
}
}
else if(key == KD_CANCEL)
{
ret = NG;
break;
}
bellcnt = 0x01;
}
Rst_ProgPop_Key_LayOut();
return (ret);
}
/*----------------------------------------------------------------------------*
* 只显示数字输入画面,
* 完成数字的输入
* 使用 Enter 确认输入
* 使用 Cancel 退出界面, 返回到上一层界面.
*----------------------------------------------------------------------------*/
extern const char Str_Modify_Step[][2*MAX_TEXT+1];
byte Lcd_Digit_GetIn(void)
{
byte resault = NG;
const word *Bak_Key_Tab;
const byte *Bak_Key_Tab_Size;
Bak_Key_Tab = Ts_Key_Tab;
Bak_Key_Tab_Size = Ts_Key_Table_Size;
Ts_Key_Tab = Ts_Digit_Input_Tab;
Ts_Key_Table_Size = Ts_Digit_Input_Tab_Size;
Lcd_Layout_Draw_Key();
Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
while(1)
{
if(GetIn() != OK)
continue;
if(GetMainMode() != CurrMode)
{
resault = NG;
break;
}
if(InCmd == KD_CLEAR)
continue;
else if(InCmd == KD_ENTER)
{
resault = OK;
break;
}
else if(InCmd == SPLU)//注意需要特殊处理, 要考虑社那么时候允许条码输入
{
numcnt = 1;
resault = OK;
break;
}
else if(InCmd == KD_CANCEL)
{
resault = NG;
break;
}
}
Ts_Key_Tab = Bak_Key_Tab;
Ts_Key_Table_Size = Bak_Key_Tab_Size;
Lcd_Layout_Draw_Key();
Lcd_Clr_Text_Btn(BUF_ID_TL_SUB, 0);
return resault;
}
/*----------------------------------------------------------------------------*
* 函数功能:
* 根据传入的字符 以及显示按键的大小, 通过按键的选择实现功能的选择.
* 输入参数:
* *Str -- 一个数组, 其单元需要显示的字符
* Size_Tab -- 需要显示的各按键的基本大小
* 限于输入数据可选的情况调用.
*----------------------------------------------------------------------------*/
byte Select_Btn_Symbol(char *Str, byte Size, byte num)
{
byte i,j,k;
byte hor_size;
byte vrt_size;
byte posi = 0;
word key;
Lcd_Pop_Flag = 1;
vrt_size = Size>>4;
hor_size = Size&0x0f;
for(i = 0; i < num ; i++)
{
posi = ((i*hor_size)/6)*vrt_size*6 + (i*hor_size)%6;
if(posi >= 18)
break;
Pop_Btn[posi].posi = posi;
Pop_Btn[posi].fill_color = DARKGREEN;
Pop_Btn[posi].font_color = YELLOW;
Pop_Btn[posi].size = Size; //注意如果不是单键, 需要对旁边相关按键的size 进行更新
memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
Pop_Btn[posi].desc[0] = Str[i];
Lcd_Draw_Button(Pop_Btn[posi]);
}
InCmd = KD_NULL;
lnum = 0;
numcnt = 0;
while(1)
{
key = GetKey();
if(GetMainMode() != CurrMode)
{
Rst_ProgPop_Key_LayOut();
return NG;
}
if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
{
key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
key = (key/6/vrt_size)*(6/hor_size) + (key%6)/hor_size;
if(key >= num) continue;
numcnt = 1;
lnum = key;
Rst_ProgPop_Key_LayOut();
return OK;
}
else if(key == KD_CANCEL)
{
Rst_ProgPop_Key_LayOut();
return NG;
}
bellcnt = 0x01;
}
Rst_ProgPop_Key_LayOut();
return NG;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -