📄 keyread.cpp
字号:
//Header: Keyread
//Version: 1.0
//Language: Borland C++ 2.0
//Environ: Any
//Purpose: Provide a function to acceive a string from keyboard using
// a conversation bar and a function to acceive a key value
// from keyboard
#include "keyread.hpp"
#include <string.h>
// #include <bios.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
//input a string using input conversation bar
void key_read(char *value,int curx,int cury,int maxn,int wlen)
{
int i,ch,j,flag,inflag,curpos,dcount;
char *buf,*dbuf;
curpos = 0;
buf = new char[maxn];
dbuf = new char[wlen+1];
i=0; flag=0; inflag=0;
buf[0]='\x00';
dbuf[wlen]='\x00';
_setcursortype(_NORMALCURSOR);
gotoxy(curx,cury);
for(dcount=0; dcount<wlen; ++dcount)
{
if(strlen(value)<=wlen)
dbuf[dcount]=value[dcount];
else
dbuf[dcount]=value[dcount+strlen(value)-wlen];
}
cprintf("%s",dbuf);
curpos = strlen(dbuf);
do
{
ch=keyvl();
if(ch==Ins)
{
if(inflag==0)
{
inflag = 1;
_setcursortype(_SOLIDCURSOR);
}
else
{
inflag = 0;
_setcursortype(_NORMALCURSOR);
}
}
if(flag==0)
{
if(ch==LeftArrow)
{
strcpy(buf,value);
i=strlen(buf);
for(dcount=0; dcount<wlen; ++dcount)
{
if(i<=wlen)
{
dbuf[dcount] = buf[dcount];
curpos = i;
}
else
{
dbuf[dcount] = buf[dcount+i-wlen];
curpos = wlen;
}
}
if(i>0)
{
--i;
--curpos;
}
gotoxy(curx+curpos,cury);
}
else if(ch==Home)
{
strcpy(buf,value);
for(dcount=0; dcount<wlen-1; ++dcount)
dbuf[dcount]=buf[dcount];
gotoxy(curx,cury);
cprintf("%s",dbuf);
gotoxy(curx,cury);
curpos = 0;
i = 0;
}
else
{
gotoxy(curx,cury);
for(dcount=0; dcount<wlen; ++dcount)
cprintf("%c",' ');
gotoxy(curx,cury);
curpos = 0;
i = 0;
}
flag=1;
}
if(ch!=ENTER && ch!=ESC && ch!=BACKSPACE && (strlen(buf)<maxn || inflag==1)
&& ch!=LeftArrow && ch!=RightArrow && ch!=Del && ch!=Home && ch!=Ins
&& ch!=End && ch!=UpArrow && ch!=DownArrow && ch!=PgUp && ch!=PgDn)
{
if(inflag!=0)
{
if(i<maxn)
{
if(buf[i]=='\x00')
buf[i+1]='\x00';
buf[i] = ch;
++i;
}
}
else
{
for(j=strlen(buf); j>=i; --j)
buf[j+1]=buf[j];
buf[i] = ch;
++i;
}
if(curpos>=wlen)
{
for(dcount=0; dcount<wlen; ++dcount)
dbuf[dcount] = buf[i-wlen+dcount];
gotoxy(curx,cury);
cprintf("%s",dbuf);
curpos = strlen(dbuf);
}
else
{
for(dcount=0; dcount<wlen; ++dcount)
{
if(dcount<=strlen(buf))
dbuf[dcount] = buf[dcount+i-1-curpos];
else
dbuf[dcount] = '\x00';
}
gotoxy(curx,cury);
cprintf("%s",dbuf);
++curpos;
}
gotoxy(curx+curpos,cury);
}
if(ch==End)
{
i = strlen(buf);
if(i>=wlen)
curpos = wlen;
else
curpos = i;
for(dcount=0; dcount<wlen; ++dcount)
{
if(i>=wlen)
dbuf[dcount] = buf[dcount+i-wlen];
else
dbuf[dcount] = buf[dcount+i];
}
gotoxy(curx, cury);
cprintf("%s",dbuf);
gotoxy(curx+curpos,cury);
}
if(ch==BACKSPACE && i>0)
{
for(j=i-1;j<=strlen(buf);++j)
buf[j]=buf[j+1];
--i;
--curpos;
if(curpos<0)
curpos = 0;
for(dcount=0; dcount<wlen; ++dcount)
dbuf[dcount] = buf[dcount+i-curpos];
gotoxy(curx,cury);
for(dcount=0; dcount<wlen; ++dcount)
cprintf("%c",' ');
gotoxy(curx,cury);
cprintf("%s",dbuf);
gotoxy(curx+curpos,cury);
}
if(ch==Home)
{
i=0;
curpos=0;
gotoxy(curx,cury);
for(dcount=0; dcount<wlen; ++dcount)
if(dcount<=strlen(buf))
dbuf[dcount] = buf[dcount];
else
dbuf[dcount] = '\x00';
cprintf("%s",dbuf);
gotoxy(curx,cury);
}
if(ch==LeftArrow && i>0 && i<=strlen(buf))
{
--i;
--curpos;
if(curpos<0)
{
curpos = 0;
if(i>0)
--i;
gotoxy(curx, cury);
for(dcount=0; dcount<wlen; ++dcount)
{
dbuf[dcount] = buf[i+dcount];
cprintf("%c",' ');
}
gotoxy(curx,cury);
cprintf("%s",dbuf);
}
gotoxy(curx+curpos,cury);
}
if(ch==RightArrow && i>=0 && i<strlen(buf))
{
++i;
if(curpos>=wlen)
{
gotoxy(curx,cury);
if(i<strlen(buf))
++i;
for(dcount=0; dcount<wlen; ++dcount)
dbuf[dcount] = buf[i+dcount-wlen];
cprintf("%s",dbuf);
curpos = wlen;
}
if(curpos<wlen)
++curpos;
gotoxy(curx+curpos,cury);
}
if(ch==Del && i<maxn)
{
for(j=i;j<=strlen(buf); ++j)
buf[j]=buf[j+1];
for(dcount=curpos; dcount<wlen; ++dcount)
{
if((dcount-curpos+i)<=strlen(buf))
dbuf[dcount] = buf[i+dcount-curpos];
else
dbuf[dcount] = '\x00';
cprintf("%c",' ');
}
gotoxy(curx,cury);
cprintf("%s",dbuf);
gotoxy(curx+curpos,cury);
}
if(strlen(buf)>=maxn && ch!=LeftArrow && ch!=RightArrow && ch!=ENTER &&
ch!=ESC && ch!=Del && ch!=Home && inflag==0 && ch!=Ins && ch!=End)
{
sound(1000);
delay(20);
nosound();
}
}while(ch!=ENTER && ch!=ESC);
if(ch==ENTER)
strcpy(value,buf);
delete []buf;
delete []dbuf;
_setcursortype(_NORMALCURSOR);
}
//get a key value form keyboard
int keyvl(void)
{
int key_v;
int value;
key_v=bioskey(0);
value=key_v & 0x00ff;
if(value!=0) value=key_v & 0x00ff;
else value=key_v & 0xff00;
return(value);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -