易码技术论坛

 找回密码
 加入易码
搜索
查看: 184444|回复: 9

关于INPUT 帮帮我

[复制链接]
发表于 2005-10-3 16:08:00 | 显示全部楼层
谁来帮我呀?
发表于 2005-10-3 18:48:00 | 显示全部楼层

  1. [color=#3399ff]    #define FONT_SMA    0
  2.     #define FONT_LAR    1
  3.     #define EDIT_INS    0
  4.     #define EDIT_OVR    1
  5.     #define KEY_LEFT    23
  6.     #define KEY_RIGHT   22
  7.     #define KEY_UP      20
  8.     #define KEY_DOWN    21
  9.     #define KEY_ENTER   13
  10.     #define KEY_SHIFT   18
  11.     #define KEY_CAPS    26
  12.     #define KEY_ESC     27
  13.     #define KEY_HELP    25
  14.     #define KEY_SPC     32
  15.     #define KEY_F1      28
  16.     #define KEY_F2      29
  17.     #define KEY_F3      30
  18.     #define KEY_F4      31[/color]
  19.     [color=#339933]//文字缓存[/color]
  20.     [color=#0000ff]char[/color] textBuf[100];
  21.     [color=#339933]//保存地址,长度,显示坐标,字体[/color]
  22.     [color=#0000ff]char[/color] Input(long textAdd,[color=#0000ff]char[/color] length,[color=#0000ff]char[/color] textX,[color=#0000ff]char[/color] textY,[color=#0000ff]char[/color] font){
  23.         [color=#0000ff]char[/color] strPt;[color=#339933]//字串指针、长度[/color]
  24.         [color=#0000ff]char[/color] curX,curY,curL;[color=#339933]//光标坐标、长度[/color]
  25.         int word;[color=#339933]//获得的单个字符的ASCII或GB码[/color]
  26.         [color=#0000ff]char[/color] editMode;
  27.         strPt=0;
  28.         word=0;
  29.         editMode=EDIT_INS;
  30.         [color=#0000ff]if[/color](font==FONT_SMA){[color=#339933]//判断字体[/color]
  31.             curL=6;
  32.             curY=textY+11;
  33.         }
  34.         [color=#0000ff]else[/color]{
  35.             curL=8;
  36.             curY=textY+15;
  37.         }
  38.         while(1){
  39.             Refresh();
  40.             TextOut(textX,textY,textAdd,0x40+0x80*font);[color=#339933]//显示当前字串[/color]
  41.             curX=textX+strPt*curL;
  42.             [color=#0000ff]if[/color](editMode==EDIT_INS){[color=#339933]//绘制光标[/color]
  43.                 [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){Line(curX,curY,curX+curL*2-1,curY,2);}
  44.                 [color=#0000ff]else[/color]{Line(curX,curY,curX+curL-1,curY,2);}
  45.             }[color=#0000ff]else[/color]{
  46.             [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){Box(curX,curY-curL*2,curX+curL*2-1,curY,1,2);}[color=#0000ff]else[/color]
  47.                 {Box(curX,curY-curL*2,curX+curL-1,curY,1,2);}
  48.             }
  49.             word=GetWord(3);
  50.             [color=#0000ff]if[/color](word==KEY_ENTER||word==KEY_ESC){[color=#0000ff]break[/color];}
  51.             [color=#0000ff]if[/color](word==KEY_F1){[color=#339933]//切换插入、覆盖[/color]
  52.                 [color=#0000ff]if[/color](editMode==EDIT_INS){editMode=EDIT_OVR;}
  53.                 [color=#0000ff]else[/color]{editMode=EDIT_INS;}
  54.                 [color=#0000ff]continue[/color];
  55.             }
  56.             [color=#0000ff]if[/color](word==KEY_LEFT){[color=#339933]//左移光标[/color]
  57.                 [color=#0000ff]if[/color](strPt>0){
  58.                     [color=#0000ff]if[/color](*(textAdd+strPt-1)>=0xa1){strPt=strPt-2;}
  59.                     [color=#0000ff]else[/color]{strPt--;}
  60.                 }
  61.                 [color=#0000ff]continue[/color];
  62.             }
  63.             [color=#0000ff]if[/color](word==KEY_RIGHT){[color=#339933]//右移光标[/color]
  64.                 [color=#0000ff]if[/color][color=#0000ff][color=#000000](strPt<strlen(textAdd)){<STRLEN(TEXTADD){<STRLEN(TEXTADD)){< FONT>
  65. [/color][color=#0000ff]                    if[/color](*(textAdd+strPt)>=0xa1){strPt=strPt+2;}
  66.                     [color=#0000ff]else[/color]{strPt++;}
  67.                 }
  68.                 [color=#0000ff]continue[/color];
  69.             }   
  70.             [color=#0000ff]if[/color](word==KEY_F2){[color=#339933]//删除字符[/color]
  71.                 [color=#0000ff]if[/color](*(textAdd+strPt)==NULL){
  72.                     [color=#0000ff]if[/color](strPt>0){
  73.                         [color=#0000ff]if[/color](*(textAdd+strPt-1)>=0xa1){strPt=strPt-2;}
  74.                         [color=#0000ff]else[/color]{strPt--;}
  75.                     }
  76.                 }
  77.                 [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){strcpy(textBuf,textAdd+strPt+2);}
  78.                 [color=#0000ff]else[/color] [color=#0000ff]if[/color](*(textAdd+strPt)!=0){strcpy(textBuf,textAdd+strPt+1);}
  79.                 strcpy(textAdd+strPt,textBuf);
  80.                 [color=#0000ff]continue[/color];
  81.             }
  82.             [color=#339933]//加入字符[/color]
  83.             [color=#0000ff]if[/color](!isgraph(word&0xff) && (word>>8==0)){[color=#0000ff]continue[/color];}[color=#339933]//合法字符[/color]
  84.             [color=#0000ff]if[/color](editMode==EDIT_INS||*(textAdd+strPt)==NULL){[color=#339933]//插入模式,或是光标在最后为新加的字符腾出空间[/color]
  85.                 [color=#0000ff]if[/color](word>>8!=0&&strlen(textAdd)>=length-1){[color=#0000ff]continue[/color];}[color=#339933]//判断长度是否超过规定长度[/color]
  86.                 [color=#0000ff]if[/color](word>>8==0&&strlen(textAdd)>=length){[color=#0000ff]continue[/color];}
  87.                 strcpy(textBuf,textAdd+strPt);
  88.             [color=#0000ff]    if[/color](word>>8!=0){strcpy(textAdd+strPt+2,textBuf);}
  89.             [color=#0000ff]    else[/color]{strcpy(textAdd+strPt+1,textBuf);}
  90.             }
  91.             [color=#0000ff]if[/color](word>>8!=0){[color=#339933]//汉字[/color]
  92.                 [color=#0000ff]if[/color](*(textAdd+strPt)<0xA1&&editMode==EDIT_OVR){[color=#339933]//覆盖英文或数字[/color]
  93.                     [color=#0000ff]if[/color](strlen(textAdd)>=length)[color=#0000ff]continue[/color];
  94.                     strcpy(textBuf,textAdd+strPt);
  95.                     strcpy(textAdd+strPt+1,textBuf);
  96.                 }
  97.                 *(textAdd+strPt)=word&0xff;
  98.                 *(textAdd+strPt+1)=word>>8;
  99.                 strPt=strPt+2;
  100.             }[color=#0000ff]else[/color]{[color=#339933]//英文或数字[/color]
  101.                 [color=#0000ff]if[/color](strlen(textAdd)>=length&&*(textAdd+strPt)==NULL)[color=#0000ff]continue[/color];
  102.                 [color=#0000ff]if[/color](*(textAdd+strPt)>=0xA1&&editMode==EDIT_OVR){[color=#339933]//覆盖汉字[/color]
  103.                     strcpy(textBuf,textAdd+strPt+1);
  104.                     strcpy(textAdd+strPt,textBuf);
  105.                 }
  106.                 *(textAdd+strPt)=word&0xff;
  107.                 strPt++;
  108.                 }
  109.         }
  110.         [color=#0000ff]if[/color](word==KEY_ESC)[color=#0000ff]return[/color] 0;
  111.         [color=#0000ff]return[/color]!0;
  112.     }

  113.     [color=#0000ff]void[/color] main(){
  114.         [color=#0000ff]char[/color] text[20];
  115.         memset(text,0,20);
  116.         Input(text,18,10,10,1);
  117.     }
  118.    
复制代码
 楼主| 发表于 2005-10-4 17:51:00 | 显示全部楼层
这么长~~~
 楼主| 发表于 2005-10-4 17:59:00 | 显示全部楼层
怎么只能输入数字  不能是汉字吗???
发表于 2005-10-5 14:35:00 | 显示全部楼层
模拟器上不能切换输入法,你下载到WQX上面就可以了
 楼主| 发表于 2005-10-6 18:03:00 | 显示全部楼层
o  
发表于 2005-10-7 14:12:00 | 显示全部楼层
能不能缩短到只能输入数字???

TC800不支持这一种输入汉字的模式!

所以浪费长度!
发表于 2005-10-7 14:15:00 | 显示全部楼层
TC800的话要自己写那个GetWord函数
发表于 2005-12-13 18:57:00 | 显示全部楼层
可惜的只是输入一行,有什么用?

TC800上的GetWord

已经写好了,

不过,只能用拼音输入法

可惜的是输入多行时不好处理,请高手帮忙
 楼主| 发表于 2005-10-2 19:39:08 | 显示全部楼层 |阅读模式
如果要在游戏中输入玩家姓名   LAVA1.0中怎样实现"INPUT"呀????
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2025-8-24 18:07 , Processed in 0.020157 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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