?? descinput.c
字號(hào):
///////////////////////////////////////////////////////////////////////////////
// DescInput.c
//
// Copyright (c) 2006, WeiHua Technology Co., Ltd.
// All rights reserved.
//
// Modify by: Analy 2006-07-27
//
// Desription:
/*-------------------------------------------------------------*
The keyboard logical code:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 42
43 44 45 46 47 48
49 50 51 52 53 54
55 56 57 58 59 60
The letter layout:
1 2 3 4 5 Disp_Btn
6 7 8 9 0 NULL
A B C D E NULL
F G H I J SHIFT
K L M N O BACK_SPACE
P Q R S T CLEAR
U V W X Y DOUBLE_WIDTH
Z <SPACE>! " # LARGE_FONT
$ % & ' ( ENTER
) * + , - ENTER
shift 后的效果
SP1 SP2 SP3 SP4 SP5 Disp_Btn
SP6 SP7 SP8 SP9 SP10 NULL
a b c d e NULL
f g h i j SHIFT
k l m n o BACK_SPACE
p q r s t CLEAR
u v w x Y DOUBLE_WIDTH
z <SPACE>. / : LARGE_FONT
; < = > ? ENTER
@ [ \ ] _ ENTER
*-------------------------------------------------------------------*/
///////////////////////////////////////////////////////////////////////////////
#include "ecrsys.h"
#include "ftype.h"
#include "sysdata.h"
#include "data.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
#include "tft_disp.h"
#include "font.h"
#include "mathes.h"
#include "keydef.h"
#define MAX_DESC_EX_LEN (MAX_PRN_LEN * 2 + 2)
/*--------------------------------------------------------------------*
* The description of character code table *
*--------------------------------------------------------------------*/
#if COUNTRY == SWEDEN
#define SPCH_00 0x5B
#define SPCH_01 0x5C
#define SPCH_17 0x5D
#define CH_BK_SLASH 0x94 /* '\' */
#else
#define SPCH_00 142 /* 0x8E */
#define SPCH_01 148 /* 0x94 */
#define SPCH_17 143 /* 0x8F */
#define CH_BK_SLASH 0x5C
#endif
#define SYM_20AC 0x81 //歐元符號(hào)
#define SYM_0130 0x82 //拉丁大寫I
#define SYM_0131 0x83 //拉丁小寫i
const char Crncy_Symvol[] = {'$', SYM_20AC, 0xA2, 0xA3, 0xA5, '*'};
const byte code[] = {
#if TFT_SIZE == TFT_12INCH
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
#endif
0x31, 0x32, 0x33, 0x34, 0x35, 0xFF,
0x36, 0x37, 0x38, 0x39, 0x30, 0xFF,
0x41, 0x42, 0x43, 0x44, 0x45, 0xFF,
0x46, 0x47, 0x48, 0x49, 0x4A, 0xFF,
0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0xFF,
0x50, 0x51, 0x52, 0x53, 0x54, 0xFF,
0x55, 0x56, 0x57, 0x58, 0x59, 0xFF,
0x5A, 0x2E, 0x2C, 0x2D, 0x24, 0xFF,
0X23, 0x2B, 0x3D, 0x25, 0x2A, 0xFF,
0x20, 0x20, 0x20, 0xFF, 0xFF, 0xFF,
#if TFT_SIZE == TFT_12INCH
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
#endif
0x31, 0x32, 0x33, 0x34, 0x35, 0xFF,
0x36, 0x37, 0x38, 0x39, 0x30, 0xFF,
0x61, 0x62, 0x63, 0x64, 0x65, 0xFF,
0x66, 0x67, 0x68, 0x69, 0x6A, 0xFF,
0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0xFF,
0x70, 0x71, 0x72, 0x73, 0x74, 0xFF,
0x75, 0x76, 0x77, 0x78, 0x79, 0xFF,
0x7A, 0x2E, 0x2C, 0x2D, 0x24, 0xFF,
0X23, 0x2B, 0x3D, 0x25, 0x2A, 0xFF,
0x20, 0x20, 0x20, 0xFF, 0xFF, 0xFF,
#if TFT_SIZE == TFT_12INCH
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
#endif
0xC0, 0xC1, 0xC2, 0xC4, 0xC6, 0xFF,
0xC8, 0xC9, 0xCA, 0xCB, 0xDF, 0xFF,
0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xFF,
0xD2, 0xD3, 0xD4, 0xD6, SYM_0130,0xFF,
0xD9, 0xDA, 0xDB, 0xDC, 0xBF, 0xFF,
0x28, 0x29, 0x2F, 0x5C, 0x3F, 0xFF,
0x21, 0x40, 0x26, 0xBD, 0xBC, 0xFF,
0X5B, 0x5D, 0x22, 0x3A, 0x3B, 0xFF,
0xFF, 0xFF, 0xA2, 0xA3, 0xA5, 0xFF,
0x20, 0x20, 0x20, SYM_20AC,0xFF, 0xFF,
#if TFT_SIZE == TFT_12INCH
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
#endif
0xE0, 0xE1, 0xE2, 0xE4, 0xE6, 0xFF,
0xE8, 0xE9, 0xEA, 0xEB, 0xDF, 0xFF,
0xEC, 0xED, 0xEE, 0xEF, 0xF1, 0xFF,
0xF2, 0xF3, 0xF4, 0xF6, SYM_0131,0xFF,
0xF9, 0xFA, 0xFB, 0xFC, 0xBF, 0xFF,
0x28, 0x29, 0x2F, 0x5C, 0x3F, 0xFF,
0x21, 0x40, 0x26, 0xBD, 0xBC, 0xFF,
0X5B, 0x5D, 0x22, 0x3A, 0x3B, 0xFF,
0xFF, 0xFF, 0xA2, 0xA3, 0xA5, 0xFF,
0x20, 0x20, 0x20, 0xFF, 0xFF, 0xFF,
};
const WORD Desc_Input_KeyTab[] =
{
#if TFT_SIZE == TFT_12INCH
KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
#endif
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_BTN,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_NULL,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_LARGE_FONT,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_CAP_SHIFT,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_BACK_SPACE,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_CANCEL,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_DB_WIDTH,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_SYMBOLE,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_ENTER,
DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_ENTER
};
const byte Desc_Input_Key_Size[] =
{
#if TFT_SIZE == TFT_12INCH
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
#endif
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x11,
0x11, 0x11, 0x11,0x11, 0x11, 0x21,
0x13, 0x10, 0x10,0x11, 0x11, 0x01,
};
BUTTON_DEF Input_Btn; /*專用于顯示按鍵的輸入*/
/*----------------------------------------------------------------------------*
* 功能: 顯示可輸入字符與按鍵對(duì)應(yīng)的位置
* Btn: 當(dāng)前正在修改的按鍵. 由于PLU, DEPT, CLERK 等均需要使用按鍵直接操作,
* 所以要考慮按鍵實(shí)時(shí)顯示的效果.
* mode: 2 --- 按鍵名稱的輸入
* 1 --- 允許在輸入描述符同時(shí)設(shè)定字符的格式(是否為雙寬).
* 0 --- 在輸入描述符同時(shí)不能選擇字符格式的設(shè)定.
* flag: 2 --- 畫第二層的按鍵布局, 不需要畫控制按鍵
* 1 --- 畫第一層的按鍵布局, 不需要畫控制按鍵
* 0 --- 畫全新的按鍵布局.
* 字符所在按鍵的背景色統(tǒng)一為淺灰色, 字體為黑色.
* 需要準(zhǔn)備的工作:
* 1. 清空輸入緩沖區(qū)的顯示
* 2. 顯示可輸入鍵盤
*
*----------------------------------------------------------------------------*/
void Lcd_Desc_Input_Layout(byte mode, byte flag)
{
BUTTON_DEF Disp_Btn;
word Cmd;
char *str;
byte len;
byte i;
word j;
//清空輸入緩沖區(qū)的顯示
Lcd_Clr_Text_Btn(BUF_ID_TL_INPUT, 0);
//顯示可輸入鍵盤
for(i = 0; i < MAX_LAYOUT_KEY; i++)
{
Cmd = Desc_Input_KeyTab[i];
if(Cmd == DS_CHAR)//字符按鍵
{
Disp_Btn.fill_color = GRAY;
Disp_Btn.font_color = BLACK;
memset(Disp_Btn.desc, 0x20, MAX_BTN_DESC_LEN);
if(flag == 0)
j = i;
else
j = i + (word)MAX_LAYOUT_KEY*(flag-1);
if(code[j] == 0x20)
memcpy(Disp_Btn.desc,Str_Space, strlen(Str_Space));
else if(code[j] != 0xff)
Disp_Btn.desc[0] = code[j];
Disp_Btn.desc[MAX_BTN_DESC_LEN] = 0;
}
else if(Cmd == KD_SYMBOLE)
{
Disp_Btn.fill_color = Get_All_Key_Color(Cmd, 0);
Disp_Btn.font_color = Get_All_Key_Color(Cmd, 1);
memset(Disp_Btn.desc,0x20, MAX_BTN_DESC_LEN);
if(flag >= 3)
memcpy(Disp_Btn.desc, "NORMAL", 6);
else
memcpy(Disp_Btn.desc, "SYMBOL", 6);
}
else //控制按鍵,
{
if(flag == 0) //不是每次都需要畫控制按鍵,只在第一次畫鍵盤布局時(shí)才畫
{
if(mode == 0)
{
if(Cmd == KD_LARGE_FONT)
Cmd = KD_NULL;
}
else if((mode == 2)&&(Cmd == DS_BTN))
{
Lcd_Draw_Button(Input_Btn);
continue;
}
Disp_Btn.fill_color = Get_All_Key_Color(Cmd, 0);
Disp_Btn.font_color = Get_All_Key_Color(Cmd, 1);
Disp_Btn.desc[MAX_BTN_DESC_LEN] = Get_All_Key_Desc(Disp_Btn.desc,MAX_BTN_DESC_LEN, Cmd);
}
else
continue;
}
Disp_Btn.posi = i;
Disp_Btn.size = Desc_Input_Key_Size[i];
Lcd_Draw_Button(Disp_Btn);
}
}
byte Btn_Desc_Input(BUTTON_DEF *Btn)
{
byte i;
Input_Btn.size = 0x11;
for(i = 0; i < MAX_LAYOUT_KEY; i++)
{
if(Desc_Input_KeyTab[i] == DS_BTN)
break;
}
if(i >= MAX_LAYOUT_KEY)
return NG;
Input_Btn.posi = i;
Input_Btn.fill_color = Btn->fill_color;
Input_Btn.font_color = Btn->font_color;
memcpy(Input_Btn.desc, Btn->desc, MAX_BTN_DESC_LEN+1);
memset(Btn->desc, 0x20, MAX_BTN_DESC_LEN+1);
return Get_Desc(Btn->desc, MAX_BTN_DESC_LEN+1, 2);
}
byte Check_Key(byte code, byte flag)
{
if(flag == RIGHT)
{
if(code%10 >= 4)
return (code/10)*6 + (code%10 - 4);
}
else //if(flag == LEFT)
{
if(code%10 < 4)
return (code/10)*4 + (code%10);
}
return 0xff;
}
/*----------------------------------------------------------------------------*
* 功能: 輸入一個(gè)描述符, 將輸入的字符串放入desc_str[]中.
* 輸入?yún)?shù):
* *desc_str: 保存最后確定的輸入字符串
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -