- 注册时间
- 2004-9-4
- 最后登录
- 1970-1-1
|
发表于 2005-10-3 18:48:00
|
显示全部楼层
- [color=#3399ff] #define FONT_SMA 0
- #define FONT_LAR 1
- #define EDIT_INS 0
- #define EDIT_OVR 1
- #define KEY_LEFT 23
- #define KEY_RIGHT 22
- #define KEY_UP 20
- #define KEY_DOWN 21
- #define KEY_ENTER 13
- #define KEY_SHIFT 18
- #define KEY_CAPS 26
- #define KEY_ESC 27
- #define KEY_HELP 25
- #define KEY_SPC 32
- #define KEY_F1 28
- #define KEY_F2 29
- #define KEY_F3 30
- #define KEY_F4 31[/color]
- [color=#339933]//文字缓存[/color]
- [color=#0000ff]char[/color] textBuf[100];
- [color=#339933]//保存地址,长度,显示坐标,字体[/color]
- [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){
- [color=#0000ff]char[/color] strPt;[color=#339933]//字串指针、长度[/color]
- [color=#0000ff]char[/color] curX,curY,curL;[color=#339933]//光标坐标、长度[/color]
- int word;[color=#339933]//获得的单个字符的ASCII或GB码[/color]
- [color=#0000ff]char[/color] editMode;
- strPt=0;
- word=0;
- editMode=EDIT_INS;
- [color=#0000ff]if[/color](font==FONT_SMA){[color=#339933]//判断字体[/color]
- curL=6;
- curY=textY+11;
- }
- [color=#0000ff]else[/color]{
- curL=8;
- curY=textY+15;
- }
- while(1){
- Refresh();
- TextOut(textX,textY,textAdd,0x40+0x80*font);[color=#339933]//显示当前字串[/color]
- curX=textX+strPt*curL;
- [color=#0000ff]if[/color](editMode==EDIT_INS){[color=#339933]//绘制光标[/color]
- [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){Line(curX,curY,curX+curL*2-1,curY,2);}
- [color=#0000ff]else[/color]{Line(curX,curY,curX+curL-1,curY,2);}
- }[color=#0000ff]else[/color]{
- [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){Box(curX,curY-curL*2,curX+curL*2-1,curY,1,2);}[color=#0000ff]else[/color]
- {Box(curX,curY-curL*2,curX+curL-1,curY,1,2);}
- }
- word=GetWord(3);
- [color=#0000ff]if[/color](word==KEY_ENTER||word==KEY_ESC){[color=#0000ff]break[/color];}
- [color=#0000ff]if[/color](word==KEY_F1){[color=#339933]//切换插入、覆盖[/color]
- [color=#0000ff]if[/color](editMode==EDIT_INS){editMode=EDIT_OVR;}
- [color=#0000ff]else[/color]{editMode=EDIT_INS;}
- [color=#0000ff]continue[/color];
- }
- [color=#0000ff]if[/color](word==KEY_LEFT){[color=#339933]//左移光标[/color]
- [color=#0000ff]if[/color](strPt>0){
- [color=#0000ff]if[/color](*(textAdd+strPt-1)>=0xa1){strPt=strPt-2;}
- [color=#0000ff]else[/color]{strPt--;}
- }
- [color=#0000ff]continue[/color];
- }
- [color=#0000ff]if[/color](word==KEY_RIGHT){[color=#339933]//右移光标[/color]
- [color=#0000ff]if[/color][color=#0000ff][color=#000000](strPt<strlen(textAdd)){<STRLEN(TEXTADD){<STRLEN(TEXTADD)){< FONT>
- [/color][color=#0000ff] if[/color](*(textAdd+strPt)>=0xa1){strPt=strPt+2;}
- [color=#0000ff]else[/color]{strPt++;}
- }
- [color=#0000ff]continue[/color];
- }
- [color=#0000ff]if[/color](word==KEY_F2){[color=#339933]//删除字符[/color]
- [color=#0000ff]if[/color](*(textAdd+strPt)==NULL){
- [color=#0000ff]if[/color](strPt>0){
- [color=#0000ff]if[/color](*(textAdd+strPt-1)>=0xa1){strPt=strPt-2;}
- [color=#0000ff]else[/color]{strPt--;}
- }
- }
- [color=#0000ff]if[/color](*(textAdd+strPt)>=0xa1){strcpy(textBuf,textAdd+strPt+2);}
- [color=#0000ff]else[/color] [color=#0000ff]if[/color](*(textAdd+strPt)!=0){strcpy(textBuf,textAdd+strPt+1);}
- strcpy(textAdd+strPt,textBuf);
- [color=#0000ff]continue[/color];
- }
- [color=#339933]//加入字符[/color]
- [color=#0000ff]if[/color](!isgraph(word&0xff) && (word>>8==0)){[color=#0000ff]continue[/color];}[color=#339933]//合法字符[/color]
- [color=#0000ff]if[/color](editMode==EDIT_INS||*(textAdd+strPt)==NULL){[color=#339933]//插入模式,或是光标在最后为新加的字符腾出空间[/color]
- [color=#0000ff]if[/color](word>>8!=0&&strlen(textAdd)>=length-1){[color=#0000ff]continue[/color];}[color=#339933]//判断长度是否超过规定长度[/color]
- [color=#0000ff]if[/color](word>>8==0&&strlen(textAdd)>=length){[color=#0000ff]continue[/color];}
- strcpy(textBuf,textAdd+strPt);
- [color=#0000ff] if[/color](word>>8!=0){strcpy(textAdd+strPt+2,textBuf);}
- [color=#0000ff] else[/color]{strcpy(textAdd+strPt+1,textBuf);}
- }
- [color=#0000ff]if[/color](word>>8!=0){[color=#339933]//汉字[/color]
- [color=#0000ff]if[/color](*(textAdd+strPt)<0xA1&&editMode==EDIT_OVR){[color=#339933]//覆盖英文或数字[/color]
- [color=#0000ff]if[/color](strlen(textAdd)>=length)[color=#0000ff]continue[/color];
- strcpy(textBuf,textAdd+strPt);
- strcpy(textAdd+strPt+1,textBuf);
- }
- *(textAdd+strPt)=word&0xff;
- *(textAdd+strPt+1)=word>>8;
- strPt=strPt+2;
- }[color=#0000ff]else[/color]{[color=#339933]//英文或数字[/color]
- [color=#0000ff]if[/color](strlen(textAdd)>=length&&*(textAdd+strPt)==NULL)[color=#0000ff]continue[/color];
- [color=#0000ff]if[/color](*(textAdd+strPt)>=0xA1&&editMode==EDIT_OVR){[color=#339933]//覆盖汉字[/color]
- strcpy(textBuf,textAdd+strPt+1);
- strcpy(textAdd+strPt,textBuf);
- }
- *(textAdd+strPt)=word&0xff;
- strPt++;
- }
- }
- [color=#0000ff]if[/color](word==KEY_ESC)[color=#0000ff]return[/color] 0;
- [color=#0000ff]return[/color]!0;
- }
- [color=#0000ff]void[/color] main(){
- [color=#0000ff]char[/color] text[20];
- memset(text,0,20);
- Input(text,18,10,10,1);
- }
-
复制代码 |
|