| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:单片机移植一个输入法,出现翻页字库到最后一个字无法选定,求大神指点
只看楼主 加入收藏
蛋蛋的蛋蛋
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-9-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
单片机移植一个输入法,出现翻页字库到最后一个字无法选定,求大神指点
假如在拼音界面里,就像ABC输入法,翻到最后一页的最后一个字选择不了
假如输入wo
最后一页出现:1我 2窝 3握 4卧
4卧是最后一个字,就无法通过键盘4选定,而1、2、3都是正常的
搜索更多相关主题的帖子: 输入法 单片机 键盘 
2014-09-03 19:44
蛋蛋的蛋蛋
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-9-3
收藏
得分:0 
#include "IME.h"

const char graph_bar_imed[] = {0xFF,0xFF,0xE0,0x17,0x4E,0xE0,0xB2,0x5E,0xE0,0xB5,0x4E,0xE0,
0xB5,0x5A,0xA0,0xB7,0x5C,0x40,0x17,0x4E,0x80,0xFF,0xFF,0x0,};

char GetCharAlpha(int key)
{
    switch (key)
    {
    case KEY_CTRL_XTT: return 'a';
    case KEY_CHAR_LOG: return 'b';
    case KEY_CHAR_LN: return 'c';
    case KEY_CHAR_SIN: return 'd';
    case KEY_CHAR_COS: return 'e';
    case KEY_CHAR_TAN: return 'f';
    case KEY_CHAR_FRAC: return 'g';
    case KEY_CTRL_FD: return 'h';
    case KEY_CHAR_LPAR: return 'i';
    case KEY_CHAR_RPAR: return 'j';
    case KEY_CHAR_COMMA: return 'k';
    case KEY_CHAR_STORE: return 'l';
    case KEY_CHAR_7: return 'm';
    case KEY_CHAR_8: return 'n';
    case KEY_CHAR_9: return 'o';
    case KEY_CHAR_4: return 'p';
    case KEY_CHAR_5: return 'q';
    case KEY_CHAR_6: return 'r';
    case KEY_CHAR_MULT: return 's';
    case KEY_CHAR_DIV: return 't';
    case KEY_CHAR_1: return 'u';
    case KEY_CHAR_2: return 'v';
    case KEY_CHAR_3: return 'w';
    case KEY_CHAR_PLUS: return 'x';
    case KEY_CHAR_MINUS: return 'y';
    case KEY_CHAR_0: return 'z';
    default: return 0;
    }
}

int read_pinyin(char * pin)
{
    unsigned char * b, * buf = 0;
    FONTCHARACTER fontc[50];
    int handle;
    short size;
    unsigned char * p;
   
    CharToFont("\\\\fls0\\PINYIN.db", fontc);
    handle = Bfile_OpenFile(fontc, _OPENMODE_READ);
    size = Bfile_GetFileSize(handle);
   
    b = (char*) malloc(size + 1);
    Bfile_ReadFile(handle, b, size, 0);
    memset(py, 0, 200);
   
    buf = strstr(b, pin);
    if (buf == 0)
    {
        free(b);
        Bfile_CloseFile(handle);
        return 0;
    }
   
    while (!(*(buf - 1) & 0x80))
    {
        buf = strstr(buf + 1, pin);
        if (buf == 0)
        {
            free(b);
            Bfile_CloseFile(handle);
            return 0;
        }
    }
   
    while (!((*++buf) & 0x80));
    p = py;
   
    while ((*buf) & 0x80)
        *p++ = *buf++;
    *p = 0;
   
    free(b);
    Bfile_CloseFile(handle);
}

void PinyinFace(char * p_srcbuf, int * p_p)
{
    char sTmp[50], sInputBuf[50] = "";
    int iTmpLen;
    int iPYPage, key, i;
   
    while (1) {
        AreaClr(0, 0, 127, 55);
        PrintChStr(p_srcbuf, 0, 0);
   
        AreaClr(2, 26, 124, 52);
        AreaClr(1, 56, 20, 63);
        DrawPic(1, 56, 19, 8, graph_bar_imed);
      
        PrintMini(5, 28, sInputBuf, 0);
   
        if (*py)
            for (i = 0; ; i += 2)
            {
                iTmpLen = (float) i / 2;
               
                sprintf(sTmp, "%d.", iTmpLen + 1);
                PrintMini(5 + 23 * iTmpLen, 42, sTmp, 0);
                iTmpLen = 13 + 23 * ((float) i / 2);
               
                PrintChChar(py[i + iPYPage * 10], py[i + iPYPage * 10 + 1], iTmpLen, 39);
                if ((py[i + iPYPage * 10 + 1] == 0) || i >= 8) break;
            }
        
        GetKey(&key);
        if (key == KEY_CTRL_F1)
{memset(py, 0, 200);
            break;}
        else if (key == KEY_CTRL_EXIT)
        {
            memset(py, 0, 200);
            memset(sInputBuf, 0, 50);
        }
        else if (key == KEY_CTRL_EXE)
        {
            iPYPage = 0;
            read_pinyin(sInputBuf);
        }
        else if (key == KEY_CTRL_DEL)
        {
            if (*sInputBuf)
                sInputBuf[strlen(sInputBuf) - 1] = 0;
        }
        else if (key == KEY_CTRL_RIGHT && (iPYPage + 1) * 10 < strlen(py))
            ++iPYPage;
        else if (key == KEY_CTRL_LEFT && iPYPage > 0)
            --iPYPage;
        else
        {
            if (*py) {
                if ((key >= 0x31) && (key <= 0x35) && py[iPYPage * 10 + (key - 0x31) * 2])
                {
                    p_srcbuf[++(*p_p)] = py[iPYPage * 10 + (key - 0x31) * 2];

                    p_srcbuf[++(*p_p)] = py[iPYPage * 10 + (key - 0x31) * 2 + 1];
                        
                    

                    memset(sInputBuf, 0, 50);
                }
            }
            else {
                if (GetCharAlpha(key))
                    sInputBuf[strlen(sInputBuf)] = GetCharAlpha(key);
            }
        }
    }
}
2014-09-03 19:44
蛋蛋的蛋蛋
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-9-3
收藏
得分:0 
源代码在上面,求助
2014-09-03 19:44
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:20 
代码缺少应有的注释 不是一个良好的习惯 不过加密都不错
2014-09-03 21:01
快速回复:单片机移植一个输入法,出现翻页字库到最后一个字无法选定,求大神指点 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025184 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved