Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Bios


Автор: shokky 15.4.2007, 15:30
Всем доброго времени суток... smile 
в Центре помощи по этому поводу никто ничего сказать не может....может тут кто-нибуть знает.....
тут вот возник вопрос...как сделать так чтобы текст вводился в нарисаванное окошко?
вот есть такой кодик....:
Код

#include <conio.h>
#include<iostream.h>
#include<graphics.h>

int main( void )
{
    char *text;
    int c;
    int gdriver=DETECT, gmode,errorcode;
    int midx,midy,i;
    initgraph(&gdriver,&gmode,"C:\\TC\\BGI");
    errorcode=graphresult();
    if(errorcode!=grOk)
     {
      cout<<"This is a grafic mistake\nPlease push down some box ";
      getch();
      return 1;
     }
    else
    {
    cleardevice();
    midx = getmaxx() / 2;
    midy = getmaxy() / 2;
    setbkcolor(BROWN);
    setfillstyle(1,14);
    bar(midx-50.0,midy-50.0,midx+50.0,midy+50.0);

i=0;
text=new char [20];
moveto(midx-50.0, midy-50.0);
cin.getline(text, 20);
outtextxy(midx-50.0, midy-50.0, text);
do {
    c=getche();
    ++i;
    if( i==11 )
    {
    i=0;
    clrscr();
    }
    } while( c!='$' );
closegraph();
return 0;
}
}

в нем текст вводится сначала в самом верхнем левом углу(как обычно) а потом уже 10 первых введенных символов после нажатия Enter записывается в левый верхний угол окошка smile 
как сделать так, чтоб он сразу писался в рамке и после десятого символа введенный туда текст стирался и курсор возвращался в левый верхний угол рамки?

Автор: vinter 15.4.2007, 16:00
Код

char str[size/*требуемый размер строки*/];
k = 0;
 while((c=getch())!=13&&/*добавь тут ограничение по границе рамке*/)
  {
    sprintf(str,"%c",c);
    outtextxy(x, y, str);
    k++;
    if(c==8)//backspace
       {
     k--;
     str[k]='\0';
     setfillstyle(SOLID_FILL,LIGHTCYAN);
     bar(/*по нужным координатам*/);
       }
    if(k == 9)
      {
          /*по координатам где написан текст, рисуем прямоугольник(закрашенный), и перемещаем курсор в требуемые координаты*/
          k = 0;
       }

  }
/*achtung это всего лишь идея, тут еще нужна косметика чтобы все нормально работало*/

Автор: shokky 15.4.2007, 17:11
vinter, спасибо большое за помощь.....но только у меня получилось исправить не все smile 
я смогла только вот что...
Код

#include <conio.h>
#include<iostream.h>
#include<graphics.h>

int main( void )
{
    char str[10];
    int k, c;
    int gdriver=DETECT, gmode,errorcode;
    int midx,midy,i;
    initgraph(&gdriver,&gmode,"C:\\TC\\BGI");
    errorcode=graphresult();
    if(errorcode!=grOk)
     {
      cout<<"This is a grafic mistake\nPlease push down some box ";
      getch();
      return 1;
     }
    else
    {
    cleardevice();
    midx = getmaxx() / 2;
    midy = getmaxy() / 2;
    setbkcolor(BROWN);
    setfillstyle(1,14);
    bar(midx-50.0,midy-50.0,midx+50.0,midy+50.0);
k = 0;
 while((c=getch())!=13&&/*добавь тут ограничение по границе рамке*/)
  {
    sprintf(str,"%c",c);
    outtextxy(x, y, str);
    k++;
    if(c==8)//backspace
       {
     k--;
     str[k]='\0';
     setfillstyle(SOLID_FILL,LIGHTCYAN);
     bar(midx-50.0,midy-50.0,midx+50.0,midy+50.0);
       }
    if(k == 9)
      {
      /*по координатам где написан текст, рисуем прямоугольник(закрашенный), и перемещаем курсор в требуемые координаты*/
      setfillstyle(1,14);
      bar(midx-50.0,midy-50.0,midx+50.0,midy+50.0);
      k = 0;
       }
  }
closegraph();
return 0;
}
}

я не знаю как добавить ограничение по границе рамки((( smile .....подскажи пожалуйста...  smile 

Автор: shokky 15.4.2007, 17:33
 smile ....мне помогли в Центре помощи....
спасибо за помощь smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)