易码技术论坛

 找回密码
 加入易码
搜索
查看: 488103|回复: 16

[推荐]一个TC800用的输入函数,支持英文,拼音,五笔

 关闭 [复制链接]
发表于 2006-7-19 06:27:00 | 显示全部楼层
printf("%s_%c",word,10);//这里加入了一个字符10是为了让文字不在第六行显示,10是一个换行符;


=================

楼主也太搞了吧,放着现成的\n换行不用,就算是用10换行也可以用\r呀....
发表于 2006-7-17 12:46:00 | 显示全部楼层
沙发!!!
发表于 2006-7-17 15:26:00 | 显示全部楼层
支持开源!
发表于 2006-7-17 15:29:00 | 显示全部楼层
支持!
发表于 2006-7-17 17:14:00 | 显示全部楼层
好东西,收藏了
发表于 2006-7-17 18:11:00 | 显示全部楼层
严重支持,收藏了。
发表于 2006-7-18 09:34:00 | 显示全部楼层
支持,收藏了。
发表于 2006-7-18 11:00:00 | 显示全部楼层
HOHO...不太感兴趣[em04]
发表于 2006-7-18 17:05:00 | 显示全部楼层
愿作者没有发代码吗?
发表于 2006-7-18 22:17:00 | 显示全部楼层
支持呀
发表于 2006-7-18 23:46:00 | 显示全部楼层
晕,我的本意是让开源让大家使用的...

不是再次拿来做函数的....

更完美的函数输入函数其实我已经做好了,

并被应用到了

Visual Lavo窗体系统中TextBox中,暂时受Lavo大赛限制,不能开源...

===============

System_WB2GB有个bug,我已经改了,但没有上传,就先贴在这里吧

  1. long System_WB2GB(int id,long ims,long buf,int bufsize)
  2. //返回值低16位:实际取词个数
  3. //返回值高16位:最大取词个数
  4. //id :取词的序数,从0开始
  5. //ims:待查找的五笔码
  6. //buf:返回五笔码对应的字词
  7. //bufsize:缓存区大小,强烈建议直接用sizeof(数组名)
  8. {
  9.    struct TABLE_P1 Addr;
  10.    struct TABLE_P2 Tab2;
  11.    int  max,num,len,i;
  12.    long pos,pos0;
  13.    char p1,p2;
  14.    char wbs[5];
  15.    char fds[MAX_FINDSTR];
  16. //   *buf=0;
  17.    if(id<0) return -1;
  18.    len=strlen(ims);
  19.    if(len<=0 | len>4) return -1;//五笔码长度越界
  20.    for(i=0;i<len;i++)
  21.    {//预处理编码
  22.       wbs[i]=tolower(*ims++);
  23.       if(!islower(wbs[i])) return -1;
  24.    }
  25.    wbs[i]=0;
  26.   #ifdef USE_QUEWEI
  27.    if(wbs[0]=='v' & isdigit(wbs[1]))
  28.    {//进入区位查找
  29.       if(System_QW2GB(&wbs[1],buf)==-1)
  30.          return -1;
  31.       else
  32.          return 0x00010001;
  33.    }
  34.   #endif
  35.    p1=wbs[0]-'a';
  36.    p2=wbs[1]-'a';
  37.    if(len==4)
  38.    {//编码长度:4
  39.       fseek(Wb_fp,(p1*25+p2)*Wb_tsize[1]+Wb_begin2,SEEK_SET);
  40.       fread(Tab2,1,Wb_tsize[1],Wb_fp);
  41.       if(!Tab2.num[0])
  42.          pos0=Tab2.search;
  43.       else
  44.          pos0=(Tab2.num[0]-1)*Wb_tsize[0]+Tab2.num[0]+Tab2.search;
  45.       fseek(Wb_fp,pos0,SEEK_SET);
  46.       max=len=Tab2.num[1];
  47.       num=sizeof(fds)-1;
  48.       fds[num]=0;
  49.       for(i=0;max>0;i++)
  50.       {//后面用到i
  51.          if(len<=num)
  52.             fread(fds,1,max,Wb_fp);
  53.          else
  54.             fread(fds,1,num,Wb_fp);
  55.          for(pos=-1;pos%2 & pos!=-fds;)
  56.             pos=strstr(fds+pos+1,&wbs[2])-fds;
  57.          if(pos>=0) break;
  58.          max=max-num;
  59.       }//end for i
  60.       if(pos==-fds) return -1;
  61.       pos=pos+num*i>>1;
  62.       fseek(Wb_fp,pos*Wb_tsize[0]+pos0+len,SEEK_SET);
  63.    }
  64.    else if(len==3)
  65.    {//编码长度:3
  66.       fseek(Wb_fp,(p1*25+p2)*Wb_tsize[1]+Wb_begin2,SEEK_SET);
  67.       fread(Tab2,1,Wb_tsize[1],Wb_fp);
  68.       fseek(Wb_fp,Tab2.search,SEEK_SET);
  69.       fread(fds,1,Tab2.num[0],Wb_fp);
  70.       pos=strchr(fds,wbs[2])-fds;
  71.       if(pos==-fds) return -1;
  72.       fseek(Wb_fp,pos*Wb_tsize[0],SEEK_CUR);
  73.    }
  74.    else if(len==2)
  75.       fseek(Wb_fp,(p1*25+p2)*Wb_tsize[1]+Wb_begin2,SEEK_SET);
  76.    else if(len==1)
  77.       fseek(Wb_fp,p1*Wb_tsize[0]+Wb_begin1,SEEK_SET);
  78.    fread(Addr,1,Wb_tsize[0],Wb_fp);
  79.    num=Addr.max-id;
  80.    pos=buf+num;
  81.    if(num<=0)
  82.       return -1;//序号越界或没找到
  83.    if(bufsize-num<Addr.len)
  84.       return  0;//缓存区过小
  85.    fseek(Wb_fp,Addr.pos,0);
  86.    fread(pos,1,Addr.len,Wb_fp);
  87.    pos0=buf;
  88.    for(i=0;i<Addr.max;)
  89.    {  if(i++>=id)
  90.          *buf++=pos-pos0;
  91.       pos=pos+strlen(pos)+1;
  92.    }
  93.    return Addr.max<<16|num;//num:返回词个数,max:最大词个数
  94. }

复制代码

发表于 2006-7-19 00:09:00 | 显示全部楼层
楼主开始并不知道你也在做这个东东的说。
发表于 2006-7-19 00:32:00 | 显示全部楼层
呵呵,我其实已经做的很完美了...

虽说最新版LavoMine还没上传,但大家可以看看我之前传上的版本...

http://www.lava8.com/bbs/article.php?filename=5048&extra=page%3D1

中的扫雷英雄榜的英雄名字的输入就用了

long VL_InputBoxEx(addr str,addr caption,addr text,long mode,int x0,int y0)

//str:待返回字串地址

//caption:标题内容,可为NULL

//Text:输入框初始内容,可为NULL

//mode:限制输入法种类和输入长度等,不细说了

//(x0,y0):输入窗体左上角坐标,取(-1,-1)时自动居中

用到我自己做的Visual Lavo(支持LavaX3.0以上,TC800可用)中的

TextBox和Form和窗体循环等,还有复制,剪切,粘贴,全选,插入时间的快捷菜单

支持在限定的输入法间切换,暂时只有英文(en/En/EN),数字,拼音,五笔..

天生就是一个有基本功能的记事本了,呵呵[em05]

不过,InputBoxEx也是VL的一部份,所以暂时不能公布源代码...

[em06][em06]
发表于 2006-7-19 00:48:00 | 显示全部楼层
对了,忘了回楼主了,既然我是开源的东东,自然是准许转载的....

改写和转载后注明一下出处就好,楼主顶楼做的就不错,就当帮我宣传一下好了..

另外,其实我是一般不大赞成改我提供的函数内部的...

因为我再次更新后可能函数内部和以前完全不同,大家再次修改会较麻烦,

而且为了速度,可能会牺牲程序可读性...

而接口是绝对不会变的....变了的话我就会用另一函数名了...
 楼主| 发表于 2006-7-21 09:21:00 | 显示全部楼层
谢谢诗诺比的指教!我对LAVA来说还在初级阶段,对于很很多的命令我还不能作到灵活运用,我会在你们的经验中积累经验的!
发表于 2007-5-1 03:18:32 | 显示全部楼层
reyrui
 楼主| 发表于 2006-7-17 12:22:08 | 显示全部楼层 |阅读模式
在任何一种输入法下都可以输入数字。

包中一共有三个文件:
wb2gb.dic   这是五笔字库(诗诺比制作);
五笔输入法.pac   这是下载到文曲星里看效果用的(本人制作);
五笔输入法.txt   这是程序中的源码,供大家参考,其中的关于long System_WB2GB(int id,long ims,long buf,int bufsize)的所有代码均参考了诗诺比的源程序,其它的是本人写的(有点乱,大家可以改一下);

现在这个程序能作为一个可以输入一屏字符的简单的文本编辑器使用,如果大家有兴趣作文本编辑器的不妨使用我写的这个 void inputword(char rowx,char rowy)函数,如果有高手能将这个函数简化,不要忘了到时候给我一份源程序哦!


[此贴子已经被作者于2006-7-17 12:57:16编辑过]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-4-30 04:03 , Processed in 0.016300 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表