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


Автор: Igor_K 21.4.2008, 18:11
Всем привет!

Я хочу у вас спросить про некоторые функции(если есть) работы с консолью.

1) Самая главная, что мне нужна щяс это подсветка строки определенным цветом.
2) Как можно удалить/вставить строку?
3) Как можно убрать курсор?


Еще вы мне не подскажите где можно почитать про прерывания дос работы с дисплеем?

Спасибо за любую информацию! smile 

Автор: vinter 21.4.2008, 18:41
смотри аттач, может найдешь что полезное.
я так понял ты с досом работаешь? тогда можно юзать cprintf, это вывод  в цвете.

Добавлено через 2 минуты и 10 секунд
вот еще пример какой то, не помню че тут происходит. Скомпиль - посмотри.
Код

// Работа с клавиатурой
#include<conio.h>
#include<stdio.h>
#include<ctype.h>
#define BLINK 128
void main()
{textmode(C40);
clrscr();
struct text_info k;
gettextinfo(&k);
int ctrelka,x=1,y=1;

for(x=1;x<=k.screenwidth;x++)
{gotoxy(x,k.screenheight-3);printf("_");}
gotoxy(1,1);x=1;y=1;
do{
   ctrelka=getch();if(ctrelka==0)
   {
     ctrelka=getch();

     switch(ctrelka)
   {
      case 0x4B:{x--;if(x<1){y--;x=k.screenwidth;}gotoxy(x,y);break; }
      case 0x4D:{x++;if(x>k.screenwidth){x=1;y++;}gotoxy(x,y);break;}
      case 0x50:{y++;if(y>k.screenheight-3){y=1;x++;}gotoxy(x,y);break;}
      case 0x48:{y--;if(y<1){y=k.screenheight-3;x--;}gotoxy(x,y);break;}
      case 0x20: { x++;gotoxy(x,y);break;}
   }
     }

    else{
    if(islower(ctrelka)!=0){
   printf("%c",ctrelka);gotoxy(x,y);
   x++;   }
   if(x>80){x=1; y++; }
   if(islower(ctrelka)==0&&!iscntrl(ctrelka)) {
       gotoxy((k.screenwidth-30)/2,k.screenheight-2);
         textcolor(RED|BLINK);
          cprintf("\aThis is not latinish symbol!!!" );
             gotoxy(x,y);}
       if(islower(ctrelka)!=0)

          {
             gotoxy((k.screenwidth-30)/2,k.screenheight-2);
             textcolor(BLACK);
            delline();
                gotoxy(x,y);  }
   }
}while(ctrelka!=0x1B);
clrscr();

}


Автор: Igor_K 21.4.2008, 18:50
vinter, спасибо. Щяс посмотрю ;) 
Да, под ДОС. smile 

Автор: Igor_K 21.4.2008, 22:25
С 2 вопросом уже разобрался, а вот с остальными не знаю как делать :(
Кто-то знает как 1 вопрос сделать. Он для меня самый важный. Подскажите пожалуйста.

Автор: Optimus 21.4.2008, 22:43
Так вроде бы vinter подсказал,
Код

#include <stdio.h>
#include <conio.h>

void main()
{
  clrscr();

  textcolor(BLUE);
  textbackground(WHITE);
  cprintf("Hello World");

  getch();
}

Такой вариант не подходит ?

Автор: Igor_K 22.4.2008, 08:56
Optimus, Спасибо! smile 
Но вопрос еще, как перевести строку в cprintf() ? Пишу:
Код

cprintf("Hello, World\nHello, World");

Выводит:
Код

Hello, World
             Hello, World

Как можно перевести на начало строки?

Автор: Earnest 22.4.2008, 11:44
\r\n
\n - новая строка
\r - перевод каретки

Автор: Igor_K 22.4.2008, 17:37
Earnest, спасибо большое! 

Осталось с курсором разобраться. smile 
Нашел такую функцию:
Код

#include <dos.h>

void setcursor(unsigned int shape)
/* Sets the shape of the cursor */
{
 union REGS reg;

 reg.h.ah = 1;
 reg.x.cx = shape;
 int86(0X10, &reg, &reg);
} /* setcursor */

устанавливает размер курсора(я так понял) В Турбо С++ работает, но я пишу в билдере 6 и в нем не работает :( Ктото знает как заставить работать в билдере?

Автор: vinter 22.4.2008, 18:01
Цитата(Igor_K @  22.4.2008,  18:37 Найти цитируемый пост)
 но я пишу в билдере 6 и в нем не работает

никак, пишешь по ДОС пиши под ДОС, в билдере уже win32 application

Автор: Igor_K 22.4.2008, 18:20
А с помощью ассемблера это можно сделать независимо от билдера?
Например, для паскаля я писал
Код

 mov ah, 01
 mov cx, $2000
 int 10h

и курсор убирался, но в С++ не работает этот код. А я то сам ламер в программировании :(

Автор: vinter 22.4.2008, 20:01
Цитата(Igor_K @  22.4.2008,  19:20 Найти цитируемый пост)
и курсор убирался, но в С++ не работает этот код. А я то сам ламер в программировании :(

тогда зачем изобретать велосипед? пиши в ДОС компиляторе и будет тебе счастье.

Автор: Igor_K 22.4.2008, 20:44
Цитата(vinter @  22.4.2008,  20:01 Найти цитируемый пост)
тогда зачем изобретать велосипед? пиши в ДОС компиляторе и будет тебе счастье. 

Там не счастье, там нервы!  smile  
Такая неудобная среда просто. ужас

Автор: Optimus 22.4.2008, 21:57
Билдера под рукой нету, и не могу проверить, но в Турбо С++ есть
Код

_setcursortype(_NOCURSOR);

Автор: xvr 23.4.2008, 15:19
Цитата(Igor_K @ 22.4.2008,  18:20)
А с помощью ассемблера это можно сделать независимо от билдера?

Это нельзя сделать в Win32 приложении, независимо ни от чего  smile 

Цитата

Например, для паскаля я писал
Код

 mov ah, 01
 mov cx, $2000
 int 10h

и курсор убирался, но в С++ не работает этот код. А я то сам ламер в программировании :(
Написать можно. Получишь GPF (General Protection Fault). int 10 (равно как и все остальные) не поддерживается в Win32 программах.


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